Standardwerte werden nur verwendet, wenn die Argumente nicht angegeben sind. In Ihrem Fall hatten Sie es Geben Sie die Argumente an - beide wurden mit einem Wert von NULL bereitgestellt. (Ja, in diesem Fall wird NULL als echter Wert angesehen :-). Versuchen Sie:
EXEC TEST()
Teilen und genießen.
Nachtrag :Die Standardwerte für Prozedurparameter sind sicherlich irgendwo in einer Systemtabelle vergraben (siehe SYS.ALL_ARGUMENTS
View), aber um den Standardwert aus der View herauszubekommen, muss Text aus einem LONG-Feld extrahiert werden, und es wird sich wahrscheinlich als schmerzhafter erweisen, als es wert ist. Das einfache Eine Möglichkeit besteht darin, der Prozedur etwas Code hinzuzufügen:
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;