2

有没有办法列出调用存储过程(使用 Oracle DB)所需的所有参数?

例如,我有一个其他人开发的名为 x 的函数,现在我必须调用它,但我不知道 x 期望哪些参数以及哪些参数是强制性的。

4

3 回答 3

1

根据授予的权限,您可以查询all_argumentsuser_arguments或从 11g.r1 dba_arguments开始列出存储过程的参数和其他与参数相关的信息:

例子:

SQL> create or replace procedure ProcX(
  2    p_par1 in number,
  3    p_par2 in varchar2 default 'default',
  4    p_par3 out number
  5  )
  6  is
  7  begin
  8    null;
  9  end;
 10  /

Procedure created

select t.object_name
     , t.argument_name
     , t.position
     , t.data_type
     , t.defaulted
     , t.in_out
  from user_arguments t
 where  t.object_name = 'PROCX'

Object_Name Argument_Name Position Data_Type Defaulted In_Out 
--------------------------------------------------------------
PROCX       P_PAR3        3        NUMBER    N         OUT 
PROCX       P_PAR2        2        VARCHAR2  Y         IN 
PROCX       P_PAR1        1        NUMBER    N         IN 

Y列中的值Defaulted表示该参数p_par2具有默认值,因此是可选的。

于 2013-09-06T22:16:54.110 回答
0

在许多情况下,甚至可以从 -tables 中找到子例程参数%_ARGUMENTS(如 Nicholas 所证明的那样),这可能还不够(取决于域的上下文/复杂性)。相反,您应该可以通过文档或查看数据库中的子例程(记录的)代码(SQL DeveloperPL/SQL DeveloperToad等 GUI 工具非常适合)或从版本控制系统访问记录的子例程签名。

如果你的出发点真的是:

我有一个其他人开发的名为 x 的函数,现在我必须调用它,但我不知道 x 期望哪些参数以及哪些参数是强制性的。

而且没有文档,您也无法访问源代码,那么我怀疑这些信息如下:

Object_Name Argument_Name Position Data_Type Defaulted In_Out 
--------------------------------------------------------------
PROCX       P_PAR3        3        NUMBER    N         OUT 
PROCX       P_PAR2        2        VARCHAR2  Y         IN 
PROCX       P_PAR1        1        NUMBER    N         IN 

除非函数“微不足道”,否则对您没有多大帮助(即使参数具有更多描述性的名称)。

为了您的利益,我希望这只是一次性问题 - 在所有其他情况下,您的项目很可能会失败。

于 2013-09-07T05:50:08.203 回答
0

问题已标记为plsqldeveloper

如此出色的产品的一大特点是在对象浏览器中找到该方法后右键单击该方法。无需编写任何查询即可进行各种即时询问的选项。

于 2013-11-27T18:32:56.307 回答