Eftersom tidigare några tutorials handlade om PL/SQL-subrutiner som PL/SQL-funktioner och lagrade procedurer blir det därför obligatoriskt att prata om deras anropsbeteckningar. Att lära sig begreppen PL/SQL-subrutiner kommer inte att betraktas som komplett förrän vi också lär oss deras anropsbeteckningar.
Vad är anropsnotation för PL/SQL-subrutiner?
Anropsnotation är ett sätt att tillhandahålla värden till parametrarna för en subrutin som PL/SQL-funktion eller en lagrad procedur.
Typer av anropsbeteckningar för subrutiner
I Oracle PL/SQL finns det 3 typer av anropsbeteckningar. Dessa är:
- Positionell notation
- Namnbeteckning och
- Blandad anropsbeteckning
Positionella anropsbeteckningar
Positionsnotation är den vanligaste anropsnotationen som du kan se i nästan alla datorprogrammeringsspråk. I positionsbeteckning måste vi specificera värdet för varje formell parameter på ett sekventiellt sätt. Det betyder att du måste ange värdena för de formella parametrarna i samma ordning som de deklarerades i proceduren eller i funktionen.
I positionsbeteckning måste datatypen och positionen för den aktuella parametern matcha den formella parametern.
Föreslagen läsning:Faktiska parametrar kontra formella parametrar
Exempel:positionsbeteckning för anrop av PL/SQL-subrutiner.
CREATE OR REPLACE PROCEDURE emp_sal (dep_id NUMBER, sal_raise NUMBER) IS BEGIN UPDATE employees SET salary = salary * sal_raise WHERE department_id = dep_id; DBMS_OUTPUT.PUT_LINE ('salary updated successfully'); END; /
Detta är samma exempel som vi gjorde i PL/SQL Tutorial 42 om hur man skapar lagrad procedur med parametrar om än några mindre ändringar. Om vi nu använder positionsanropsnotation måste vi ange värdena till båda parametrarna i ovanstående procedur på samma sätt som de deklareras.
Stored Procedure-anrop med positionsbeteckning i Oracle Database
EXECUTE emp_sal(40,2);
I detta enkla proceduranrop motsvarar värdet 40 den formella parametern dep_id och värde 2 motsvarar parametern sal_raise.
Namnställda samtalsnoteringar
Namngivna anropsbeteckningar låter dig skicka värden till de formella parametrarna med deras namn. Detta kommer i sin tur att låta dig tilldela värden till endast obligatoriska eller säg obligatoriska parametrar.
Den här anropsnotationen är användbar när du har en subrutin med parametrar där några av dessa parametrar är obligatoriska och några är valfria och du vill överföra värdena till endast de obligatoriska.
Föreningsoperatör
För att tilldela värden till de formella parametrarna med deras namn använder vi associationsoperator. Det är en kombination av lika med (=) tecken och större än (>) tecken. Vi skriver namnet på den formella parametern till vänster om operatorn och värdet som du vill tilldela den högra sidan av operatorn.
Exempel på namngiven anropsnotation för anrop av PL/SQL-subrutiner
CREATE OR REPLACE FUNCTION add_num (var_1 NUMBER, var_2 NUMBER DEFAULT 0, var_3 NUMBER ) RETURN NUMBER IS BEGIN RETURN var_1 + var_2 + var_3; END; /
Ovanstående funktion har 3 parametrar. Bland dessa 3 parametrar är 2 obligatoriska och 1 är valfritt med standardvärdet 0.
Du kan anropa denna funktion med positionsbeteckning. Men det har en begränsning som du måste uppfylla och det är att du måste ange värden till alla formella parametrar i samma ordning som de deklareras och datatypen av formella och faktiska parametrar måste matcha.
Så om du vill utelämna den valfria parametern och vill använda deras standardvärde eller om du bara glömde ordningen på parametern där de deklarerades! Då blir det lite svårt för dig att anropa ovanstående subrutin med hjälp av positionsbeteckning. I ett sådant scenario kan du dra nytta av Named Calling Notation. Denna anropsnotation ger dig den önskade flexibiliteten när du anropar dina subrutiner.
PL/SQL-funktionsanrop som använder Named Calling Notation i Oracle Database
DECLARE var_result NUMBER; BEGIN var_result := add_num(var_3 => 5, var_1 =>2); DBMS_OUTPUT.put_line('Result ->' || var_result); END;
Jag har förklarat PL/SQL-funktionsanropet i detalj i videohandledningen om samma ämne på min YouTube-kanal.
Mixed Calling Notation för anrop av PL/SQL-subrutiner
Som namnet antyder i blandad anropsbeteckning kan du anropa subrutiner genom att använda kombinationen av namngivna såväl som positionella anropsbeteckningar. Blandad anropsbeteckning är till stor hjälp där parameterlistan definieras med alla obligatoriska parametrar först och valfria parametrar därefter.
Exempel på blandad anropsbeteckning för anrop av PL/SQL-subrutiner
Här är det anonyma blocket där vi anropar samma funktion add_num ( ) som vi kodade när vi gjorde namngivna anropsbeteckningar.
DECLARE var_result NUMBER; BEGIN var_result := add_num(var_1 => 10, 30 ,var_3 =>19); DBMS_OUTPUT.put_line('Result ->' || var_result); END;
Det är så vi använder blandade anropsbeteckningar för att anropa PL/SQL-subrutiner.
Prova själv
Använd kunskapen från ovanstående begrepp och försök lösa följande fråga:
Skriv en PL/SQL-funktion med parametrar för att byta två nummer och anropa den funktionen med blandad anropsbeteckning.
Du kan dela din kod eller ögonblicksbilden av din kod med mig på mina sociala medier [Twitter // Facebook].
Hoppas du tyckte om att läsa. Se till att gilla och dela denna blogg. Tack och ha en bra dag.