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.

  • ๐Ÿงฉ Zwei Unterprogramme: Prozeduren fรผhren einen Prozess aus; Funktionen fรผhren eine Berechnung durch und geben einen Wert zurรผck.
  • ???? Parameter: IN รผbergibt die Eingabe, OUT gibt die Ausgabe zurรผck, und IN OUT macht beides.
  • ๏ธ RรœCKKEHR: Gibt die Kontrolle an den Aufrufer zurรผck; in einer Funktion gibt sie auรŸerdem einen Wert eines deklarierten Typs zurรผck.
  • ๐Ÿ—„๏ธ Gespeicherte Objekte: Beide werden als Datenbankobjekte gespeichert und kรถnnen von anderen Blรถcken aufgerufen werden.
  • ๐Ÿ”Ž SELECT Verwendung: Eine Funktion ohne DML kann innerhalb einer SELECT-Anweisung aufgerufen werden; eine Prozedur nicht.
  • ๏ธ Hauptunterschied: Eine Funktion muss einen Wert zurรผckgeben, eine Prozedur hingegen nicht.
  • ๏ธ Integrierte Funktionen: Oracle Schiffskonvertierungs-, Zeichenketten- und Datumsfunktionen sind sofort einsatzbereit.

Oracle PL/SQL-gespeicherte Prozeduren und Funktionen

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:

  1. IN-Parameter
  2. OUT-Parameter
  3. 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.

PL/SQL-Funktionsstruktur

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.

Erstellen einer PL/SQL-Funktion und deren Aufruf

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

Hรคufig gestellte Fragen

Eine Funktion muss einen Wert zurรผckgeben und kann innerhalb einer SELECT-Anweisung verwendet werden, sofern sie keine DML-Anweisungen enthรคlt. Eine Prozedur fรผhrt einen Prozess aus, muss keinen Wert zurรผckgeben und kann nicht aus einer SELECT-Anweisung aufgerufen werden.

IN รผbergibt einen schreibgeschรผtzten Wert an das Unterprogramm. OUT gibt einen Wert an den Aufrufer zurรผck. IN OUT fรผhrt beides aus: Es empfรคngt einen Wert und gibt รผber denselben Parameter einen mรถglicherweise verรคnderten Wert zurรผck.

Ja, sofern sie keine DML-Anweisungen wie INSERT, UPDATE oder DELETE enthรคlt. Eine Funktion, die DML-Anweisungen ausfรผhrt, kann nur aus einem anderen PL/SQL-Block aufgerufen werden, nicht direkt innerhalb einer Abfrage.

Ja. KI kann aus einer einfachen Beschreibung eine CREATE PROCEDURE oder CREATE FUNCTION mit den richtigen Parametermodi und einem RETURN-Typ entwerfen. RevPrรผfen Sie vor der Bereitstellung die Parameter und die Ausnahmebehandlung.

OR REPLACE รผberschreibt eine bestehende Prozedur oder Funktion mit demselben Namen, ohne dass diese gelรถscht wird.ping Zuerst wird es eingesetzt. Dadurch bleiben die Fรถrdermittel erhalten, und dies ist die รผbliche Vorgehensweise, um ein geรคndertes Teilprogramm erneut bereitzustellen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: