Update-Funktion in PostgreSQL
-
08-07-2019 - |
Frage
Ich habe eine Frage in Bezug auf eine Update-Funktion Ich habe ...
CREATE OR REPLACE FUNCTION rm_category_update(icompany bpchar, iraw_mat_cat_code bpchar, iraw_mat_cat_desc bpchar)
RETURNS character AS
$BODY$
DECLARE
loc_result CHAR(50);
BEGIN
UPDATE rm_category
SET
raw_mat_cat_code = iraw_mat_cat_code,
raw_mat_cat_desc = iraw_mat_cat_desc
WHERE company = icompany;
loc_result = 'success';
RETURN loc_result ;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION rm_category_update(icompany bpchar, iraw_mat_cat_code bpchar, iraw_mat_cat_desc bpchar) OWNER TO postgres;
Okay, also, wenn ich Eingabe einen Datensatz, der zum Beispiel 9, nicht vorhanden ist, gibt es Erfolg, obwohl ich weiß, es hat sich nichts aktualisiert!
Hat Fehler SQL nicht werfen, wenn es eine nicht vorhandene Zeile ??
AktualisierungDanke
Lösung
Es hängt von der DBMS - aber nein, es sollte nicht einen Fehler aus. Nach dem SQL-Standard (ISO / IEC 9075: 2008 in diesen Tagen), sollte es die SQLNOTFOUND Bedingung (100) festgelegt, die von jedem Fehlerzustand getrennt ist. (Mit Informix, wenn Sie eine MODE ANSI-Datenbank verwenden, erhalten Sie SQLNOTFOUND, wenn Sie eine nicht-ANSI-Datenbank verwenden, erhalten Sie 0 (kein Fehler) als Bedingung Die Gründe für diese schon vor der ursprünglichen SQL-86-Standard.. )
Beachten Sie, dass SQL eine Set-basierte ist die Sprache. Was Du angefordert war, dass die Aussage einen Satz von (Matching) Zeilen aktualisieren -. Und es ist durchaus möglich, einen Satz mit null (Matching) Zeilen zu aktualisieren
Andere Tipps
Sie könnten „FOUND“ verwenden, um festzustellen, ob die letzte Anweisung eine betroffenen oder mehr Zeilen finden Sie unter Hand .
Beispiel:
-- snippet
IF FOUND THEN
loc_result = 'success';
ELSE
loc_result = 'failed'; -- or something similiar...
END IF;