如何在 oracle sql developer 中运行存储过程?

Posted

技术标签:

【中文标题】如何在 oracle sql developer 中运行存储过程?【英文标题】:How to run a stored procedure in 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 时退出循环条件。 【参考方案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;

【讨论】:

以上是关于如何在 oracle sql developer 中运行存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

如何安装pl/sql developer

如何安装pl/sql developer

如何在 SQL Developer 中检查语法 Oracle 存储过程?

oracle 客户端 sql developer 如何修改jdk版本

如何在 Oracle SQL Developer 中查询数据库名称?

如何在 oracle sql developer 中运行存储过程?