sql >> Databasteknik >  >> RDS >> Oracle

Standardvärden för lagrad procedur i Oracle

Standardvärden används endast om argumenten inte är specificerade. I ditt fall gjorde det ange argumenten - båda tillhandahölls, med värdet NULL. (Ja, i det här fallet anses NULL vara ett verkligt värde :-). Försök:

EXEC TEST()

Dela och njut.

Tillägg :Standardvärdena för procedurparametrar är säkert begravda i en systemtabell någonstans (se SYS.ALL_ARGUMENTS view), men att ta bort standardvärdet ur vyn innebär att extrahera text från ett LÅNGT fält, och det kommer förmodligen att visa sig vara mer smärtsamt än det är värt. Det enkla sättet är att lägga till lite kod till proceduren:

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;


  1. Är detta en riktig lång omröstning?

  2. Säker TO_NUMBER()

  3. Hur säkerhetskopierar man hela MySQL-databasen med alla användare och behörigheter och lösenord?

  4. Oracle:union alla fråga 1 och fråga 2 vill minus några rader om fråga 1 har raddata