문제

내가 만든 업데이트 기능에 관한 질문이 있습니다 ...

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;

좋아, 예를 들어 존재하지 않는 레코드를 입력하면 아무것도 업데이트되지 않았음에도 불구하고 성공을 반환합니다!

존재하지 않는 행을 업데이트하는 경우 SQL이 오류를 던지지 않습니까?

감사

도움이 되었습니까?

해결책

DBMS에 따라 다르지만 아니요. 오류가 발생하지 않아야합니다. SQL 표준 (요즘 ISO/IEC 9075 : 2008)에 따르면, 오류 조건과는 별개의 SQLNotFound 조건 (+100)을 설정해야합니다. (Informix를 사용하면 Mode Ansi 데이터베이스를 사용하는 경우 SQLNotFound가 발생합니다. 비 ANSI 데이터베이스를 사용하면 0 (오류 없음)이 조건으로 표시됩니다. 해당 원래 SQL-86 표준의 사전 날짜의 이유. )

SQL은 세트 기반 언어입니다. 당신이 요청한 것은이 명령문이 일련의 (일치하는) 행을 업데이트한다는 것이 었으며 0 (일치하는) 행이 포함 된 세트를 업데이트하는 것이 완벽하게 유효합니다.

다른 팁

마지막 진술이 하나 이상의 행에 영향을 미쳤는지 감지하기 위해 "발견"을 사용할 수 있습니다. 수동.

예시:

-- snippet
IF FOUND THEN
  loc_result = 'success';
ELSE
  loc_result = 'failed'; -- or something similiar...
END IF;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top