programing

다람쥐 SQL에서 Oracle 저장 프로시저 호출

stoneblock 2023. 10. 6. 20:50

다람쥐 SQL에서 Oracle 저장 프로시저 호출

Oracle 데이터베이스에 대한 저장 프로시저를 만들 수 있었지만 이제는 실행 방법을 찾을 수 없습니다.저는 Squirrel SQL을 사용하고 있고 이것이 프로시저를 만드는 데 효과가 있었습니다.

CREATE OR REPLACE PROCEDURE MyProc(label IN varchar2, results OUT sys_refcursor) AS
BEGIN
OPEN results FOR
    SELECT Label, Count, Timestamp 
        FROM table1
            LEFT JOIN table2 ON table1.Name=table2.Name 
    WHERE table1.Label=label
    ORDER BY Timestamp;
END;
/

저는 결과 세트를 받아서 보여줄 수 있기를 원합니다.사용해 보았습니다.call MyProc('param'), 그러나 이것은 작동하지 않습니다(인수 오류 wrong 수).저는 이 사이트 등에서 많이 검색해 보았지만 유용한 것이 없습니다.도와주세요!

다음은 저장 프로시저를 실행하는 작업입니다.

begin
   procedurename;
end;
/

네, 마지막에 슬래시가 필요합니다!

begin...end;PL/SQL 블록(오라클별)을 선언합니다.슬래시는 블록을 실행하는 명령입니다.

/(slash)

SQL 버퍼에 저장된 가장 최근에 실행된 SQL 명령 또는 PL/SQL 블록을 실행합니다.

[...]

Oracle Database 온라인 설명서, 10g Release 2 (10.2) / SQL*Plus® 사용 설명서 및 참조

다람쥐 SQL에서 작동하는 유일한 구문은 PL/SQL 블록입니다.

declare
v_label  varchar2:='SOMELABEL';
TYPE ref_cursor IS REF CURSOR;
v_cur_results ref_cursor;
begin
MyProc (v_label, v_cur_results)
end;
/

이 기사가 설명하는 것처럼 "실행" 대신 "콜"을 사용하면 문제가 해결됩니다.

var v_result sys_refcursor

exec MyProc ('test label',:v_result)

오랫동안 이 문제로 어려움을 겪었지만 이렇게 잘 해결할 수 있었습니다.

{call DBMS_SESSION.SET_CONTEXT  ( namespace => 'clientcontext', attribute => 'foo', value     => 'bar' )}

언급URL : https://stackoverflow.com/questions/5476269/calling-an-oracle-stored-procedure-in-squirrel-sql