2013-05-24 3 views
0

db (실제로는 전혀 사용하지 않음)에 익숙하지 않아 문제가 발생합니다.
Oracle 11g이 있고 PL/SQL 개발자를 사용하고 있습니다.
나는 간단한 절차가 있습니다커서가있는 Oracle 프로 시저 실행

type t_ref_cursor is ref cursor; 

procedure fakeProc (
     io_cursor  in out t_ref_cursor 
    ) 
    is 
     begin 

     open io_cursor for 
     SELECT * from myTable; 

end fakeProc; 

지금 내가 (안 테스트 창)는 SQL 창으로 실행할을 나는 실행하려고하고 무엇 :

v_cur   cursor; 
begin 
    fakeProc(:v_cur); 
end; 

내가 오류를 얻을 : ORA-00900 : 유효하지 않은 SQL 문 ORA-01008 : 모든 변수가 바인딩되지 않았습니다.

이렇게 (begin-end 포함) 프로 시저를 실행하는 올바른 방법을 가르쳐 줄 수 있습니까?

SQL> VARIABLE p_cur REFCURSOR; 
REFCURSOR not supported 

이후 버전 (명령 창)을 지원할 수있다, 또는 당신은 SQL * Plus를 사용할 수 있습니다 : PL/SQL 개발자의

+1

이 예외 블록은 발생할 수있는 오류를 숨기는 것을 제외하고는 아무런 목적이 없습니다. 그것을 제거하십시오! –

+0

t_ref_cursor 란 무엇입니까? – Teshte

+0

@VincentMalgrat : 그것은 무의미합니다 ... – Nianios

답변

1

사용 무언가 :

declare v_cur   SYS_REFCURSOR; 
begin 
    fakeProc(v_cur); 
end; 

그리고 절차는 다음과 같습니다

CREATE OR REPLACE PROCEDURE FAKEPROC( 
    io_cursor  in out SYS_REFCURSOR 
) 
IS 
     begin 

     open io_cursor for 
     SELECT * from resource_map; 


END FAKEPROC; 

잊지 마세요 닫으 커서를 사용하여 작업을 완료 한 후

+0

대단히 감사합니다. – Nianios

+0

@Nianios는 작업 완료 후'커서를 닫는 것을 잊지 마십시오. – Teshte

+0

OK, 시간을내어 주셔서 감사합니다. – Nianios

1

버전 7.1.4은 심판 커서를 지원하지 않습니다. 이 * SQL에서 직접 복사 - 붙여 넣기입니다 플러스 :이 같은

SQL> CREATE OR REPLACE PROCEDURE prc (p_cur OUT SYS_REFCURSOR) IS 
    2 BEGIN 
    3  OPEN p_cur FOR SELECT * FROM dual; 
    4 END; 
    5/

Procedure created. 

SQL> -- declare variable 
SQL> VARIABLE p_cur REFCURSOR; 
SQL> BEGIN 
    2  prc(:p_cur); 
    3 END; 
    4/

PL/SQL procedure successfully completed. 

SQL> print p_cur 

DUM 
--- 
X 
+0

버전 10.0.2가 있습니다. 내가 SQL 창에서 코드를 시도하고 첫 번째 라인 (잘못된 SQL 문)에 오류가 발생했습니다. – Nianios

+1

PLSQL dev 명령 창은 명령 행'sqlplus'와 매우 비슷하지만 기능이 적습니다. PLSQL dev의 모든 멋진 기능을 계속 사용하고'sqlplus'로 스크립트를 실행할 수 있습니다 - 그게 제가 보통하는 일입니다. –

+0

도움 주셔서 감사합니다. 나는 테세의 해결책을 받아 들였다. 귀하의 시간과 조언을 주셔서 감사합니다 – Nianios