是否可以从select语句中选择用于调用过程的参数?
EXECUTE PROCEDURE_NAME(para1,para2,para3,para4);
commit;
是否可以从选择查询中选择para1,para2,para3,para4?
EXECUTE PROCEDURE_NAME((SELECT PARA1,PARA2,PARA3,PARA4 FROM TABLEA))
COMMIT;
我无权修改该程序。
答案 0 :(得分:1)
作为@ vc74建议的细微变化,您可以将EXECUTE
命令(假设仍然是SQL * Plus或SQL Developer,无论如何都只是匿名块的包装器)替换为显式匿名块:
begin
for r in (SELECT PARA1,PARA2,PARA3,PARA4 FROM TABLEA) loop
PROCEDURE_NAME(r.PARA1,r.PARA2,r.PARA3,r.PARA4);
end loop;
end;
/
(我将原来调用中的位大写,而将新位中的小写保留,以区分它们。)
使用循环仅意味着您无需声明局部变量并选择其中的内容。它还可以让您处理表中的多行,尽管我看到一个注释,您只希望一行。但是,另一方面,它不会抱怨没有行,或者有多于一行,就像可变方法一样。
您还可以使用记录类型来避免分别声明所有参数:
declare
l_row tablea%rowtype;
begin
SELECT * into l_row FROM TABLEA;
PROCEDURE_NAME(l_row.PARA1,l_row.PARA2,l_row.PARA3,l_row.PARA4);
end;
/
这现在确实希望在表中找到确切的一行。
答案 1 :(得分:0)
您可以在sql中调用函数。因此,如果您能够在架构中创建一个函数,则可以执行以下操作:
function_name
,该函数调用过程procedure_name
并返回一些虚拟结果select function_name(para1,para2,para3,para4) from tablea
功能示例:
create or replace function function_name(
p1 varchar2,
p2 varchra2,
p3 varchar2,
p4 varchar2
) return number
is
begin
procedure_name(p1,p2,p3,p4); -- here you execute the procedure
return null;
end;