无法从 SQL*Plus 创建和执行 PL/SQL 过程
Posted
技术标签:
【中文标题】无法从 SQL*Plus 创建和执行 PL/SQL 过程【英文标题】:Failing to create and execute PL/SQL procedure from SQL*Plus 【发布时间】:2013-05-23 05:29:51 【问题描述】:create or replace package XXX_MWA_LOV_TEST AS
TYPE t_ref_csr IS REF CURSOR;
PROCEDURE XXX_USERS_LOV (p_user_name IN VARCHAR2,x_users OUT NOCOPY t_ref_csr);
end XXX_MWA_LOV_TEST;
如何在 SQL*Plus 中运行XXX_USERS_LOV
过程?
我尝试了这段代码,但出现语法错误:
SQL> EXECUTE XXX_MWA_LOV_TEST.XXX_USERS_LOV('%',:my_p_out);
程序主体:
create or replace package body XXX_MWA_LOV_TEST AS
PROCEDURE XXX_USERS_LOV (x_users OUT NOCOPY t_ref_csr,p_user_name IN VARCHAR2) IS
BEGIN
OPEN x_users FOR select user_id,user_name,description
from fnd_user
where user_name like p_user_name;
DBMS_OUTPUT.PUT_LINE('TESTING DATA');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR IN USER LOV '|| SQLERRM);
END XXX_USERS_LOV;
end XXX_MWA_LOV_TEST;
【问题讨论】:
你定义了过程体吗? 我已经更新了程序主体.. 请告诉我如何执行包含参考光标作为参数的程序.. 我是新手... 【参考方案1】:首先,参数在spec和包体中的顺序必须一致。
你可以这样调用引用光标:
declare
v_cursor xxx_mwa_lov_test.t_ref_csr;
var1 the_type_you_need;
var2 the_type_you_need;
...
begin
xxx_mwa_lov_test.xxx_users_lov(v_cursor,'username...');
loop
fetch v_cursor into var1, var2...;
exit when v_cursor%notfound;
... do what you want with the vars...
end loop;
end;
/
【讨论】:
以上是关于无法从 SQL*Plus 创建和执行 PL/SQL 过程的主要内容,如果未能解决你的问题,请参考以下文章