ORACLE-从表中选择调用过程的参数

ORACLE-从表中选择调用过程的参数,oracle,stored-procedures,parameter-passing,Oracle,Stored Procedures,Parameter Passing,是否可以从select语句中选择调用过程的参数 EXECUTE PROCEDURE_NAME(para1,para2,para3,para4); commit; 是否可以从select查询中选择para1、para2、para3、para4 EXECUTE PROCEDURE_NAME((SELECT PARA1,PARA2,PARA3,PARA4 FROM TABLEA)) COMMIT; 我没有修改过程的权限。您可以在sql中调用函数。因此,如果您能够在模式中创建函数,则可以执行以下操作

是否可以从select语句中选择调用过程的参数

EXECUTE PROCEDURE_NAME(para1,para2,para3,para4);
commit;
是否可以从select查询中选择para1、para2、para3、para4

EXECUTE PROCEDURE_NAME((SELECT PARA1,PARA2,PARA3,PARA4 FROM TABLEA))
COMMIT;

我没有修改过程的权限。

您可以在sql中调用函数。因此,如果您能够在模式中创建函数,则可以执行以下操作:

在模式中创建一个调用过程名并返回一些伪结果的函数名 在sql查询中使用此函数:从表A中选择函数\u namepara1、para2、para3、para4 功能示例:

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;

作为@vc74建议的一个细微变化,您可以将EXECUTE命令替换为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;
/

现在,表中只能找到一行。

一次一个参数。。。可能您尝试时收到了什么错误消息?我认为您不能这样做。但您可以从表A中选择PARA1、PARA2、PARA3、PARA4到P1、P2、P3、P4,然后执行过程\u NAMEP1、P2、P3、P4该选择返回多少行?您是否试图将所有这些行中的值传递给过程?@KaushikNayak仅传递1行。如果示例中的参数很少,如3或4,则最好在Alex的回答中使用方法。但是,不建议创建一个过程,该过程接受来自单个表/查询列的这么多参数。一个ref游标是一个更好的方法。那么我将向该函数传递4个参数?然后返回4个值?你能分享一些函数的例子吗?是的,函数中的参数列表与基本过程中的参数列表相同。函数确实执行过程。\u namepara1,para2,para3,para4是正确的syntex吗?我编辑了后添加了一个函数的例子。传入的参数类型和顺序应与过程中的相同。