Oracle PL/SQL lagret procedure og funktioner med eksempler
Procedurer og funktioner er de underprogrammer, der kan oprettes og gemmes i databasen som databaseobjekter. De kan også kaldes eller henvises inde i de andre blokke.
Bortset fra dette vil vi dække de store forskelle mellem disse to underprogrammer. Vi skal også diskutere Oracle indbyggede funktioner.
Terminologier i PL/SQL underprogrammer
Før vi lærer om PL/SQL-underprogrammer, vil vi diskutere de forskellige terminologier, der er en del af disse underprogrammer. Nedenfor er de terminologier, som vi vil diskutere.
Parameter
Parameteren er variabel eller pladsholder for enhver gyldig PL/SQL datatype hvorigennem PL/SQL-underprogrammet udveksler værdierne med hovedkoden. Denne parameter giver mulighed for at give input til underprogrammerne og at udtrække fra disse underprogrammer.
- Disse parametre bør defineres sammen med underprogrammerne på oprettelsestidspunktet.
- Disse parametre er inkluderet i den kaldende sætning af disse underprogrammer for at interagere værdierne med underprogrammerne.
- Datatypen for parameteren i underprogrammet og den kaldende sætning skal være den samme.
- Størrelsen af datatypen bør ikke nævnes på tidspunktet for parametererklæringen, da størrelsen er dynamisk for denne type.
Baseret på deres formål er parametre klassificeret som
- IN parameter
- OUT parameter
- IN OUT parameter
IN parameter
- Denne parameter bruges til at give input til underprogrammerne.
- Det er en skrivebeskyttet variabel inde i underprogrammerne. Deres værdier kan ikke ændres inde i underprogrammet.
- I den kaldende sætning kan disse parametre være en variabel eller en bogstavelig værdi eller et udtryk, for eksempel kan det være det aritmetiske udtryk som '5*8' eller 'a/b', hvor 'a' og 'b' er variable .
- Som standard er parametrene af IN-typen.
OUT parameter
- Denne parameter bruges til at få output fra underprogrammerne.
- Det er en læse-skrive-variabel inde i underprogrammerne. Deres værdier kan ændres inde i underprogrammerne.
- I den kaldende sætning skal disse parametre altid være en variabel for at holde værdien fra de aktuelle underprogrammer.
IN OUT parameter
- Denne parameter bruges både til at give input og til at få output fra underprogrammerne.
- Det er en læse-skrive-variabel inde i underprogrammerne. Deres værdier kan ændres inde i underprogrammerne.
- I den kaldende sætning skal disse parametre altid være en variabel for at holde værdien fra underprogrammerne.
Disse parametertyper bør nævnes på tidspunktet for oprettelse af underprogrammerne.
RETURN
RETURN er nøgleordet, der instruerer compileren til at skifte styringen fra underprogrammet til den kaldende sætning. I underprogram RETURN betyder blot, at styringen skal forlade underprogrammet. Når controlleren finder RETURN nøgleordet i underprogrammet, vil koden efter dette blive sprunget over.
Normalt vil forældre- eller hovedblok kalde underprogrammerne, og derefter vil styringen skifte fra disse overordnede blok til de kaldede underprogrammer. RETURN i underprogrammet vil returnere styringen til deres overordnede blok. I tilfælde af funktioner returnerer RETURN-sætningen også værdien. Datatypen for denne værdi er altid nævnt på tidspunktet for funktionsdeklarationen. Datatypen kan være af enhver gyldig PL/SQL-datatype.
Hvad er procedure i PL/SQL?
A Procedure i PL/SQL er en underprogramenhed, der består af en gruppe PL/SQL-sætninger, der kan kaldes ved navn. Hver procedure i PL/SQL har sit eget unikke navn, som den kan henvises til og kaldes med. Denne underprogramenhed i Oracle database gemmes som et databaseobjekt.
Bemærk: Underprogram er intet andet end en procedure, og det skal oprettes manuelt i henhold til kravet. Når de er oprettet, vil de blive gemt som databaseobjekter.
Nedenfor er karakteristikaene for Procedure underprogramenhed i PL/SQL:
- Procedurer er selvstændige blokke af et program, der kan gemmes i database.
- Kald til disse PLSQL-procedurer kan foretages ved at henvise til deres navn for at udføre PL/SQL-sætningerne.
- Det bruges hovedsageligt til at udføre en proces i PL/SQL.
- Det kan have indlejrede blokke, eller det kan defineres og indlejres inde i de andre blokke eller pakker.
- Den indeholder erklæringsdel (valgfrit), udførelsesdel, undtagelseshåndteringsdel (valgfri).
- Værdierne kan overføres til Oracle procedure eller hentes fra proceduren gennem parametre.
- Disse parametre bør indgå i den kaldende erklæring.
- En procedure i SQL kan have en RETURN-sætning til at returnere kontrolelementet til den kaldende blok, men den kan ikke returnere nogen værdier gennem RETURN-sætningen.
- Procedurer kan ikke kaldes direkte fra SELECT-sætninger. De kan kaldes fra en anden blok eller gennem EXEC nøgleord.
Syntaks
CREATE OR REPLACE PROCEDURE <procedure_name> ( <parameterl IN/OUT <datatype> .. . ) [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE PROCEDURE instruerer compileren til at oprette en ny procedure i Oracle. Nøgleord 'ELLER ERSTAT' instruerer kompileringen til at erstatte den eksisterende procedure (hvis nogen) med den nuværende.
- Procedurenavnet skal være unikt.
- Nøgleord 'IS' vil blive brugt, når den lagrede procedure i Oracle er indlejret i nogle andre blokke. Hvis proceduren er selvstændig, vil 'AS' blive brugt. Bortset fra denne kodningsstandard har begge samme betydning.
Eksempel 1: Oprettelse af procedure og kald ved hjælp af EXEC
I dette eksempel skal vi lave en Oracle procedure, der tager navnet som input og udskriver velkomstbeskeden som output. Vi vil bruge EXEC-kommandoen til at kalde procedure.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2) IS BEGIN dbms_output.put_line (‘Welcome '|| p_name); END; / EXEC welcome_msg (‘Guru99’);
Kodeforklaring:
- Kodelinje 1: Oprettelse af proceduren med navnet 'welcome_msg' og med en parameter 'p_name' af typen 'IN'.
- Kodelinje 4: Udskrivning af velkomstbeskeden ved at sammenkæde inputnavnet.
- Proceduren er kompileret med succes.
- Kodelinje 7: Kalder proceduren ved hjælp af EXEC-kommandoen med parameteren 'Guru99'. Proceduren udføres, og beskeden udskrives som "Welcome Guru99".
Hvad er funktion?
Funktioner er et selvstændigt PL/SQL-underprogram. Ligesom PL/SQL-proceduren har funktioner et unikt navn, som det kan henvises til. Disse gemmes som PL/SQL-databaseobjekter. Nedenfor er nogle af funktionernes karakteristika.
- Funktioner er en selvstændig blok, der hovedsageligt bruges til beregningsformål.
- Funktion brug RETURN nøgleord til at returnere værdien, og datatypen for dette er defineret på tidspunktet for oprettelsen.
- En funktion skal enten returnere en værdi eller hæve undtagelsen, dvs. returnering er obligatorisk i funktioner.
- Funktion uden DML-sætninger kan kaldes direkte i SELECT-forespørgsel, mens funktionen med DML-operation kun kan kaldes fra andre PL/SQL-blokke.
- Det kan have indlejrede blokke, eller det kan defineres og indlejres inde i de andre blokke eller pakker.
- Den indeholder erklæringsdel (valgfrit), udførelsesdel, undtagelseshåndteringsdel (valgfri).
- Værdierne kan overføres til funktionen eller hentes fra proceduren gennem parametrene.
- Disse parametre bør indgå i den kaldende erklæring.
- En PLSQL-funktion kan også returnere værdien gennem OUT-parametre ud over at bruge RETURN.
- Da det altid vil returnere værdien, ledsager det i kaldende sætning altid med tildelingsoperator for at udfylde variablerne.
Syntaks
CREATE OR REPLACE FUNCTION <procedure_name> ( <parameterl IN/OUT <datatype> ) RETURN <datatype> [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE FUNCTION instruerer compileren om at oprette en ny funktion. Nøgleord 'OR REPLACE' instruerer compileren til at erstatte den eksisterende funktion (hvis nogen) med den nuværende.
- Funktionsnavnet skal være unikt.
- RETURN datatype skal nævnes.
- Nøgleordet 'IS' vil blive brugt, når proceduren er indlejret i nogle andre blokke. Hvis proceduren er selvstændig, vil 'AS' blive brugt. Bortset fra denne kodningsstandard har begge samme betydning.
Eksempel 1: Oprettelse af funktion og kald den ved hjælp af anonym blok
I dette program skal vi oprette en funktion, der tager navnet som input og returnerer velkomstbeskeden som output. Vi kommer til at bruge anonym blok og vælg erklæring til at kalde funktionen.
CREATE OR REPLACE FUNCTION welcome_msgJune ( p_name IN VARCHAR2) RETURN VAR.CHAR2 IS BEGIN RETURN (‘Welcome ‘|| p_name); END; / DECLARE lv_msg VARCHAR2(250); BEGIN lv_msg := welcome_msg_func (‘Guru99’); dbms_output.put_line(lv_msg); END; SELECT welcome_msg_func(‘Guru99:) FROM DUAL;
Kodeforklaring:
- Kodelinje 1: Oprettelse af Oracle funktion med navnet 'welcome_msg_func' og med én parameter 'p_name' af typen 'IN'.
- Kodelinje 2: erklærer returtypen som VARCHAR2
- Kodelinje 5: Returnerer den sammenkædede værdi 'Velkommen' og parameterværdien.
- Kodelinje 8: Anonym blok for at kalde ovenstående funktion.
- Kodelinje 9: Erklærer variablen med datatype samme som returneringsdatatypen for funktionen.
- Kodelinje 11: Kalder funktionen og udfylder returværdien til variablen 'lv_msg'.
- Kodelinje 12: Udskrivning af variabelværdien. Outputtet, du får her, er "Welcome Guru99"
- Kodelinje 14: Kalder den samme funktion gennem SELECT-sætning. Returværdien dirigeres direkte til standardudgangen.
Ligheder mellem procedure og funktion
- Begge kan kaldes fra andre PL/SQL-blokke.
- Hvis den i underprogrammet rejste undtagelse ikke håndteres i underprogrammet undtagelse håndtering sektionen, så forplanter den sig til den kaldende blok.
- Begge kan have så mange parametre som nødvendigt.
- Begge behandles som databaseobjekter i PL/SQL.
Procedure vs. Funktion: Nøgleforskelle
Procedure | Funktion |
---|---|
Bruges hovedsageligt til at udføre en bestemt proces | Bruges hovedsageligt til at udføre nogle beregninger |
Kan ikke indkalde SELECT-sætning | En funktion, der ikke indeholder DML-sætninger, kan kaldes i SELECT-sætningen |
Brug parameteren OUT for at returnere værdien | Brug RETURN for at returnere værdien |
Det er ikke obligatorisk at returnere værdien | Det er obligatorisk at returnere værdien |
RETURN forlader blot styringen fra underprogrammet. | RETURN forlader styringen fra underprogrammet og returnerer også værdien |
Returdatatype vil ikke blive angivet på oprettelsestidspunktet | Returdatatype er obligatorisk på oprettelsestidspunktet |
Indbyggede funktioner i PL/SQL
PL / SQL indeholder forskellige indbyggede funktioner til at arbejde med strenge og datodatatype. Her skal vi se de almindeligt anvendte funktioner og deres brug.
Konverteringsfunktioner
Disse indbyggede funktioner bruges til at konvertere en datatype til en anden datatype.
Funktionsnavn | Brug | Eksempel |
---|---|---|
TO_CHAR | Konverterer den anden datatype til karakterdatatype | TO_CHAR(123); |
TO_DATE (streng, format) | Konverterer den givne streng til dato. Strengen skal matche formatet. |
TO_DATE('2015-JAN-15', 'ÅÅÅÅ-MAN-DD'); Produktion: 1 / 15 / 2015 |
TO_NUMBER (tekst, format) |
Konverterer teksten til taltype i det givne format. Informat '9' angiver antallet af cifre |
Vælg TO_NUMBER('1234′,'9999') fra dobbelt;
Produktion: 1234 Vælg TO_NUMBER('1,234.45′,'9,999.99') fra dobbelt; Produktion: 1234 |
Strengfunktioner
Det er de funktioner, der bruges på karakterdatatypen.
Funktionsnavn | Brug | Eksempel |
---|---|---|
INSTR(tekst; streng; start; forekomst) | Giver positionen af bestemt tekst i den givne streng.
|
Vælg INSTR('AEROPLANE','E',2,1) fra dual
Produktion: 2 Vælg INSTR('AEROPLANE','E',2,2) fra dual Produktion: 9 (2nd forekomst af E) |
SUBSTR (tekst, start, længde) | Giver understrengværdien for hovedstrengen.
|
vælg substr('flyvemaskine',1,7) fra dual
Produktion: aeropla |
ØVRE (tekst) | Returnerer det store bogstav i den angivne tekst | Vælg upper('guru99') fra dual;
Produktion: GURU99 |
NEDRE ( tekst ) | Returnerer små bogstaver i den angivne tekst | Vælg lavere ('AerOpLane') fra dobbelt;
Produktion: flyvemaskine |
INITCAP (tekst) | Returnerer den givne tekst med startbogstavet med stort bogstav. | Vælg ('guru99') fra dual
Produktion: Guru99 Vælg ('min historie') fra dobbelt Produktion: Min historie |
LÆNGDE (tekst) | Returnerer længden af den givne streng | Vælg LENGTH ('guru99') fra dual;
Produktion: 6 |
LPAD (tekst, længde, pad_char) | Padder strengen i venstre side for den givne længde (samlet streng) med det givne tegn | Vælg LPAD('guru99', 10, '$') fra dual;
Produktion: $$$$guru99 |
RPAD (tekst, længde, pad_char) | Polster strengen i højre side for den givne længde (total streng) med det givne tegn | Vælg RPAD('guru99′,10,'-') fra dual
Produktion: guru99—- |
LTRIM ( tekst ) | Trimmer det indledende hvide mellemrum fra teksten | Vælg LTRIM('Guru99') fra dual;
Produktion: Guru99 |
RTRIM ( tekst ) | Trimmer det efterfølgende hvide mellemrum fra teksten | Vælg RTRIM('Guru99 ') fra dual;
Produktion; Guru99 |
Dato funktioner
Dette er funktioner, der bruges til at manipulere med datoer.
Funktionsnavn | Brug | Eksempel |
---|---|---|
ADD_MONTHS (dato, antal måneder) | Tilføjer de givne måneder til datoen | ADD_MONTH('2015-01-01',5);
Produktion: 05 / 01 / 2015 |
SYSDATE | Returnerer den aktuelle dato og klokkeslæt for serveren | Vælg SYSDATE fra dual;
Produktion: 10/4/2015 2:11:43 |
BAGAGERUM | Afrund datovariablen til den lavere mulige værdi | vælg sysdate, TRUNC(sysdate) fra dual;
Produktion: 10/4/2015 2:12:39 10/4/2015 |
ROUND | Afrunder datoen til nærmeste grænse, enten højere eller lavere | Vælg sysdate, ROUND(sysdate) fra dobbelt
Produktion: 10/4/2015 2:14:34 10/5/2015 |
MONTHS_BETWEEN | Returnerer antallet af måneder mellem to datoer | Vælg MONTHS_BETWEEN (sysdate+60, sysdate) fra dobbelt
Produktion: 2 |
Resumé
I dette kapitel har vi lært følgende.
- Sådan opretter du Procedure og forskellige måder at kalde det på
- Sådan opretter du Funktion og forskellige måder at kalde det på
- Ligheder og forskelle mellem procedure og funktion
- Parametre og RETURN almindelige terminologier i PL/SQL underprogrammer
- Fælles indbyggede funktioner i Oracle PL / SQL