获取存储过程参数

时间:2014-05-19 08:40:41

标签: sql oracle oracle11g

我尝试编写代码以从存储过程中获取参数

procedure get_proc_parameters(
      in_package_name     in user_arguments.PACKAGE_NAME%type,
      in_procedure_name   in user_arguments.OBJECT_NAME%type,
      io_cursor           in out t_ref_cursor
      )
is

begin

  open io_cursor for
   select ua.ARGUMENT_NAME PARAM_NAME,ua.SEQUENCE PARAM_ORDER
   from user_arguments ua
   where ua.PACKAGE_NAME=in_package_name
     and ua.OBJECT_NAME=in_procedure_name
     and ua.in_out='IN'
order by ua.SEQUENCE;
exception

end get_proc_parameters;

当我有一个包名时,代码工作正常,但是什么时候为null 我有一些程序包 如果我有:

,代码正在运行
  where ua.PACKAGE_NAME is null

而不是:

where ua.PACKAGE_NAME = null.

如何让我的代码适用于这两种情况?

2 个答案:

答案 0 :(得分:0)

你可以玩它

  SELECT UA.ARGUMENT_NAME PARAM_NAME, UA.SEQUENCE PARAM_ORDER
    FROM USER_ARGUMENTS UA
   WHERE     NVL (UA.PACKAGE_NAME, '1') = NVL (IN_PACKAGE_NAME, '1')
         AND UA.OBJECT_NAME = IN_PROCEDURE_NAME
         AND UA.IN_OUT = 'IN'
ORDER BY UA.SEQUENCE;

答案 1 :(得分:0)

请尝试使用nvl

 open io_cursor for
   select ua.ARGUMENT_NAME PARAM_NAME,ua.SEQUENCE PARAM_ORDER
   from user_arguments ua
   where ua.PACKAGE_NAME=nvl(in_package_name, ua.PACKAGE_NAME)
   and ua.OBJECT_NAME=nvl(in_procedure_name, ua.OBJECT_NAME)
   and ua.in_out='IN'

UPD。在'PARAM_ORDER'后面有逗号,不需要

相关问题