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