Výchozí hodnoty se použijí pouze v případě, že argumenty nejsou zadány. Ve vašem případě udělali zadejte argumenty - byly dodány oba s hodnotou NULL. (Ano, v tomto případě je NULL považována za skutečnou hodnotu :-). Zkuste:
EXEC TEST()
Sdílejte a užívejte si.
Dodatek :Výchozí hodnoty parametrů procedury jsou jistě někde pohřbeny v systémové tabulce (viz SYS.ALL_ARGUMENTS
zobrazení), ale získání výchozí hodnoty ze zobrazení vyžaduje extrahování textu z LONG pole a pravděpodobně se ukáže být bolestivější, než by stálo za to. Snadné způsob je přidat nějaký kód do procedury:
CREATE OR REPLACE PROCEDURE TEST(X IN VARCHAR2 DEFAULT 'P',
Y IN NUMBER DEFAULT 1)
AS
varX VARCHAR2(32767) := NVL(X, 'P');
varY NUMBER := NVL(Y, 1);
BEGIN
DBMS_OUTPUT.PUT_LINE('X=' || varX || ' -- ' || 'Y=' || varY);
END TEST;