{"id":197800,"date":"2026-01-28T16:51:41","date_gmt":"2026-01-28T15:51:41","guid":{"rendered":"https:\/\/liora.io\/de\/?p=197800"},"modified":"2026-02-25T18:45:44","modified_gmt":"2026-02-25T17:45:44","slug":"alles-ueber-pl-sql","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/alles-ueber-pl-sql","title":{"rendered":"PL\/ SQL: Eine leistungsstarke Sprache f\u00fcr das Management von Oracle-Datenbanken"},"content":{"rendered":"<p>\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]&gt;a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}Im Bereich der relationalen Datenbanken zeichnet sich <a href=\"https:\/\/liora.io\/de\/wer-ist-oracle-der-groesste-herausforderer-von-azure-aws-und-google-cloud\">Oracle<\/a> nicht nur durch die Robustheit seiner Managementsysteme aus, sondern auch durch die fortschrittlichen Werkzeuge, die es Entwicklern bietet, um Datenoperationen zu optimieren, zu automatisieren und zu sichern. Zu diesen Werkzeugen geh\u00f6rt PL\/SQL (Procedural Language\/Structured Query Language), eine leistungsstarke Programmiersprache, die darauf ausgelegt ist, sich mit SQL, der Standardabfragesprache f\u00fcr relationale Datenbanken, zu integrieren.<\/p>\n<p>PL\/ SQL erweitert die F\u00e4higkeiten von <a href=\"https:\/\/liora.io\/de\/sql-alles-uber-die-datenbanksprache\">SQL<\/a> um prozedurale Funktionen wie Schleifen, Bedingungen und Ausnahmen und erm\u00f6glicht es den Entwicklern, Skripte zur Datenbankverwaltung zu erstellen.<\/p>\n<p>Diese Sprache, die f\u00fcr jeden Entwickler, der mit Oracle arbeitet, unverzichtbar ist, hat das Ziel, <b>Datenbankverwaltungskommandos mit einer prozeduralen Programmiersprache zu kombinieren<\/b>. Sie bietet umfassendere Programmierl\u00f6sungen f\u00fcr die Erstellung kritischer Anwendungen, die auf der Oracle-Datenbank basieren.<\/p>\n<p><a href=\"https:\/\/liora.io\/de\/sql-alles-uber-die-datenbanksprache\"><br \/>\nAlles \u00fcber SQL erfahren<br \/>\n<\/a><\/p>\n<h3>Gr\u00fcnde, PL\/ SQL zu erlernen<\/h3>\n<p>PL\/SQL ist eine wesentliche Programmiersprache f\u00fcr Entwickler, die Datenbanken verwenden. Es bietet viele Vorteile:<\/p>\n<ul>\n<li><b>Integration mit Oracle Database:<\/b> PL\/ SQL ist darauf ausgelegt, optimal mit der Oracle-Datenbank zu funktionieren, was eine reibungslose und effiziente Interaktion mit den gespeicherten Daten erm\u00f6glicht.<\/li>\n<li><b>Integration mit SQL:<\/b> PL\/ SQL ist eine Erweiterung der SQL-Sprache, die es erm\u00f6glicht, komplexe SQL-Abfragen zu schreiben, Transaktionen zu verwalten und Daten direkt in derselben Programmierumgebung zu manipulieren.<\/li>\n<li><b>Benutzerfreundlichkeit:<\/b> Wenn du bereits mit SQL vertraut bist, wirst du die Syntax von PL\/ SQL als ziemlich intuitiv empfinden. Der \u00dcbergang von SQL zu PL\/ SQL ist nat\u00fcrlich f\u00fcr diejenigen, die Erfahrung mit SQL haben, was das Erlernen dieser Sprache erleichtert.<\/li>\n<li><b>Erh\u00f6hte Sicherheit:<\/b> PL\/SQL umfasst robuste Sicherheitsfunktionen, die den Datenzugriff kontrollieren. Du kannst sensible Daten sch\u00fctzen, indem du den direkten Zugriff auf Tabellen einschr\u00e4nkst und zus\u00e4tzliche Sicherheitsebenen schaffst.<\/li>\n<li><b>Automatisierung wiederkehrender Aufgaben:<\/b> PL\/ SQL umfasst Funktionen (Prozeduren, Funktionen, Trigger), die die Automatisierung von Datenbankverwaltungsprozessen erm\u00f6glichen. Dies reduziert die Notwendigkeit der manuellen Ausf\u00fchrung wiederkehrender Aufgaben und minimiert menschliche Fehler.<\/li>\n<li><b>Portabilit\u00e4t:<\/b> PL\/ SQL-Codebl\u00f6cke k\u00f6nnen ohne \u00c4nderungen zwischen verschiedenen Oracle-Datenbanken verschoben werden.<\/li>\n<\/ul>\n<h3>Verschiedene Anwendungen von PL\/ SQL<\/h3>\n<p>PL\/ SQL bietet eine Vielzahl von Anwendungen in der Datenbankverwaltung. Dank seiner Flexibilit\u00e4t und Leistungsf\u00e4higkeit wird es f\u00fcr verschiedene Anwendungsf\u00e4lle verwendet, wie z.B.:<\/p>\n<ul>\n<li style=\"font-weight: 400\"><b>Anwendungsentwicklung:<\/b> PL\/ SQL wird zur Entwicklung von webbasierten Anwendungen verwendet, die auf Oracle-Datenbanken basieren.<\/li>\n<li style=\"font-weight: 400\"><b>Automatisierung administrativer Aufgaben:<\/b> PL\/ SQL erm\u00f6glicht die Automatisierung von Routineaufgaben in der Datenbankverwaltung und verbessert so die Effizienz und Zuverl\u00e4ssigkeit der Prozesse.<\/li>\n<li style=\"font-weight: 400\"><b>Datenbanksicherheit:<\/b> PL\/ SQL erm\u00f6glicht den Schutz der Integrit\u00e4t der Datenbank.<\/li>\n<li style=\"font-weight: 400\"><b>Analyse und Reporting:<\/b> PL\/ SQL wird zur Erstellung von ma\u00dfgeschneiderten Berichten verwendet, die spezielle Anforderungen an das Datenmanagement erf\u00fcllen. PL\/ SQL erm\u00f6glicht auch die Generierung von Daten f\u00fcr Dashboards und Visualisierungswerkzeuge.<\/li>\n<\/ul>\n<p>\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=&#8220;.svg&#8220;]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"900\" height=\"514\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2024\/07\/PL_SQL_Liora1.jpg\" alt=\"\" loading=\"lazy\"><\/p>\n<h3>Grundlagen der PL\/ SQL-Syntax<\/h3>\n<p>Ein PL\/ SQL-Programm ist in Bl\u00f6cken strukturiert. Jeder Block kann drei Hauptabschnitte enthalten:<\/p>\n<ul>\n<li style=\"font-weight: 400\"><b>Deklarationsabschnitt (<\/b>DECLARE<b>):<\/b> Dieser Abschnitt wird verwendet, um Variablen, Konstanten, Cursor und andere PL\/ SQL-Objekte zu deklarieren. Er ist optional.<\/li>\n<li style=\"font-weight: 400\"><b>Ausf\u00fchrungsabschnitt (<\/b>BEGIN<b>):<\/b> Dieser Abschnitt enth\u00e4lt die Anweisungen, die ausgef\u00fchrt werden. Er ist obligatorisch.<\/li>\n<li><b>Ausnahmeabschnitt (<\/b>EXCEPTION<b>):<\/b> Dieser Abschnitt wird zur Behandlung von Fehlern verwendet, die w\u00e4hrend der Ausf\u00fchrung der Anweisungen im BEGIN-Abschnitt auftreten k\u00f6nnen. Er ist optional.<\/li>\n<\/ul>\n<h4>1. Variablen und Datentypen:<\/h4>\n<p>Variablen in PL\/ SQL m\u00fcssen im DECLARE-Abschnitt deklariert werden. Die f\u00fcr Variablen verwendeten Datentypen sind denen von SQL \u00e4hnlich, mit spezifischen Erweiterungen f\u00fcr PL\/ SQL.<\/p>\n<p>VARCHAR2: Wird f\u00fcr Zeichenketten verwendet.<\/p>\n<p>NUMBER: Wird f\u00fcr Zahlen verwendet.<\/p>\n<p>DATE: Wird f\u00fcr Daten und Uhrzeiten verwendet.<\/p>\n<p>Beispiel:<\/p>\n<p>DECLARE<\/p>\n<p style=\"padding-left: 40px\"><strong>v_employee_name VARCHAR2(50);<\/strong><\/p>\n<p style=\"padding-left: 40px\">v_salary NUMBER(10, 2);<\/p>\n<p style=\"padding-left: 40px\">v_hire_date DATE;<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">v_employee_name := &#8218;Jane Doe&#8216;;<\/p>\n<p style=\"padding-left: 40px\">v_salary := 60000;<\/p>\n<p style=\"padding-left: 40px\">v_hire_date := SYSDATE;<\/p>\n<p style=\"padding-left: 40px\">DBMS_OUTPUT.PUT_LINE(&#8218;Employee: &#8218; || v_employee_name || &#8218;hired on: &#8218; || v_hire_date);<\/p>\n<p>END;<\/p>\n<p><a href=\"https:\/\/liora.io\/de\/sql-abfrage-die-5-wichtigsten-befehle-die-du-kennen-solltest\"><br \/>\nAlles \u00fcber SQL lernen<br \/>\n<\/a><\/p>\n<h4>2. Bedingungsstrukturen:<\/h4>\n<p>Bedingungsstrukturen erm\u00f6glichen es, Bedingungen zu testen und Codebl\u00f6cke basierend auf den Ergebnissen dieser Tests auszuf\u00fchren.<\/p>\n<p>Die Bedingungsstruktur IF-THEN-ELSE erm\u00f6glicht es, Anweisungen auszuf\u00fchren, wenn eine Bedingung wahr ist, und gegebenenfalls andere Anweisungen, wenn sie falsch ist.<\/p>\n<p>Beispiel:<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">IF v_salary &gt; 50000 THEN<\/p>\n<p style=\"padding-left: 80px\">DBMS_OUTPUT.PUT_LINE(&#8218;High salary&#8216;);<\/p>\n<p style=\"padding-left: 40px\">ELSIF v_salary &gt; 30000 THEN<\/p>\n<p style=\"padding-left: 80px\">DBMS_OUTPUT.PUT_LINE(&#8218;Medium salary&#8216;);<\/p>\n<p style=\"padding-left: 40px\">ELSE<\/p>\n<p style=\"padding-left: 80px\">DBMS_OUTPUT.PUT_LINE(&#8218;Low salary&#8216;);<\/p>\n<p style=\"padding-left: 40px\">END IF;<\/p>\n<p>END;<\/p>\n<h4>3. Schleifen:<\/h4>\n<p>PL\/ SQL unterst\u00fctzt mehrere Arten von Schleifen, die es erm\u00f6glichen, Anweisungen wiederholt auszuf\u00fchren.<\/p>\n<p>FOR-Schleife: F\u00fchrt einen Anweisungsblock eine definierte Anzahl von Malen aus.<\/p>\n<p>Beispiel:<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">FOR i IN 1..10 LOOP<\/p>\n<p style=\"padding-left: 80px\">DBMS_OUTPUT.PUT_LINE(&#8218;Iteration: &#8218; || i);<\/p>\n<p style=\"padding-left: 40px\">END LOOP;<\/p>\n<p>END;<\/p>\n<p>WHILE-Schleife: F\u00fchrt einen Anweisungsblock aus, solange eine Bedingung wahr ist.<\/p>\n<p><img decoding=\"async\" width=\"900\" height=\"514\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2024\/07\/PL_SQL_Liora2.jpg\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Beispiel:<\/p>\n<p>DECLARE<\/p>\n<p style=\"padding-left: 40px\">v_counter NUMBER := 1;<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">WHILE v_counter &lt;= 10 LOOP<\/p>\n<p style=\"padding-left: 80px\">DBMS_OUTPUT.PUT_LINE(&#8218;Counter: &#8218; || v_counter);<\/p>\n<p style=\"padding-left: 80px\">v_counter := v_counter + 1;<\/p>\n<p style=\"padding-left: 40px\">END LOOP;<\/p>\n<p>END;<\/p>\n<p>LOOP: F\u00fchrt einen Anweisungsblock unendlich oft aus, bis eine Austrittsbedingung erf\u00fcllt ist.<\/p>\n<p>Beispiel:<\/p>\n<p>DECLARE<\/p>\n<p style=\"padding-left: 40px\">v_counter NUMBER := 1;<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">LOOP<\/p>\n<p style=\"padding-left: 80px\">EXIT WHEN v_counter &gt; 10;<\/p>\n<p style=\"padding-left: 80px\">DBMS_OUTPUT.PUT_LINE(&#8218;Counter: &#8218; || v_counter);<\/p>\n<p style=\"padding-left: 80px\">v_counter := v_counter + 1;<\/p>\n<p style=\"padding-left: 40px\">END LOOP;<\/p>\n<p>END;<\/p>\n<p><a href=\"https:\/\/liora.io\/de\/sql-group-by-der-unverzichtbare-sql-befehl-fuer-data-analysts\"><br \/>\nErfahre mehr \u00fcber  SQL<br \/>\n<\/a><\/p>\n<h4>4. Prozeduren:<\/h4>\n<p>Stored Procedures sind wiederverwendbare PL\/ SQL-Subprogramme, die zum Ausf\u00fchren spezifischer Aufgaben verwendet werden k\u00f6nnen.<\/p>\n<p>Hier ist ein Beispiel einer Prozedur zur Erh\u00f6hung des Gehalts von Mitarbeitern basierend auf ihrer Leistung:<\/p>\n<p>CREATE OR REPLACE PROCEDURE adjust_salary (emp_id NUMBER, increment NUMBER) AS<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">UPDATE employees SET salary = salary + increment WHERE employee_id = emp_id;<\/p>\n<p style=\"padding-left: 40px\">COMMIT;<\/p>\n<p>END;<\/p>\n<p>Diese Prozedur nimmt eine Mitarbeiter-ID und einen Erh\u00f6hungsbetrag als Eingabe entgegen und aktualisiert dann das Gehalt des entsprechenden Mitarbeiters.<\/p>\n<p>Um diese Prozedur aufzurufen, reicht es aus:<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">adjust_salary(1001, 5000);<\/p>\n<p>END;<\/p>\n<h4>5. Funktionen:<\/h4>\n<p>Funktionen sind PL\/ SQL-Subprogramme, die einen einzelnen Wert zur\u00fcckgeben k\u00f6nnen.<\/p>\n<p>Hier ist ein Beispiel f\u00fcr eine Funktion, die den Durchschnittsgehalt der Mitarbeiter berechnet:<\/p>\n<p>CREATE OR REPLACE FUNCTION calculate_average_salary RETURN NUMBER AS<\/p>\n<p>avg_salary NUMBER;<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">SELECT AVG(salary) INTO avg_salary FROM employees;<\/p>\n<p style=\"padding-left: 40px\">RETURN avg_salary;<\/p>\n<p>END;<\/p>\n<p>Diese Funktion berechnet den Durchschnittsgehalt der Mitarbeiter und gibt das Ergebnis zur\u00fcck.<\/p>\n<p><img decoding=\"async\" width=\"900\" height=\"514\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2024\/07\/PL_SQL_Liora3.jpg\" alt=\"\" loading=\"lazy\"><\/p>\n<h4>6. Fehlerbehandlung:<\/h4>\n<p>Die Fehlerbehandlung ist ein wesentlicher Bestandteil von PL\/ SQL und erm\u00f6glicht es, Fehler elegant zu handhaben und die Stabilit\u00e4t der Anwendung sicherzustellen.<\/p>\n<p>Fehler werden im EXCEPTION-Abschnitt eines PL\/SQL-Blocks behandelt. Es gibt vordefinierte Ausnahmen wie NO_DATA_FOUND und TOO_MANY_ROWS sowie die M\u00f6glichkeit, benutzerdefinierte Ausnahmen zu definieren.<\/p>\n<p>Beispiel:<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">SELECT name INTO v_employee_name FROM employees WHERE employee_id = 9999;<\/p>\n<p>EXCEPTION<\/p>\n<p style=\"padding-left: 40px\">WHEN NO_DATA_FOUND THEN<\/p>\n<p style=\"padding-left: 80px\">DBMS_OUTPUT.PUT_LINE(&#8218;No data found for the specified employee ID.&#8216;);<\/p>\n<p style=\"padding-left: 40px\">WHEN TOO_MANY_ROWS THEN<\/p>\n<p style=\"padding-left: 80px\">DBMS_OUTPUT.PUT_LINE(&#8218;Multiple rows found for the specified employee ID.&#8216;);<\/p>\n<p style=\"padding-left: 40px\">WHEN OTHERS THEN<\/p>\n<p style=\"padding-left: 80px\">DBMS_OUTPUT.PUT_LINE(&#8218;An unexpected error occurred: &#8218; || SQLERRM);<\/p>\n<p>END;<\/p>\n<h4>7. Trigger:<\/h4>\n<p>Trigger sind PL\/ SQL-Bl\u00f6cke, die automatisch als Reaktion auf spezifische Ereignisse bei einer Tabelle ausgef\u00fchrt werden, wie das Einf\u00fcgen, Aktualisieren oder L\u00f6schen von Zeilen.<\/p>\n<p>Hier ist ein Beispiel eines Triggers, der die Historie von \u00c4nderungen an einer kritischen Tabelle protokolliert:<\/p>\n<p>CREATE OR REPLACE TRIGGER audit_trigger<\/p>\n<p>AFTER INSERT OR UPDATE OR DELETE ON employees<\/p>\n<p>FOR EACH ROW<\/p>\n<p>BEGIN<\/p>\n<p style=\"padding-left: 40px\">IF INSERTING THEN<\/p>\n<p style=\"padding-left: 80px\">INSERT INTO audit_log (action, employee_id, action_time) VALUES (&#8218;INSERT&#8216;, :NEW.employee_id, SYSDATE);<\/p>\n<p style=\"padding-left: 40px\">ELSIF UPDATING THEN<\/p>\n<p style=\"padding-left: 80px\">INSERT INTO audit_log (action, employee_id, action_time) VALUES (&#8218;UPDATE&#8216;, :NEW.employee_id, SYSDATE);<\/p>\n<p style=\"padding-left: 40px\">ELSIF DELETING THEN<\/p>\n<p style=\"padding-left: 80px\">INSERT INTO audit_log (action, employee_id, action_time) VALUES (&#8218;DELETE&#8216;, :OLD.employee_id, SYSDATE);<\/p>\n<p style=\"padding-left: 40px\">END IF;<\/p>\n<p>END;<\/p>\n<p>Dieser Trigger erm\u00f6glicht es, alle \u00c4nderungen an der Tabelle `employees` zu verfolgen, indem die Aktionen in einer <b>Tabelle `audit_log`<\/b> protokolliert werden.<\/p>\n<h3>Fazit<\/h3>\n<p>PL\/ SQL ist eine m\u00e4chtige Sprache, die es erm\u00f6glicht, die F\u00e4higkeiten von SQL mit prozeduralen Funktionen zu erweitern. Sie bietet bedeutende Vorteile in Bezug auf Leistung, Fehlerbehandlung, Sicherheit und Portabilit\u00e4t. Dank ihrer Kontrollstrukturen, gespeicherten Prozeduren, Funktionen und Trigger <b>erleichtert PL\/&nbsp; SQL die Erstellung robuster und leistungsf\u00e4higer Anwendungen<\/b>. Durch das Verstehen und Anwenden dieser Konzepte k\u00f6nnen Entwickler die von der Oracle-Datenbank angebotenen Funktionen voll aussch\u00f6pfen, um effiziente und zuverl\u00e4ssige L\u00f6sungen zu entwickeln.<\/p>\n<p><a href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\"><br \/>\nBilde Dich in SQL weiter<br \/>\n<\/a><\/p>\n<p>Um mehr \u00fcber die SQL-Sprache zu erfahren und Dich f\u00fcr Berufe im Bereich Data auszubilden, <a href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">trete Liora bei<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Bereich der relationalen Datenbanken zeichnet sich Oracle nicht nur durch die Robustheit seiner Managementsysteme aus, sondern auch durch die fortschrittlichen Werkzeuge, die es Entwicklern bietet, um Datenoperationen zu optimieren, zu automatisieren und zu sichern. Zu diesen Werkzeugen geh\u00f6rt PL\/SQL (Procedural Language\/Structured Query Language), eine leistungsstarke Programmiersprache, die darauf ausgelegt ist, sich mit SQL, der Standardabfragesprache f\u00fcr relationale Datenbanken, zu integrieren.<\/p>\n","protected":false},"author":85,"featured_media":219763,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2476],"class_list":["post-197800","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-dev"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/197800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/85"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=197800"}],"version-history":[{"count":4,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/197800\/revisions"}],"predecessor-version":[{"id":219764,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/197800\/revisions\/219764"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/219763"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=197800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=197800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}