에러 왜 뜨나요? ㅠㅠ 도와주세요 0 2 600

by 구루루비비 [PL/SQL] [2018.12.05 11:48:05]


CREATE OR REPLACE PROCEDURE insert_num_proc

(

 float_id_param float_sample.float_id%TYPE,

 float_value_param float_sample.float_value%TYPE)

AS

 float_checker float_sample.float_id%TYPE;

BEGIN

 

 SELECT float_id INTO float_checker FROM float_sample;

 

 INSERT INTO float_sample (float_id, float_value) 

 VALUES

 (float_id_param, float_value_param);

 

 IF float_checker = float_id_param THEN

 RAISE_APPLICATION_ERROR(-20001, 'Duplicate value is inserted.'); 

 END IF;

 

END;

/

 

EXECUTE insert_num_proc(3,2);

 

/

Error report -

ORA-01422: exact fetch returns more than requested number of rows

ORA-06512: at "DL29232.INSERT_NUM_PROC", line 9

ORA-06512: at line 1

01422. 00000 -  "exact fetch returns more than requested number of rows"

*Cause:    The number specified in exact fetch is less than the rows returned.

*Action:   Rewrite the query or change number of rows requested

 

첫번째 프로시져를 쓰고 나서 제가 쓴 프로시져로 raise application error가 작동 되는지 보려고 하는데 자꾸 이상한 에러가 뜨네요....  제대로 돌아갔을 때 3,2를 insert 하면 제가 임의로 넣은 에러메세지 'Duplicate Value is Inserted.' 라는 메세지가 떠야합니다.

 

프로시제 만들때는 에러 안 떴는데 ㅠㅠ 도와주세요

오라클 PL SQL 입니다

by 신이만든지기 [2018.12.05 16:58:08]

 SELECT float_id INTO float_checker FROM float_sample;
위 구문에서  2개 이상의 row가 반환되는지 확인해보시기 바랍니다.


by 마농 [2018.12.06 09:45:27]
CREATE OR REPLACE PROCEDURE insert_num_proc
( float_id_param    float_sample.float_id%TYPE
, float_value_param float_sample.float_value%TYPE
)
AS
    nCnt NUMBER;
BEGIN
    SELECT COUNT(*)
      INTO nCnt
      FROM float_sample
     WHERE float_id = float_id_param
    ;
    IF nCnt = 0 THEN
        INSERT INTO float_sample (float_id, float_value)
        VALUES (float_id_param, float_value_param);
    ELSE
        RAISE_APPLICATION_ERROR(-20001, 'Duplicate value is inserted.');
    END IF;
END;
/

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입