2014-02-10 13 views
5

我在PL/SQL函數:PL/SQL如何調用一個函數沒有得到返回的對象

FUNCTION do_something 
    RETURN BOOLEAN 
IS 
    ... 
BEGIN 
    ... 
END 

此功能可以稱爲例如:

DECLARE 
    answer BOOLEAN; 
BEGIN 
    answer := do_something(); 
END 

現在,有案例,我不需要返回的布爾值。如果我不想得到它,只寫:

do_something(); 

我得到PLS-00306 (類型的呼叫DO_SOMETHING參數錯誤號碼)有沒有辦法把它稱爲不宣和設置新的布爾值,在這種情況下我永遠不會使用它?

+1

奇怪......我想'PLS-002221:'do_something'不是程序或未定義的'也許是因爲空的'()'。無論如何,我不是推薦它,但你可以把它放在一個'if'語句,即IF(do_something)然後爲空;結束如果;'但這真的很難看 –

+1

有點奇怪,因爲函數的要點是返回一些東西,否則它應該是一個過程。 – tbone

+1

@tbone,同意;該函數應該被稱爲'something_was_done()':) –

回答

10

很簡單:建立覆蓋這一功能

PROCEDURE do_something 
IS 
    dummy boolean; 
BEGIN 
    dummy := do_something(); 
END; 

對不起的操作,但是這是在PL/SQL的唯一途徑。這個語言在過程和函數的定義上是非常嚴格的,你不能在不處理結果的情況下進行函數調用。但是您可以按照上面的示例所示製作一個過程。

它會自動定義在哪裏選擇功能和程序。

編輯

至於有些人誰不相信我(有時候我真的講不好的東西,所以懷疑是允許的:))這是測試:

declare 
    myresult boolean; 

    function do_something return boolean 
    is 
    begin 
    return true; 
    end; 

    procedure do_something 
    is 
     dummy boolean; 
    begin 
    dummy := do_something(); 
    end; 
begin 
    myresult := do_something(); 

    do_something(); 
end; 

效果很好。

+0

@Simn,難道它不會給'ORA-00955:名稱已被現有對象使用嗎? –

+0

nope,請參閱答案 – smnbbrv

+0

不......這是因爲您在一個匿名塊中定義了它。嘗試在模式級別執行相同的操作 –

相關問題