2016-09-14 99 views
3

我是PL/SQL中的新手,這個問題似乎是'幼稚的',所以我提前很抱歉,但是Google根本沒有幫我...默認和賦值運算符之間的PL/SQL區別

以下程序是否有區別?

Procedure p1(a Number DEFAULT 0) Is 
Begin 
    DBMS_OUTPUT.put_line(a); 
End; 


Procedure p2(a Number := 0) Is 
Begin 
    DBMS_OUTPUT.put_line(a); 
End; 

我已籤,所以當我叫他們都沒有ARGS輸出爲0,但我不知道是否有任何副作用。

回答

2

如果按照Oracle的documentation

您可以使用關鍵字DEFAULT,而不是賦值操作符 初始化變量。您還可以使用DEFAULT在用戶定義的 記錄中初始化子程序參數,光標參數和字段中的 。

對具有典型值的變量使用DEFAULT。對於沒有典型值的變量(例如計數器和累加器) 使用 賦值運算符。

DECLARE 
    blood_type CHAR DEFAULT 'O';   -- Same as blood_type CHAR := 'O'; 
    hours_worked INTEGER DEFAULT 40; -- Typical value 
    employee_count INTEGER := 0;  -- No typical value 

    BEGIN 
    NULL; 
    END; 
/

所以我想在內部是一樣的。

+1

嗯,這很有道理。非常感謝 – LibertyPaul

+2

不需要猜測,它們是相同的。雖然我不明白「No typical value」註釋,但該行默認將'employee_count'設置爲'0',在這種情況下'default'和':='之間沒有區別。 –

+0

@JeffreyKemp我猜想它在「使用賦值運算符的變量(如計數器和累加器)」。實際上我總是在參數和操作符上使用'DEFAULT'來初始化變量。 – vercelli

1

讓我們來看看最新的Oracle版本(12c R1)在撰寫之時的文檔。你明確地要求子程序參數,所以我們先來看看。

Default Values for IN Subprogram Parameters

在聲明正式IN參數,你可以爲它指定一個默認值。具有默認值的形式參數稱爲可選參數,因爲其相應的實際參數在子程序調用中是可選的。如果省略實際參數,則調用將默認值分配給形式參數。

該文檔沒有提到default關鍵字,但它仍然有效。示例(12c R1中):

declare 
    function f1(a in number)   return number is begin return a; end; 
    function f2(a in number := 2)  return number is begin return a; end; 
    function f3(a in number default 3) return number is begin return a; end; 
begin 
    dbms_output.put_line(f1(1)); 
    dbms_output.put_line(f2); 
    dbms_output.put_line(f3); 
end; 
/

按預期打印1,2,3。

但是,由於沒有在授權文檔中提及,我不鼓勵在此上下文中使用default關鍵字。

其它有趣的上下文是Initial Values of Variables and Constants

要指定的初始值,使用賦值運算符(:=)或關鍵字DEFAULT,隨後的表達式。

這就是唯一一次提到default關鍵字。所有文檔示例僅使用分配。

結論

技術上default關鍵字和分配新建分配FY在兩種contextes相同的工作,但只有賦值是在文檔中推廣。我認爲Oracle在這種情況下實際上已經廢棄default關鍵字,因此我不會推薦在新的PL/SQL代碼中使用它。分配操作員可以毫不費力地完成相同的工作。

相關問題