Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Standardwerte für gespeicherte Prozeduren in Oracle

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;