Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Oracle PL/SQL Grundkurs

Mit SELECT INTO einen Datensatz besorgen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Im durchgehenden Programmierbeispiel kann jeder Benutzer beliebig viele Messdaten abspeichern. Hier zeigt Ihnen der Trainer, wie Sie zunächst den Primärschlüssel des Benutzers mit SELECT INTO erlangen, um hiermit Messdaten abzuspeichern.

Transkript

In diesem Video werden wir für unser durchgehendes BMI-Programmierbeispiel dafür sorgen, dass die Daten einer Gewichtsmessung abgespeichert werden. Hierfür werde ich eine START PROCEDURE in einem SQL-Skript programmieren. Ich nenne das Skript kap05_messung_speichern. Also schreibe ich edit in SQL Plus hinein und dann kap05_messung_speichern. Mit einem Mausklick auf Ja, wird dann die Datei angelegt. Jetzt werde ich dafür sorgen, dass das Syntax Highlighting funktioniert. Im Hauptmenü gehe ich über Sprachen S SQL. Ich beginne mein Skript über eine CREATE-Anweisung. CREATE OR REPALCE PROCEDURE Und die Procedure nenne ich messung_speichern. Klammer auf, Der Procedure werden wir den Namen und das Gewicht des Benutzers als Eingansparameter übergeben. Ich beginne deshalb zunächst mit dem Kopf der Datei, bei dem wir die Eingangsparameter definieren. Den ersten Eingangsparameter nenne ich name_in über das Schlüsselwort IN lege ich fest, dass es ein Eingangsparameter ist. Und den Datentypen werde ich so setzen, dass er sich an dem Spaltenfeld name der Tabelle benutzer orientiert. benutzer.name%TYPE Und das war es. Die nächste Variable ist auch ein Eingangsparameter gewicht_in, nenne ich sie mit dem Schlüsselwort IN sorge ich wieder dafür, dass es eindeutig ist, dass es sich um ein Eingangsparameter handelt und den Datentypen setze ich auf das Spaltenfeld gewicht der Tabelle messung messung.gewicht%TYPE Dann brauche ich, hinter der schließenden Klammer, das Schlüsselwort ES. Und jetzt befinde ich mich im Deklarationsabschnitt. Mit diesem Namen, der mir als Übergabeparameter übergeben wird, werden wir später im Ausführungsabschnitt, den Primärschlüssel aus der Datenbanktabelle benutzer besorgen. Und diesen dann einer Variablen zuweisen, die ich jetzt mal benutzer nennen werde. Diese Variable werde ich nun deshalb im Deklarationsbereich definieren. benutzer_id, nenne ich sie. benutzeri_d und den Datentypen setze ich so, dass er sich nach dem Spaltenfeld id in der Tabelle benutzer orientiert, also benutzer.id%TYPE Nun kommen wir zum Ausführungsabschnitt. Ich leite den Ausführungsabschnitt mit dem Schlüsselwort BEGIN ein. Und ich muss hierin dafür sorgen, dass diese Variable, benutzer_id den Primärschlüssel-Wert erhält, der zu dem Namen des Benutzers gehört. Die einfachste Möglichkeit hierzu, ist die sogenannte SELECT INTO-Anweisung. Mit so einer Anweisung, können wir Daten aus Datenbanktabellen besorgen und sie unmittelbar an eine Variable zuweisen. SELECT INTO ist, neben dem Zuweisungsoperator mit Doppelpunkt und Gleichheitszeichen, eine weitere Möglichkeit, wie man einer Variablen, einen Wert zuweisen kann. Die SELECT INTO Anweisung ähnelt der SELECT Anweisung. Wenn ich beispielsweise ein SELECT auf die Tabelle benutzer durchführen würde, um mir einen Primärschlüssel zu besorgen, sähe es beispielsweise so aus: Ich würde jetzt schreiben SELECT id und dahinter FROM und dann benutzer ich könnte auch mit einem Alias arbeiten b und dann kann ich den Alias hier benutzen und den Namen des Spaltenfeldes id über den Punktoperator an diesen Alias binden. Um genau den Primärschlüssel herauszufiltern, der zu dem eingegebenen Namen gehört, müsste ich Folgendes hinzufügen: WHERE b.name = name_in. Genau den Wert des Eingangsparameters. Semikolon. Um den Primärschlüssel nun der Variablen benutzer_id zuzuweisen, brauchen wir lediglich das Schlüsselwort INTO, hier hinter die Spaltenfelder zu setzen und hinter dem Schlüsselwort INTO, setze ich dann die Variable benutzer_id. Nun muss man bei der SELECT INTO-Anweisung etwas Besonderes beachten. Das Problem ist hier nämlich, dass SELECT INTO nur dann funktioniert, wenn der SELECT genau einen Datensatz liefert. Wenn die SELECT INTO-Anweisung aber keinen Datensatz oder mehr als einen Datensatz zu dem Namen findet, löst sie die Exception no data found oder die Exception too many rows aus. Deshalb werde ich jetzt zusätzlich folgende Exceptions im Ausnahmebehandlungsabschnitt vorsehen. Zunächst mal brauchen wir das Schlüsselwort EXCEPTION um den Ausnahmebehandlungsabschnitt einzuleiten. Und der wäre dann jetzt hier. Und der endet mit dem Schlüsselwort END, denn hierdurch zeige ich an, dass mein PL/SQL-Programm beendet ist. Den Schrägstrich für die Ausführung in SQL Plus, füge ich auch noch an. Und jetzt befinde ich mich hier in dem Ausnahmebehandlungsabschnitt. Im Ausnahmebehandlungsabschnitt schreibe ich jetzt rein WHEN NO DATA FOUND THEN Also wenn kein Datensatz gefunden worden ist dann gebe ich einfach mal aus dbms output .put_line und hier einfach nur den Satz kein Datensatz mit diesem Namen Dann kopiere ich diese zwei Zeilen hier drunter und fange auch die Exception TOO MANY ROWS ab Und bei dieser Exception gebe ich aus, Mehr als ein Datensatz mit diesem Namen Kryptischerweise füge ich jetzt auch noch das Abfangen von OTHERS ein. OTHERS THEN Und an dieser Stelle gebe ich dann Folgendes aus und zwar Fehler und dann füge ich dort einfach nur den Wert der Variablen SQLERRM hinein. NO_DATA_FOUND wird ausgelöst, wenn zu dem Benutzernamen kein Datensatz zu finden ist. und TOO_MANY_ROWS, wird ausgelöst, wenn die query mehr als einen Datensatz liefert. Da wir das Spaltenfeld name mit dem Constraint UNIQUE versehen hatten, werden wir entweder genau einen oder keinen Datensatz zu den Namen vorfinden, und deshalb sollte dieser Fall mit TOO_MANY_ROWS in unserem Programm überhaupt nicht vorkommen. Ich habe die beiden Exceptions dennoch hingeschrieben, um Ihnen die Einschränkungen von SELECT INTO zu verdeutlichen. Kommen wir nun zurück zu unserem Programm. Denn nun kann ich den neuen Datensatz für die Messungen in die Datenbanktabelle messung einfügen. Ich setze ein INSERT hinter mein SELECT. INSERT INTO messung dann muss ich die Spaltenfelder anführen. Zumindest ist das sauberer, wenn ich das tue. id benutzer_id gewicht und zeitpunkt VALUES dahinter ein Semikolon. Jetzt kommen hier die Werte hinein. Hier werde ich wieder eine Sequence verwenden nämlich die Sequence seq_messung. Unterstrich messung. Über das Pseudospaltenfeld NEXTVAL, besorge ich auch hier wieder den nächsten Primärschlüssel. Dann folgt die benutzer_id, die wir hier oben zugewiesen hatten. Das Gewicht werde ich durch den Eingangsparameter gewicht_in setzen. Für den Zeitpunkt, werde ich die Funktion SYSTIMESTAMP nutzen. Also SYSTIMESTAMP Um meinen INSERT nun dauerhaft zu speichern, werde ich die Procedure in einer eigenen Transaktion laufen lassen, deshalb setze ich das PRAGMA AUTNOMOUS_TRANSACTION in den Deklarationsblock hinein. Also hier. PRAGMA AUTONOMOUS TRANSACTION Denn hierdurch laufen dann die Datenbank- zugriffe dieses PL/SQL Programms in einer eigenen autonomen Transaktion ab. Jetzt kann ich einen COMMIT hinter mein INSERT setzen, denn dadurch wird dann bestätigt, dass diese Daten dauerhaft in der Datenbank gespeichert werden sollen. Damit meine Datenbankänderungen im Fehlerfall auch zurückgenommen werden, füge ich einen Safepunkt vor den INSERT. Also hier SAFEPOINT, und den nenne ich safepoint_1. Im Ausnahmebehandlungsabschnitt kann ich dann ein Rollback zum Safepoint einsetzen, um meine Änderungen auf diese Weise zu verwerfen. Das mache ich hier unten. ROLLBACK TO SAFEPOINT_1 Nach der Speicherung, werde ich dem Benutzer eine Bestätigung ausgeben. Und zwar an dieser Stelle. dbms output.put line und dann schreibe ich hier einfach nur rein messung Messung für Benutzer-ID: Und hier setze ich dann die Benutzer-ID hinein. Ganz einfach angelegt. So jetzt bin ich mit dem Programm fertig. Ich speichere das Ganze mal ab. Ich schließe Notepad++. Ich starte das Skript, damit meine Procedure angelegt wird. Jetzt kann ich die Procedure einmal ausführen, um ein Gewicht abzuspeichern und zwar über execute messung_speichern Alex 69.5 Wie Sie sehen, hat das funktioniert. In diesem Video haben wir eine weitere START-Procedure geschrieben, damit auch die Messungen des Benutzers dauerhaft gespeichert werden können. Hierbei habe ich Ihnen die SELECT INTO-Anweisung vorgestellt, über die Sie einer Variablen den Rückgabewert einer SELECT-Anweisung zuweisen können. Wichtig hierbei ist, dass Sie gelernt haben, dass die SELECTO INTO-Anweisung lediglich dann eingesetzt wird, wenn man mit genau einem Datensatz als Rückgabewert rechnet.

Oracle PL/SQL Grundkurs

Entdecken Sie grundlegende Programmstrukuren, Stored Procedures und Functions in PL/SQL und sehen Sie, wie Sie auf Daten zugreifen können.

3 Std. 58 min (32 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!