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 |


