2014-05-19 267 views
0

我嘗試編寫代碼,從存儲過程獲取存儲過程的參數

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; 

代碼工作得很好的參數時,我有一個包的名字,但沒有時爲空。
我有一些程序出來的軟件包。
代碼運行,如果我有:

where ua.PACKAGE_NAME is null 

而不是當:

where ua.PACKAGE_NAME = null. 

我怎樣才能讓我的代碼工作,爲這兩種情況?

回答

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; 
+0

我剛試過。不工作。 – Nianios

+0

Yeap。您的新解決方案有效。非常感謝 – Nianios

+0

太好了!,在這裏很好,保重.. – Adel

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'後面沒有必要的逗號

+0

我剛剛試過。不工作。 – Nianios

+0

我認爲1需要'',你可以嘗試更新的查詢.. – Adel

+0

我已編輯查詢,請嘗試不用逗號 –