在Squirrel SQL中调用Oracle存储过程

时间:2011-03-29 17:10:19

标签: java oracle squirrel-sql

我能够为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'),但这不起作用(错误的参数数量错误)。我在这个网站和其他网站上进行了广泛的搜索,但没有任何用处。请帮忙!

5 个答案:

答案 0 :(得分:16)

以下用于运行存储过程:

begin
   procedurename;
end;
/

是的,最后的斜线是必要的!

begin...end;声明 PL / SQL块(特定于Oracle)。斜杠是运行块的命令。

  

/(斜杠)

     

执行最近执行的SQL命令或PL / SQL块   存储在SQL缓冲区中。

     

[...]

Oracle Database Online Documentation, 10g Release 2 (10.2) / SQL*Plus® User's Guide and Reference

答案 1 :(得分:3)

我在Squirrel 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;
/

答案 2 :(得分:1)

this article解释的那样,使用“call”而不是“execute”可以解决问题。

答案 3 :(得分:0)

var v_result sys_refcursor

exec MyProc ('test label',:v_result)

答案 4 :(得分:0)

我已经在这方面挣扎了很长时间但是设法让它像这样工作:

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