如何在 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 中运行存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Developer 中检查语法 Oracle 存储过程?
oracle 客户端 sql developer 如何修改jdk版本