我有一个存储过程,需要用不同的输入集多次调用它。看上去一个脚本就能完成这个任务。如何生成脚本?请询问Oracle SQL Developer (Version 4.2.0.17.089),因此我将介绍以下内容:
(顺便问一下,这扇窗户叫什么名字?这能从菜单栏上找到吗?)
我选择正确的存储过程,指定正确的参数并单击“保存文件”。下面是保存的SQL文件:
DECLARE
I_MENU VARCHAR2(200);
ERRMSG VARCHAR2(200);
P_RETURNCUR SYS_REFCURSOR;
BEGIN
I_MENU := '4';
CMS_ACCESS_CONTROL.GETCMSMENUITEMINFO(
I_MENU => I_MENU,
ERRMSG => ERRMSG,
P_RETURNCUR => P_RETURNCUR
);
/* Legacy output:
DBMS_OUTPUT.PUT_LINE('ERRMSG = ' || ERRMSG);
*/
:ERRMSG := ERRMSG;
/* Legacy output:
DBMS_OUTPUT.PUT_LINE('P_RETURNCUR = ' || P_RETURNCUR);
*/
:P_RETURNCUR := P_RETURNCUR; --<-- Cursor
--rollback;
END;
我想多次复制和粘贴BEGIN
和END
之间的行。每次指定其输入参数集(不同的I_MENU)。但是在这样做之前,我尝试在中执行该文件。我没有做任何修改,但得到了以下错误:
Error report -
ORA-06550: Line 20, column 22
PLS-00382: expression is of wrong type
ORA-06550: Line 20, column 4
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
问题: 1)为什么会有这个错误? 2)如何用不同的参数多次调用相同的存储过程?我希望脚本这样做,因为我必须将脚本传递给另一个人来执行。
下面是存储过程(在/
之后绝对没有end getCMSMenuItemInfo
)
Procedure getCMSMenuItemInfo(
i_menu in varchar2,
ERRMSG out varchar2,
P_RETURNCUR out SYS_REFCURSOR)
as
begin
open P_RETURNCUR for
SELECT menu_item, menu_url
FROM someMenu
WHERE menuID = i_menu;
end getCMSMenuItemInfo;
发布于 2017-12-20 18:25:55
我给出这个解决方案是基于这样一个假设,即您有一定的标准来选择不同的菜单,这将传递给您的过程"CMS_ACCESS_CONTROL.GETCMSMENUITEMINFO“。从理论上讲,我将告诉您我的方法,并为您提供代码。
解决方案:
理论方法:
您可以将菜单存储在不同的表中,并在调用过程时遍历该表。现在,您必须决定要将多少值和哪些不同值传递给您的过程。
示例代码:
create table store_id
(
id number
);
insert into store_id select distinct menuID from someMenu;
您可以根据您的业务需求插入不同的菜单。
DECLARE
I_MENU VARCHAR2(200);
ERRMSG VARCHAR2(200);
P_RETURNCUR SYS_REFCURSOR;
BEGIN
for i in (select id from store_id ) loop
I_MENU := i.id;
GETCMSMENUITEMINFO(
I_MENU => I_MENU,
ERRMSG => ERRMSG,
P_RETURNCUR => P_RETURNCUR
);
/* Legacy output:
DBMS_OUTPUT.PUT_LINE('ERRMSG = ' || ERRMSG);
*/
ERRMSG := ERRMSG;
/* Legacy output:
DBMS_OUTPUT.PUT_LINE('P_RETURNCUR = ' || P_RETURNCUR);
*/
P_RETURNCUR := P_RETURNCUR; --<-- Cursor
--rollback;
end loop;
END;
我希望这能帮到你。
https://stackoverflow.com/questions/47898178
复制相似问题