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 ??

Aktualisierung

Danke

War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top