Oracle Gespeicherte PL/SQL-Prozedur und -Funktionen mit Beispielen
โก Intelligente Zusammenfassung
PL/SQL-Unterprogramme sind benannte Blรถcke, Prozeduren und Funktionen, die in der Datenbank gespeichert und รผber ihren Namen aufgerufen werden. Eine Prozedur fรผhrt einen Prozess aus, und eine Funktion gibt einen Wert zurรผck. Beide tauschen Daten รผber die Parameter IN, OUT und IN OUT sowie das Schlรผsselwort RETURN aus.

Was sind PL/SQL-Unterprogramme?
In diesem Tutorial finden Sie eine detaillierte Beschreibung, wie Sie die benannten Blรถcke, Prozeduren und Funktionen erstellen und ausfรผhren.
Prozeduren und Funktionen sind Unterprogramme, die erstellt und als Datenbankobjekte in der Datenbank gespeichert werden kรถnnen. Sie kรถnnen auch innerhalb anderer Blรถcke aufgerufen oder referenziert werden.
Wir behandeln auch die wesentlichen Unterschiede zwischen diesen beiden Teilprogrammen und diskutieren die Oracle Integrierte Funktionen.
Terminologien in PL/SQL-Unterprogrammen
Bevor wir uns mit PL/SQL-Unterprogrammen befassen, besprechen wir die verschiedenen Fachbegriffe, die Bestandteil dieser Unterprogramme sind.
Parameter
Ein Parameter ist eine Variable oder ein Platzhalter fรผr beliebige gรผltige Werte. PL/SQL-Datentyp รber diesen Parameter tauscht das PL/SQL-Unterprogramm Werte mit dem Hauptcode aus. Dieser Parameter ermรถglicht die Eingabe in die Unterprogramme und die Ausgabe von Daten.traction von Werten aus ihnen.
- Diese Parameter sollten zusammen mit den Unterprogrammen zum Zeitpunkt der Erstellung definiert werden.
- Sie sind in der Aufrufanweisung enthalten, um mit den Unterprogrammen zu interagieren.
- Der Datentyp des Parameters im Unterprogramm und in der aufrufenden Anweisung muss derselbe sein.
- Die Grรถรe des Datentyps sollte nicht bei der Parameterdeklaration angegeben werden, da die Grรถรe dynamisch ist.
Je nach ihrem Zweck werden die Parameter wie folgt klassifiziert:
- IN-Parameter
- OUT-Parameter
- IN OUT-Parameter
IN-Parameter
- Wird zur Eingabe an die Unterprogramme verwendet.
- Innerhalb der Unterprogramme handelt es sich um eine schreibgeschรผtzte Variable; ihr Wert kann innerhalb des Unterprogramms nicht geรคndert werden.
- Im aufrufenden Code kann es sich um eine Variable, einen Literalwert oder einen Ausdruck handeln, wie zum Beispiel '5*8' oder 'a/b'.
- Standardmรครig sind die Parameter vom Typ IN.
OUT-Parameter
- Wird verwendet, um Ausgaben von den Unterprogrammen zu erhalten.
- Innerhalb der Unterprogramme handelt es sich um eine les- und schreibbare Variable; ihr Wert kann innerhalb dieser geรคndert werden.
- In der aufrufenden Anweisung sollte es sich immer um eine Variable handeln, die den Wert aus dem Unterprogramm aufnimmt.
IN OUT-Parameter
- Wird sowohl fรผr die Eingabe als auch fรผr die Ausgabe von Unterprogrammen verwendet.
- Innerhalb der Unterprogramme handelt es sich um eine les- und schreibbare Variable; ihr Wert kann innerhalb dieser geรคndert werden.
- In der aufrufenden Anweisung sollte es sich immer um eine Variable handeln, die den Wert aus dem Unterprogramm aufnimmt.
Der Parametertyp sollte beim Erstellen der Unterprogramme angegeben werden.
RรCKKEHR
Das Schlรผsselwort RETURN weist den Compiler an, die Programmausfรผhrung vom Unterprogramm zur aufrufenden Anweisung zu lenken. Innerhalb eines Unterprogramms bedeutet RETURN, dass das Unterprogramm verlassen werden muss; sobald der Compiler auf RETURN stรถรt, wird der nachfolgende Code รผbersprungen.
Normalerweise ruft der Hauptblock die Unterprogramme auf, und die Programmausfรผhrung wechselt vom Hauptblock zum aufgerufenen Unterprogramm. Mit dem Befehl `RETURN` im Unterprogramm wird die Programmausfรผhrung an den Hauptblock zurรผckgegeben. Bei Funktionen gibt die `RETURN`-Anweisung ebenfalls einen Wert zurรผck, dessen Datentyp bei der Funktionsdeklaration angegeben wird.
Was ist eine Prozedur in PL/SQL?
A Ablauf In PL/SQL ist eine Prozedur eine Unterprogrammeinheit, die aus einer Gruppe von PL/SQL-Anweisungen besteht, die รผber ihren Namen aufgerufen werden kรถnnen. Jede Prozedur hat einen eigenen, eindeutigen Namen und wird im Dateisystem gespeichert. Oracle Datenbank als Datenbankobjekt.
Hinweis: Ein Unterprogramm ist nichts anderes als eine Prozedur und muss je nach Bedarf manuell erstellt werden. Nach der Erstellung wird es als Datenbankobjekt gespeichert.
Die Merkmale einer Prozedur-Unterprogrammeinheit in PL/SQL sind:
- Prozeduren sind eigenstรคndige Blรถcke, die in der Datenbank.
- Sie kรถnnen รผber ihren Namen aufgerufen werden, um die PL/SQL-Anweisungen auszufรผhren.
- Sie werden hauptsรคchlich zur Ausfรผhrung eines Prozesses verwendet.
- Sie kรถnnen verschachtelte Blรถcke enthalten oder in anderen Blรถcken oder Paketen verschachtelt sein.
- Sie enthalten einen Deklarationsteil (optional), einen Ausfรผhrungsteil und einen Ausnahmebehandlungsteil (optional).
- Werte kรถnnen รผber Parameter an eine Prozedur รผbergeben oder von ihr abgerufen werden.
- Diese Parameter sollten in der aufrufenden Anweisung enthalten sein.
- Eine Prozedur kann eine RETURN-Anweisung haben, um die Kontrolle an den aufrufenden Block zurรผckzugeben, aber sie kann keinen Wert รผber RETURN zurรผckgeben.
- Prozeduren kรถnnen nicht direkt aus SELECT-Anweisungen aufgerufen werden; sie kรถnnen aus einem anderen Block oder รผber das Schlรผsselwort EXEC aufgerufen werden.
Syntax
CREATE OR REPLACE PROCEDURE <procedure_name> ( <parameter1 IN/OUT <datatype> .. . ) [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- Der Befehl CREATE PROCEDURE weist den Compiler an, eine neue Prozedur zu erstellen. Das Schlรผsselwort 'OR REPLACE' bewirkt, dass die vorhandene Prozedur (falls vorhanden) durch die neue ersetzt wird.
- Der Prozedurname sollte eindeutig sein.
- Das Schlรผsselwort โISโ wird verwendet, wenn die gespeicherte Prozedur in einem anderen Block verschachtelt ist. Ist die Prozedur eigenstรคndig, wird โASโ verwendet. Abgesehen von diesem Codierungsstandard haben beide die gleiche Bedeutung.
Beispiel 1: Erstellen einer Prozedur und deren Aufruf mit EXEC. In diesem Beispiel erstellen wir ein Oracle Prozedur, die einen Namen als Eingabe entgegennimmt und eine Willkommensnachricht ausgibt; aufgerufen wird sie รผber den Befehl EXEC.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2) IS BEGIN dbms_output.put_line ('Welcome '|| p_name); END; / EXEC welcome_msg ('Guru99');
Code Erlรคuterung:
- Code Zeile 1: Die Prozedur mit dem Namen 'welcome_msg' und einem Parameter 'p_name' vom Typ 'IN' wird erstellt.
- Code Zeile 4: Die Begrรผรungsnachricht wird durch Verkettung des Eingabenamens ausgegeben.
- Die Prozedur wurde erfolgreich kompiliert.
- Code Zeile 7: Aufruf der Prozedur mit EXEC und dem Parameter 'Guru99'. Die Prozedur wird ausgefรผhrt und gibt โWillkommenโ aus. Guru99 ".
Was ist eine Funktion?
Eine Funktion ist ein eigenstรคndiges PL/SQL-Unterprogramm. Wie eine Prozedur hat eine Funktion einen eindeutigen Namen und wird als PL/SQL-Datenbankobjekt gespeichert. Ihre Eigenschaften sind:
- Funktionen sind eigenstรคndige Bausteine, die hauptsรคchlich fรผr Berechnungen verwendet werden.
- Eine Funktion verwendet das Schlรผsselwort RETURN, um einen Wert zurรผckzugeben, dessen Datentyp zum Zeitpunkt der Erstellung definiert wird.
- Eine Funktion sollte entweder einen Wert zurรผckgeben oder eine Ausnahme auslรถsen; return ist in Funktionen obligatorisch.
- Eine Funktion ohne DML-Anweisungen kann direkt in einer SELECT-Abfrage aufgerufen werden, wohingegen eine Funktion mit DML nur aus anderen PL/SQL-Blรถcken aufgerufen werden kann.
- Es kann verschachtelte Blรถcke enthalten oder in anderen Blรถcken oder Paketen verschachtelt sein.
- Es enthรคlt einen Deklarationsteil (optional), einen Ausfรผhrungsteil und einen Ausnahmebehandlungsteil (optional).
- Werte kรถnnen รผber Parameter an die Funktion รผbergeben oder von ihr abgerufen werden.
- Diese Parameter sollten in der aufrufenden Anweisung enthalten sein.
- Eine Funktion kann neben der Verwendung von RETURN auch รผber OUT-Parameter einen Wert zurรผckgeben.
- Da die aufrufende Anweisung immer einen Wert zurรผckgibt, verwendet sie stets einen Zuweisungsoperator, um eine Variable zu belegen.
Syntax
CREATE OR REPLACE FUNCTION <function_name> ( <parameter1 IN/OUT <datatype> ) RETURN <datatype> [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE FUNCTION weist den Compiler an, eine neue Funktion zu erstellen. 'OR REPLACE' weist ihn an, die vorhandene Funktion (falls vorhanden) durch die neue zu ersetzen.
- Der Funktionsname sollte eindeutig sein.
- Der Datentyp RETURN sollte angegeben werden.
- Das Schlรผsselwort โISโ wird verwendet, wenn die Funktion in einem anderen Block verschachtelt ist. Ist die Funktion eigenstรคndig, wird โASโ verwendet.
Beispiel 1: Erstellen einer Funktion und deren Aufruf mithilfe eines anonymen Blocks. In diesem Programm erstellen wir eine Funktion, die einen Namen als Eingabe entgegennimmt und eine Willkommensnachricht zurรผckgibt. Dazu verwenden wir einen anonymen Block und eine SELECT-Anweisung, um sie aufzurufen.
CREATE OR REPLACE FUNCTION welcome_msg_func ( p_name IN VARCHAR2) RETURN VARCHAR2 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;
Code Erlรคuterung:
- Code Zeile 1: Es wird eine Funktion mit dem Namen 'welcome_msg_func' und einem Parameter 'p_name' vom Typ 'IN' erstellt.
- Code Zeile 2: Deklaration des Rรผckgabetyps als VARCHAR2.
- Code Zeile 5: Gibt den verketteten Wert 'Willkommen' und den Parameterwert zurรผck.
- Code Zeile 8: Anonymer Block zum Aufruf der obigen Funktion.
- Code Zeile 9: Die Variable wird mit demselben Datentyp wie der Rรผckgabetyp der Funktion deklariert.
- Code Zeile 11: Die Funktion wird aufgerufen und der Rรผckgabewert in der Variablen 'lv_msg' gespeichert.
- Code Zeile 12: Der Wert der Variablen wird ausgegeben. Die Ausgabe lautet: โWillkommenโ Guru99 ".
- Code Zeile 14: Dieselbe Funktion wird รผber eine SELECT-Anweisung aufgerufen. Der Rรผckgabewert wird an die Standardausgabe weitergeleitet.
รhnlichkeiten zwischen einer Prozedur und einer Funktion
- Beide kรถnnen von anderen PL/SQL-Blรถcken aufgerufen werden.
- Wird eine im Unterprogramm ausgelรถste Ausnahme nicht in ihrer Ausnahmebehandlung Abschnitt, wird es an den aufrufenden Block weitergegeben.
- Beide kรถnnen beliebig viele Parameter haben.
- Beide werden in PL/SQL als Datenbankobjekte behandelt.
Prozedur vs. Funktion: Wesentliche Unterschiede
| Ablauf | Funktion |
|---|---|
| Wird hauptsรคchlich zur Ausfรผhrung eines bestimmten Prozesses verwendet. | Wird hauptsรคchlich zur Durchfรผhrung von Berechnungen verwendet. |
| Kann nicht in einer SELECT-Anweisung aufgerufen werden. | Eine Funktion, die keine DML-Anweisungen enthรคlt, kann in einer SELECT-Anweisung aufgerufen werden. |
| Verwendet einen OUT-Parameter, um einen Wert zurรผckzugeben. | Verwendet RETURN, um einen Wert zurรผckzugeben. |
| Es ist nicht zwingend erforderlich, einen Wert zurรผckzugeben. | Es ist zwingend erforderlich, einen Wert zurรผckzugeben. |
| RETURN beendet einfach die Ausfรผhrung des Unterprogramms. | RETURN verlรคsst das Unterprogramm und gibt den Wert zurรผck. |
| Der Rรผckgabedatentyp wird bei der Erstellung nicht angegeben. | Der Rรผckgabedatentyp muss bei der Erstellung angegeben werden. |
Integrierte Funktionen in PL/SQL
PL / SQL Enthรคlt verschiedene integrierte Funktionen zur Bearbeitung von Zeichenketten- und Datumsdaten. Hier sehen wir die hรคufig verwendeten Funktionen und deren Anwendung.
Konvertierungsfunktionen
Diese integrierten Funktionen wandeln einen Datentyp in einen anderen um.
| Funktionsname | Anwendungsbereich | Beispiel |
|---|---|---|
| TO_CHAR | Konvertiert einen anderen Datentyp in den Datentyp Zeichen. | TO_CHAR(123); |
| TO_DATE (Zeichenkette, Format) | Wandelt die angegebene Zeichenkette in ein Datum um. Die Zeichenkette muss dem angegebenen Format entsprechen. | TO_DATE('2015-JAN-15', 'YYYY-MON-DD'); Ausgang: 1 / 15 / 2015 |
| TO_NUMBER (Text, Format) | Wandelt den Text in eine Zahl des angegebenen Formats um. In diesem Format steht โ9โ fรผr die Anzahl der Ziffern. | Wรคhlen Sie TO_NUMBER('1234โฒ,'9999') aus Dual; Ausgang: 1234. Select TO_NUMBER('1,234.45โฒ,'9,999.99') from dual; Ausgang: 1234.45 |
String-Funktionen
Diese Funktionen werden auf den Datentyp Zeichen angewendet.
| Funktionsname | Anwendungsbereich | Beispiel |
|---|---|---|
| INSTR(Text, Zeichenkette, Start, Vorkommen) | Gibt die Position eines bestimmten Textes innerhalb der angegebenen Zeichenkette an. text ist die Hauptzeichenkette, string ist der zu durchsuchende Text, start ist die Startposition (optional) und occurrence ist das Vorkommen der gesuchten Zeichenkette (optional). | Select INSTR('AEROPLANE','E',2,1) from dual; Ausgang: 2. Select INSTR('AEROPLANE','E',2,2) from dual; Ausgang: 9 (2. Vorkommen von E) |
| SUBSTR (Text, Start, Lรคnge) | Gibt den Teilstring des Hauptstrings zurรผck. text ist der Hauptstring, start ist die Startposition und length ist die Lรคnge des zu extrahierenden Teilstrings. | select substr('aeroplane',1,7) from dual; Ausgang: Aeropla |
| OBERSCHRIFT (Text) | Gibt den angegebenen Text in Groรbuchstaben zurรผck. | Wรคhlen Sie Upper('guru99') aus Dual; Ausgang: GURU99 |
| UNTERER (Text) | Gibt den angegebenen Text in Kleinbuchstaben zurรผck. | Select lower('AerOpLane') from dual; Ausgang: Flugzeug |
| INITCAP (Text) | Gibt den angegebenen Text zurรผck, wobei der Anfangsbuchstabe jedes Wortes groรgeschrieben wird. | SELECT INITCAP('guru99') FROM dual; Ausgang: Guru99. Select INITCAP('my story') from dual; Ausgang: Meine Geschichte |
| LรNGE (Text) | Gibt die Lรคnge der angegebenen Zeichenkette zurรผck. | Select LENGTH('guru99') from dual; Ausgang: 6 |
| LPAD (Text, Lรคnge, Fรผllzeichen) | Fรผllt die Zeichenkette links mit dem angegebenen Zeichen auf die angegebene Gesamtlรคnge auf. | Wรคhlen Sie LPAD('guru99', 10, '$') aus dual; Ausgang: $$$$guru99 |
| RPAD (Text, Lรคnge, pad_char) | Fรผllt die Zeichenkette rechts mit dem angegebenen Zeichen auf die angegebene Gesamtlรคnge auf. | Select RPAD('guru99โฒ,10,'-') from dual; Ausgang: guru99โ- |
| LTRIM (Text) | Entfernt den vorangestellten Leerraum aus dem Text. | Wรคhlen Sie LTRIM(' Guru99') aus dem Dual; Ausgang: Guru99 |
| RTRIM (Text) | Entfernt den nachfolgenden Leerraum aus dem Text. | Wรคhlen Sie RTRIM('Guru99 ') aus dem Dual; Ausgang: Guru99 |
Datumsfunktionen
Diese Funktionen dienen der Datumsmanipulation.
| Funktionsname | Anwendungsbereich | Beispiel |
|---|---|---|
| ADD_MONTHS (Datum, Anzahl der Monate) | Addiert die angegebenen Monate zum Datum. | ADD_MONTHS('2015-01-01',5); Ausgang: 05 / 01 / 2015 |
| SYSDATUM | Gibt das aktuelle Datum und die aktuelle Uhrzeit des Servers zurรผck. | Wรคhlen Sie SYSDATE aus Dual; Ausgang: 10 4:2015:2 Uhr |
| TRUNC | Rundet die Datumsvariable auf den kleinstmรถglichen Wert ab. | select sysdate, TRUNC(sysdate) from dual; Ausgang: 10/4/2015 2:12:39 PM, 10/4/2015 |
| ROUND | Rundet das Datum auf den nรคchsthรถheren oder -niedrigeren Wert. | SELECT SYSDATE, ROUND(SYSDATE) FROM DUAL; Ausgang: 10/4/2015 2:14:34 PM, 10/5/2015 |
| MONATE_BETWEEN | Gibt die Anzahl der Monate zwischen zwei Daten zurรผck. | SELECT MONTHS_BETWEEN (sysdate+60, sysdate) FROM dual; Ausgang: 2 |


