커서에서 반환 된 레코드/행에 너무 루프가 있습니다.
CREATE OR REPLACE PROCEDURE proc
IS
result varchar(50);
cursor c2 is
SELECT note
FROM student;
BEGIN
FOR r2 IN c2 LOOP
IF r2.note = 5 THEN -- IN would also work but doesn't add anything
result := 'contains 5';
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE(result);
END;
/
을하지만 당신은 단지 값 5
어떤 기록의 존재 여부를 테스트하는 경우 당신은 커서 필요가 없습니다 : 당신은 그렇게 커서 자체를 참조 할 수 없습니다
CREATE OR REPLACE PROCEDURE proc
IS
result varchar(50);
BEGIN
SELECT max('contains 5')
INTO result
FROM student
WHERE note = 5;
DBMS_OUTPUT.PUT_LINE(result);
END;
/
을
5가있는 행이 있다면 'contains 5'
문자열이 표시됩니다. 그렇지 않으면 null
이 표시됩니다. max()
은 테이블에 0 개 또는 일치하는 레코드가 하나 이상있는 경우 예외가 throw되는 것을 중지합니다.
"작동하지 않음"을 정의하십시오. 당신은 확실히'IN' 문을'IF' 문 안에서 사용할 수 있습니다. 그래서 다른 무언가가 여기에 있어야합니다. –
'c2'는 커서 이름입니까, 아니면 가져온 레코드 변수입니까? –
@AlexPoole c2는 커서 이름입니다. – IAM