PostgreSQLの更新機能
-
08-07-2019 - |
質問
作成した更新機能に関して質問があります...
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;
OK
存在しない行を更新している場合、SQLはエラーをスローしませんか?
ありがとう
解決
それはDBMSに依存します-いいえ、エラーをスローすべきではありません。 SQL標準(最近のISO / IEC 9075:2008)では、エラー条件とは別にSQLNOTFOUND条件(+100)を設定する必要があります。 (Informixでは、MODE ANSIデータベースを使用すると、SQLNOTFOUNDが返されます。非ANSIデータベースを使用すると、条件として0(エラーなし)が返されます。その理由は、元のSQL-86標準より前です。 )
SQLはセットベースの言語であることに注意してください。要求したのは、ステートメントが(一致する)行のセットを更新することでした-そして、ゼロ(一致する)行を含むセットを更新することは完全に有効です。
他のヒント
" FOUND"を使用できます。最後のステートメントが1つ以上の行に影響したかどうかを検出するには、マニュアル。
例:
-- snippet
IF FOUND THEN
loc_result = 'success';
ELSE
loc_result = 'failed'; -- or something similiar...
END IF;
所属していません StackOverflow