2010-12-30 7 views
3

프로 시저를 만들려고하는데 오류없이 생성되었습니다. 그러나 그것을 실행하려고하면 다음 오류가 발생합니다. 알려 주시기 바랍니다CREATE Oracle 프로 시저

SQL> begin 
    2 Update_STUD_Fin ('1011'); 
    3 end; 
    4/
begin 
* 
ERROR at line 1: 
ORA-06511: PL/SQL: cursor already open 
ORA-06512: at "ORAIN.UPDATE_STUD_FIN", line 3 
ORA-06512: at "ORAIN.UPDATE_STUD_FIN", line 8 
ORA-06512: at line 2 

절차는

SQL> CREATE OR REPLACE PROCEDURE Update_STUD_Fin (AIDY_CODE IN VARCHAR2) IS 
    2 CURSOR PublicationC IS 
    3  SELECT SGidm from SGB 
    4  WHERE SGCODE_EFF ='201030'; 
    5 BEGIN 
    6 OPEN PublicationC; 
    7 
    8 FOR PublicationR IN PublicationC 
    9 LOOP 
10  DBMS_OUTPUT.PUT_LINE(PublicationR.SGidm); 
11 END LOOP; 
12 
13 close PublicationC; 
14 
15 END; 
16/

Procedure created. 
+0

서식을 주셔서 감사합니다. BoltClock. –

+0

@ Adam : 하루 하루 만에. – BoltClock

+1

-1 :이 질문에 대한 답변은 http://stackoverflow.com/questions/4564689입니다. 새 계정을 만들고 다시 요청하고 있습니까? – Codo

답변

11

당신은 명시 적으로 커서를 열고 또한 루프에 대한 암시에서 사용할 수 없다. 암시 적 (FOR 루프) 또는 명시 적 (OPEN/FETCH/CLOSE)을 많이 선택합니다.

7

FOR/IN/LOOP가있는 커서를 사용하면 커서를 명시 적으로 열 필요가 없습니다.

SQL> CREATE OR REPLACE PROCEDURE Update_STUD_Fin (AIDY_CODE IN VARCHAR2) IS 
    2 CURSOR PublicationC IS 
    3  SELECT SGidm from SGB 
    4  WHERE SGCODE_EFF ='201030'; 
    5 BEGIN 
    8 FOR PublicationR IN PublicationC 
    9 LOOP 
10  DBMS_OUTPUT.PUT_LINE(PublicationR.SGidm); 
11 END LOOP; 
12 
15 END; 
16/
+0

"close"도 필요하지 않습니다. –

+0

힌트를 보내 주셔서 감사합니다. 나는 그것을 고쳤다. – Codo

0

6512 오류 메시지는 오류가 발생한 PL-SQL 코드의 행 번호를 나타냅니다. 이전에 다른 메시지가 없으십니까?

0

위의 다른 오류 메시지없이 ORA-06512 메시지가 나타나는 이유를 모르겠습니다. 전체 오류 메시지를 붙여 넣었습니까?

ORA-06512는 PL/SQL 코드에서 예외가 발생할 때 스택 추적을 인쇄 할 때만 사용됩니다. 다음은 완전한 예입니다 :

 
ERROR at line 1: 
ORA-01001: invalid cursor 
ORA-06512: at "USER.SOME_PROCEDURE", line 5 
ORA-06512: at line 1 

실제 오류는 ORA-01001입니다. ORA-06512는 단지 오류가 발생한 위치를 나타냅니다 : 익명의 PL/SQL 블록의 라인 1이 호출 한 USER.SOME_PROCEDURE의 라인 5.

  • FOR ... IN some_cursor LOOP ...를 사용하여 다음 커서를 닫아야 명시 적으로 공개하지 : 당신의 코드를 살펴 촬영

    , 나는 몇 가지 문제를 발견 할 수 있습니다. 그것은 FOR 루프에 의해 자동으로 처리됩니다.

  • 열려 있지 않은 커서도 닫지 마십시오. 이렇게하려고하면 ORA-01001 '잘못된 커서'오류 메시지가 표시됩니다. 커서를 열기 전에 커서가 닫혔는지 확인하기 위해 이것을 넣은 것 같습니다.하지만 불행히도 그렇게 할 수는 없습니다.

즉, 당신은 당신의 절차에서 OPENCLOSE의 모든 조건을 삭제하고 다시 시도해야합니다.

관련 문제