【问题标题】:Execute Oracle Stored Proc执行 Oracle 存储过程
【发布时间】:2011-06-19 06:39:10
【问题描述】:

我有一个带有签名的 oracle 存储过程:(包的一部分:承包商)

PROCEDURE usp_sel_contractors(g_contractors OUT sel_contractor);

我正在尝试像这样执行它:

execute Contractor.usp_sel_contractors;

我习惯了 MSSqlServer。这似乎应该是直截了当的。

我不断收到错误:

Invalid Sql Statement

谢谢!

【问题讨论】:

  • 什么是“sel_contractor” - 一个参考光标?
  • 不是用户存储过程。称为 Contractor 的包的一部分。 execute Contractor.usp_sel_contractors也有同样的效果
  • 不,我问的是“sel_contractor”,而不是“usp_sel_contractor”——“OUT”后面的那个词。
  • 呜呜呜我的错。 :-P TYPE sel_contractor IS REF CURSOR;

标签: oracle stored-procedures oracle11g oracle-sqldeveloper


【解决方案1】:

假设 sel_contractor 是 ref 游标类型,您可以在 SQL Plus 中执行此操作:

var rc refcursor

exec usp_sel_contractors(:rc)

print rc

【讨论】:

  • 你说我可以在sql plus中做到,有没有办法在sql developer中做到这一点?
  • 是的,这也适用于 SQL Developer - 我刚刚尝试过。使用“运行脚本”按钮。
  • 我试过了:var rc refcursor exec Contractor.usp_sel_contractors(:rc) print rc 并没有得到任何结果,但在脚本输出下它说:Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) | VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) | NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR | BINARY_FLOAT | BINARY_DOUBLE ] ]
  • 不,就是这样。谢谢。我只是不明白为什么我不能让存储过程的结果像常规查询的结果一样显示在漂亮的结果网格中。 MsSqlServer 就这么容易做到……
【解决方案2】:

我不确定您为什么会收到该特定错误消息,但明显的问题是该过程有一个参数,而您没有传递一个参数。由于它是一个 OUT 参数,因此您需要传递一个适当类型的变量,该变量将由过程填充。

例如:

DECLARE
  my_contractors  sel_contractor;
BEGIN
  usp_sel_contractors( my_contractors );

  // Do something with the contents of my_contractors here
END;
/

【讨论】:

  • 呃。好的,谢谢。把它留给 Oracle 来解决这个问题。我只想输出结果?我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 2019-02-05
相关资源
最近更新 更多