我尝试编写代码以从存储过程中获取参数
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.
如何让我的代码适用于这两种情况?
答案 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'后面有逗号,不需要