【问题标题】:How to run a stored procedure in oracle sql developer?如何在 oracle sql developer 中运行存储过程?
【发布时间】:2013-12-09 19:06:47
【问题描述】:

我正在尝试运行这个存储过程

DECLARE
  P_TICKER_SERIAL VARCHAR2(200);
  P_SECTOR_CODE   VARCHAR2(200);
  P_SOURCE_ID     VARCHAR2(200);
  P_COUNTRY_CODE  VARCHAR2(200);
  P_FILTER_TYPE   NUMBER;
  CUR_OUT         SYS_REFCURSOR;
  dbUserTable     DBUSER%ROWTYPE;
BEGIN
  P_TICKER_SERIAL :='14232';
  P_SECTOR_CODE   := '15';
  P_SOURCE_ID     := 'TDWL';
  P_COUNTRY_CODE  := 'SA';
  P_FILTER_TYPE   := 1;

  PKG_name.GET_user(
    P_TICKER_SERIAL => P_TICKER_SERIAL,
    P_SECTOR_CODE   => P_SECTOR_CODE,
    P_SOURCE_ID     => P_SOURCE_ID,
    P_COUNTRY_CODE  => P_COUNTRY_CODE,
    P_FILTER_TYPE   => P_FILTER_TYPE,
    CUR_OUT         => CUR_OUT
  );
  open CUR_OUT;
  LOOP
    FETCH CUR_OUT INTO dbUserTable;
    dbms_output.put_line(dbUserTable.email);
  END LOOP;
  CLOSE CUR_OUT;
END;
 /

但它给了我这个错误

Error report:
ORA-06550: line 8, column 15:
PLS-00201: identifier 'DBUSER' must be declared
ORA-06550: line 8, column 15:
PL/SQL: Item ignored
ORA-06550: line 24, column 2:
PLS-00382: expression is of wrong type
ORA-06550: line 24, column 2:
PL/SQL: SQL Statement ignored
ORA-06550: line 26, column 24:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 26, column 5:
PL/SQL: SQL Statement ignored
ORA-06550: line 27, column 28:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 27, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

任何人都知道什么是错的? 谢谢。

【问题讨论】:

  • CUR_OUT 代表多行而不是单个值。
  • 1) GET_user 过程很可能会打开游标,无需再次打开它(PLS-00382 错误的原因) - 删除 open CUR_OUT 语句; 2) 例如,如果您不想永远挂起会话,则需要在 CUR_OUT%notfound 时退出循环条件。

标签: oracle stored-procedures


【解决方案1】:

尝试像这样执行程序,

var c refcursor;
execute pkg_name.get_user('14232', '15', 'TDWL', 'SA', 1, :c);
print c;

【讨论】:

  • 感谢您的快速回复,但它给了我这个错误:绑定变量“c”未声明匿名块完成
  • @Samy Louize Hanna,在执行程序之前,你需要运行var c refcursor这个机制是为了给一个变量赋值。
  • 命令中从第 3 行开始出错:执行 pkg_name.get_user('14232', '15', 'TDWL', 'SA', 1, :c) 错误报告:ORA-00904:" TDWL”:无效标识符 ORA-06512:在“schema.PKG_name”,第 156 行 ORA-06512:在第 1 行 00904。00000 -“%s:无效标识符” *原因:*操作:第 156 行不涉及我的存储过程
  • @Samy Louize Hanna,错误信息看起来像,您的程序代码有问题。
  • 第 156 行没有引用我的存储过程
【解决方案2】:

假设您已经创建了一个如下所示的过程。

CREATE OR REPLACE PROCEDURE GET_FULL_NAME like
(
  FIRST_NAME IN VARCHAR2, 
  LAST_NAME IN VARCHAR2,
  FULL_NAME OUT VARCHAR2 
) IS 
BEGIN
  FULL_NAME:= FIRST_NAME || ' ' || LAST_NAME;
END GET_FULL_NAME;

在 Oracle SQL Developer 中,您可以通过两种方式运行此过程。

1.使用 SQL 工作表

创建一个 SQL 工作表并像这样编写 PL/SQL 匿名块并按 f5

DECLARE
  FULL_NAME Varchar2(50);
BEGIN
  GET_FULL_NAME('Foo', 'Bar', FULL_NAME);
  Dbms_Output.Put_Line('Full name is: ' || FULL_NAME);
END;

2。使用 GUI 控件

  • 展开程序

  • 右键单击您创建的程序,然后单击运行

  • 在弹出的窗口中,填写参数并点击OK

干杯!

【讨论】:

  • 抱歉,第一点给出了问题'必须声明标识符 FULL_NAME'
  • 如果我没记错的话,我相信你的意思可能是写“......你可以分两步运行这个过程”(即“步骤”,而不是“方式”)。
【解决方案3】:

-- 如果不需要向过程传递参数,只需:

BEGIN
   MY_PACKAGE_NAME.MY_PROCEDURE_NAME
END;

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 2011-04-28
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2013-08-30
    相关资源
    最近更新 更多