質問

作成した更新機能に関して質問があります...

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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top