在Squirrel SQL中调用Oracle存储过程

11

我已经成功创建了一个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'),但是这不起作用(参数数量错误)。我在这个网站和其他网站上进行了广泛搜索,但没有什么有用的结果。请帮忙!


@dovka的回答似乎是唯一一个回答这个问题的。Kayeight并不是在问如何从Squirrel中调用过程。该问题当前的标题“在Squirrel SQL中调用Oracle存储过程”是具有误导性的。 - Lambart
5个回答

18

这个回答如何解决问题?@Kayeight的存储过程有两个参数:一个输入参数和一个输出参数。那么,如何通过Squirrel SQL调用带有“out”参数的存储过程呢?如果begin procedurename; end; /语法优于call procedurename;,请解释原因。 - Lambart
需要使用两个分号而不是三个分号! - nsandersen

4

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

1
就像这篇文章所解释的那样,使用“调用”而不是“执行”应该可以解决这个问题。

1
请再次阅读问题--提问者已经知道了call - Lambart
1
文章的链接已经失效。 - Christoph Walesch

0

我曾经为此苦苦挣扎很长时间,但最终成功地让它像这样工作:

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

0
var v_result sys_refcursor

exec MyProc ('test label',:v_result)

我没有SQL*Plus,我正在使用Squirrel SQL,所以这不起作用。 :( - Kayeight
这个语法是Oracle特定的。您是否在SQL Squirrel中安装了Oracle插件?http://www.squirrelsql.org/index.php?page=plugins - Shamit Verma
它显示插件已安装,但我收到了ORA-00900:无效的SQL语句错误... - Kayeight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接