DevGym_PLSQL_Quizzes_02 Flashcards
Was macht die Funktion TRUNC
?
Die Funktion TRUNC wird in SQL verwendet, um den Dezimalteil eines numerischen Wertes oder den Zeitteil eines Datums-/Zeitwertes abzuschneiden oder zu entfernen. Das spezifische Verhalten der TRUNC-Funktion hängt vom Datentyp des Eingabewerts ab:
Für numerische Werte:
Wenn sie auf eine Zahl angewendet wird, entfernt TRUNC den Dezimalteil und gibt den ganzzahligen Teil der Zahl zurück. Zum Beispiel würde TRUNC(12.345) das Ergebnis 12 liefern.
Die Funktion kann auch einen zweiten optionalen Parameter akzeptieren, der die Dezimalgenauigkeit angibt. Falls angegeben, wird die Zahl auf die angegebene Anzahl von Dezimalstellen abgeschnitten. Zum Beispiel würde TRUNC(12.345, 2) das Ergebnis 12.34 ergeben.
Für Datums-/Zeitwerte:
Bei der Anwendung auf einen Datums- oder Zeitstempelwert entfernt TRUNC den Zeitteil und gibt das Datum um Mitternacht (00:00:00) desselben Tages zurück. TRUNC(SYSDATE) würde beispielsweise das Ergebnis des aktuellen Datums mit dem auf Mitternacht gesetzten Zeitanteil liefern.
Die Funktion kann auch einen zweiten optionalen Parameter akzeptieren, der den Teil des Datums angibt, auf den die Trunkierung angewendet werden soll (z. B. Jahr, Monat, Tag usw.). Zum Beispiel würde TRUNC(SYSDATE, ‘MONTH’) das Ergebnis des ersten Tages des aktuellen Monats um Mitternacht liefern.
Zusammenfassend lässt sich sagen, dass Sie mit der Funktion TRUNC den Dezimalteil einer Zahl oder den Zeitteil eines Datums-/Zeitwerts entfernen können, um entweder einen ganzzahligen Wert zu erhalten oder den Wert auf eine bestimmte Genauigkeit oder einen bestimmten Datumsteil abzuschneiden.
Was macht TO_CHAR(sysdate, ‘HH’)?
Die Funktion TO_CHAR(sysdate, ‘HH’) wird verwendet, um einen Datums-/Zeitwert in eine Zeichenkette zu konvertieren, die den Stundenanteil im 24-Stunden-Format darstellt. Sie gibt die Stunde als zweistellige Zeichenkette zurück, die von ‘00’ bis ‘23’ reicht.
Was sind Objekte in PLSQL?
In Oracle PL/SQL sind Objekte benutzerdefinierte Datentypen, die sowohl Daten als auch die Operationen (Methoden), die mit diesen Daten durchgeführt werden können, kapseln. Sie ermöglichen es Ihnen, benutzerdefinierte, strukturierte Typen zu erstellen, die Attribute und Verhaltensweisen haben können.
Objekte in Oracle PL/SQL werden mit dem objektrelationalen Modell erstellt, das die Prinzipien der objektorientierten Programmierung (OOP) mit dem relationalen Datenbankmodell kombiniert. Objekte können verwendet werden, um reale Entitäten wie Kunden, Mitarbeiter oder Produkte darzustellen, und bieten eine Möglichkeit, verwandte Daten und Funktionen zu organisieren und zu manipulieren.
Im Folgenden werden einige wichtige Aspekte von Objekten in Oracle PL/SQL erläutert:
Attribute: Objekte haben Attribute, d. h. Variablen, die mit dem Objekt verbundene Daten enthalten. Attribute definieren die Struktur des Objekts und können verschiedene Datentypen haben.
Methoden: Objekte können Methoden haben, d. h. Prozeduren oder Funktionen, die mit dem Objekt verbunden sind. Methoden definieren das Verhalten oder die Operationen, die mit den Daten des Objekts durchgeführt werden können.
Verkapselung: Objekte kapseln sowohl Daten als auch Methoden ein und bieten so die Möglichkeit, Daten zu verstecken und zu abstrahieren. Sie ermöglichen es, den Zugriff auf die Daten des Objekts zu steuern und Schnittstellen für die Interaktion mit dem Objekt zu definieren.
Vererbung: Objekte können Attribute und Methoden von anderen Objekten erben, was die Wiederverwendung von Code und die hierarchische Organisation von Objekttypen ermöglicht. Die Vererbung ermöglicht die Erstellung von spezialisierten Objekttypen auf der Grundlage bestehender Typen.
Objekttypen: Objekte in PL/SQL werden mit Objekttypen definiert, die auf Schemaebene mit der CREATE TYPE-Anweisung erstellt werden. Objekttypen spezifizieren die Struktur, die Attribute und die Methoden der Objekte.
Objekte in Oracle PL/SQL bieten eine leistungsfähige Möglichkeit, komplexe Datenstrukturen innerhalb der Datenbank zu modellieren und zu manipulieren. Sie unterstützen Konzepte aus der objektorientierten Programmierung wie Kapselung, Vererbung und Abstraktion und ermöglichen so einen flexibleren und modularen Codeentwurf.
Wie könnte ich den folgenden Code noch schreiben?
DECLARE l_day_type VARCHAR2 (10); BEGIN IF TO_CHAR (SYSDATE, 'DY') IN ('SAT', 'SUN') THEN l_day_type := 'Weekend'; ELSE l_day_type := 'Weekday'; END IF; END;
DECLARE l_day_type VARCHAR2 (10); BEGIN l_day_type := CASE WHEN TO_CHAR (SYSDATE, 'DY') IN ('SAT', 'SUN') THEN 'Weekend' ELSE 'Weekday' END; END;
Was sind Labels in PL/SQL?
In PL/SQL ist ein Label ein Kennzeichner, der verwendet wird, um einen bestimmten Punkt in einem Codeblock zu markieren. Labels bieten eine Möglichkeit, diesen Punkt später im Programm zu referenzieren, normalerweise innerhalb von Schleifen oder Kontrollstrukturen. Sie werden in Verbindung mit bestimmten Anweisungen wie GOTO, EXIT und CONTINUE verwendet, um den Ausführungsfluss innerhalb verschachtelter Schleifen oder bedingter Blöcke zu steuern.
Die Syntax für ein Label in PL/SQL ist einfach ein Bezeichner, gefolgt von einem Doppelpunkt (:). Andere Möglichkeit ist «label». Das Label muss mit einem Buchstaben beginnen und kann Buchstaben, Ziffern und Unterstriche enthalten. Groß- und Kleinschreibung wird nicht berücksichtigt.
Hier ist ein Beispiel für die Verwendung eines Labels mit einer Schleife in PL/SQL:
DECLARE i NUMBER := 1; BEGIN <<my_loop>> -- Label definition LOOP IF i > 5 THEN EXIT my_loop; -- Exiting the loop using the label END IF; DBMS_OUTPUT.PUT_LINE('Iteration ' || i); i := i + 1; END LOOP; END;
In diesem Beispiel definieren wir ein Label namens my_loop mit der Syntax «Label-Name». Innerhalb der Schleife verwenden wir die EXIT-Anweisung mit dem Label, um die Schleife zu verlassen, wenn der Wert von i größer als 5 wird. Auf diese Weise können wir die Beendigung der Schleife von der Schleife aus steuern.
Es ist wichtig, Labels mit Bedacht zu verwenden, da eine übermäßige Verwendung zu komplexem und schwer nachvollziehbarem Code führen kann. Im Allgemeinen ist die Verwendung eines strukturierten Kontrollflusses (IF, LOOP, WHILE) der Verwendung von GOTO mit Labels vorzuziehen. Es gibt jedoch Szenarien, in denen Bezeichnungen nützlich sein können, insbesondere in Fällen, in denen verschachtelte Schleifen und komplexe Kontrollstrukturen verwendet werden.
Welche der folgenden Aussagen über Konstanten sind richtig?
- Der Wert einer Konstante kann nicht mehr geändert werden, nachdem sie deklariert worden ist.
- Sie können einer Konstanten entweder im Deklarationsabschnitt oder im Ausführungsabschnitt einen Wert zuweisen, aber Sie können den Wert nur einmal setzen.
- Konstanten können nicht auf Paketebene deklariert werden.
Der Wert einer Konstante kann nicht mehr geändert werden, nachdem sie deklariert worden ist.
- Richtig, diese Aussage ist im Wesentlichen die Definition einer Konstante. Eine Konstante hat einen konstanten, unveränderlichen Wert.
Sie können einer Konstanten entweder im Deklarationsabschnitt oder im Ausführungsabschnitt einen Wert zuweisen, aber Sie können den Wert nur einmal setzen.
- Falsch: Sie müssen den Wert einer Konstanten in derselben Anweisung setzen, in der die Konstante deklariert wird (unter Verwendung der “:=”- oder “DEFAULT”-Syntax, um den Standardwert (und den einzigen) für die Konstante anzugeben). Wenn Sie versuchen, mit der Zuweisung eines Wertes an eine Konstante bis zum Ausführungsabschnitt zu warten, gibt Oracle die Fehlermeldung “PLS-00322: declaration of a constant ‘constant-name’ must contain an initialization assignment” aus.
Konstanten können nicht auf Paketebene deklariert werden.
- Falsch: Nein, Sie können Konstanten sehr wohl auf Paketebene deklarieren, aber nicht innerhalb eines Unterprogramms des Pakets. Solche Konstanten können als anwendungsweite Konstanten verwendet werden, da jedes Schema mit EXECUTE-Berechtigung auf das Paket die Konstante referenzieren kann.
Was ist DBMS_UTIL?
DBMS_UTIL ist ein PL/SQL-Paket in Oracle Database, das verschiedene Dienstprogramme und Funktionen bereitstellt. Es umfasst Funktionen wie die Konvertierung von Datentypen, die Verwaltung von Datenbanktransaktionen, die Erzeugung eindeutiger Sitzungs-IDs und die Ausführung dynamischer SQL-Anweisungen. Es wird üblicherweise für die Datenbankverwaltung und für Entwicklungsaufgaben verwendet.
Ein Beispiel für DBMS_UTIL.EXEC_SQL?
Die Prozedur DBMS_UTIL.EXEC_SQL kann zur Ausführung dynamischer SQL-Anweisungen verwendet werden.
DECLARE sql_stmt VARCHAR2(100) := 'SELECT COUNT(*) FROM employees'; result NUMBER; BEGIN DBMS_UTIL.EXEC_SQL(sql_stmt, result); DBMS_OUTPUT.PUT_LINE('Number of Employees: ' || result); END;
Was gibt es außer DBMS_UTIL noch für wichtige PL/SQL-Pakete?
DBMS_OUTPUT: Mit dem DBMS_OUTPUT-Paket können Sie Nachrichten, Debug-Informationen und Ausgaben von PL/SQL-Code an die Konsole senden, um sie während der Entwicklung und beim Debugging anzuzeigen.
DBMS_SQL: Das DBMS_SQL-Paket bietet eine Low-Level-Schnittstelle für die dynamische SQL-Ausführung. Es ermöglicht Ihnen, dynamische SQL-Anweisungen auszuführen und Ergebnisse abzurufen, ohne explizite Cursor verwenden zu müssen.
DBMS_SCHEDULER: Mit dem DBMS_SCHEDULER-Paket können Sie Jobs, Programme und Job-Ketten innerhalb der Datenbank planen und verwalten. Es bietet die Möglichkeit, verschiedene Aufgaben zu automatisieren und sie in bestimmten Zeitabständen auszuführen.
DBMS_CRYPTO: Das DBMS_CRYPTO-Paket bietet kryptografische Funktionen zum Ver- und Entschlüsseln von Daten in der Datenbank. Es unterstützt verschiedene Verschlüsselungsalgorithmen und Hashing-Funktionen.
UTL_FILE: Das UTL_FILE-Paket ermöglicht das Lesen von und Schreiben in Betriebssystemdateien aus PL/SQL heraus. Es ermöglicht die Durchführung von Datei-E/A-Operationen für den Datenaustausch mit externen Dateien.
Was passiert mit l_total?
DECLARE l_string VARCHAR2 (100) := SUBSTR ('Steven Feuerstein', 50, 4); l_total NUMBER := LENGTH (l_string); BEGIN FOR rec IN (SELECT * FROM plch_employees) LOOP l_total := l_total + rec.salary; END LOOP; DBMS_OUTPUT.put_line ('Total salary=' || l_total); END;
Der Wert von l_total wird mit NULL initialisiert und bleibt NULL, weil:
* LENGTH einer null oder leeren Zeichenkette gibt NULL zurück.
* Wenn eine Variable NULL ist, bleibt sie NULL, wenn ihr ein anderer Wert zugewiesen wird. Da l_total durch den Aufruf von LENGTH ein NULL-Wert zugewiesen wird, weist die letzte Schleife des Blocks der Variablen l_total einfach weiterhin NULL zu.
Vergewissern Sie sich bei der Implementierung von Inkrementen oder Zählern jeder Art, dass der Anfangswert nicht NULL ist - und nicht unterwegs auf NULL gesetzt wird.
Was ist die RETURNING-Klausel einer DML-Anweisung?
Die RETURNING-Klausel ist eine Funktion in einigen Datenbankmanagementsystemen (DBMS), die in DML-Anweisungen (Data Manipulation Language) wie INSERT, UPDATE oder DELETE verwendet wird. Sie ermöglicht es Ihnen, die Werte bestimmter Spalten oder Ausdrücke abzurufen, nachdem die DML-Operation ausgeführt wurde.
Die RETURNING-Klausel ist besonders nützlich, wenn Sie unmittelbar nach der Durchführung der DML-Operation auf die aktualisierten oder eingefügten Daten zugreifen möchten, ohne eine separate Abfrage durchführen zu müssen.
Nehmen wir ein Beispiel, um ihre Verwendung zu veranschaulichen:
Nehmen wir an, Sie haben eine Tabelle mit dem Namen employees mit den Spalten employee_id, name, salary, und Sie möchten das Gehalt eines Mitarbeiters aktualisieren und das aktualisierte Gehalt abrufen:
-- Example of using RETURNING INTO with an UPDATE statement in Oracle DECLARE updated_salary NUMBER; BEGIN UPDATE employees SET salary = salary * 1.1 -- 10% salary increase WHERE employee_id = 100 RETURNING salary INTO updated_salary; -- You can now use the updated_salary variable as needed DBMS_OUTPUT.PUT_LINE('Updated salary: ' || updated_salary); END;
In diesem Beispiel erhöht die UPDATE-Anweisung das Gehalt des Mitarbeiters mit employee_id = 100 um 10 % und verwendet die RETURNING-Klausel, um den aktualisierten Gehaltswert abzurufen. Das Ergebnis dieser Abfrage ist das neue Gehalt des Mitarbeiters mit employee_id = 100.
Können Sie den Wert einer Variablen ändern, indem Sie sie als Argument an eine Prozedur oder Funktion übergeben?
Ein Unterprogramm kann Parameter mit dem Modus IN OUT oder OUT enthalten. Sie können den Wert einer Variablen ändern, indem Sie sie als Argument an einen Parameter mit einem dieser Modi übergeben.
DECLARE l_number NUMBER; PROCEDURE set_value (value_out OUT NUMBER) IS BEGIN value_out := 1; END set_value; BEGIN /* Set value through IN OUT or OUT parameter */ set_value (l_number); END;
Was ist RAISE_APPLICATION_ERROR?
In Oracle PL/SQL wird die Prozedur RAISE_APPLICATION_ERROR verwendet, um einen benutzerdefinierten Fehler auszulösen und eine Fehlermeldung an die Anwendung zurückzugeben. Sie ermöglicht es Entwicklern, eigene aussagekräftige Fehlermeldungen zu erstellen und diese an das aufrufende Programm weiterzuleiten, was eine bessere Fehlerbehandlung ermöglicht und die Identifizierung der Fehlerursache erleichtert.
Die Syntax der Prozedur RAISE_APPLICATION_ERROR lautet wie folgt:
RAISE_APPLICATION_ERROR( error_number IN NUMBER, error_message IN VARCHAR2, keep_error_stack IN BOOLEAN DEFAULT FALSE );
- error_number: Der numerische Fehlercode zur eindeutigen Identifizierung des benutzerdefinierten Fehlers. Die Fehlernummer muss im Bereich von -20000 bis -20999 liegen.
- error_message: Die benutzerdefinierte Fehlermeldung, die spezifische Details über den Fehler enthält. Die Nachricht kann bis zu 2048 Zeichen lang sein.
- keep_error_stack (optional): Wenn dieser Wert auf TRUE gesetzt wird, bleibt der aktuelle Fehlerstapel erhalten, wenn der benutzerdefinierte Fehler ausgelöst wird. Dies ist nützlich, wenn der Fehler an äußere Exception-Handler weitergegeben wird.
Hier ist ein Beispiel für die Verwendung von RAISE_APPLICATION_ERROR:
CREATE OR REPLACE PROCEDURE process_employee ( emp_id NUMBER ) AS emp_name VARCHAR2(100); BEGIN -- Check if employee exists SELECT employee_name INTO emp_name FROM employees WHERE employee_id = emp_id; IF emp_name IS NULL THEN -- Raise custom error if employee does not exist RAISE_APPLICATION_ERROR(-20001, 'Employee not found for ID ' || emp_id); END IF; -- Perform other processing if employee exists -- ... EXCEPTION WHEN OTHERS THEN -- Log and handle the error DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM); ROLLBACK; -- Rollback any uncommitted changes if needed RAISE; -- Reraise the error to the calling program END;
Wenn im obigen Beispiel der Mitarbeiter mit der angegebenen emp_id nicht existiert, wird die Prozedur RAISE_APPLICATION_ERROR verwendet, um einen benutzerdefinierten Fehler mit der Fehlernummer -20001 und einer spezifischen Fehlermeldung auszulösen. Der Fehler wird dann an den Exception-Handler weitergegeben, wo er protokolliert oder entsprechend behandelt werden kann.
Die Verwendung von RAISE_APPLICATION_ERROR liefert eine aussagekräftigere Fehlermeldung und hilft bei der Identifizierung der Grundursache von Problemen während der Anwendungsentwicklung und beim Debugging. Es ist besonders nützlich in großen Anwendungen, wo benutzerdefinierte Fehlermeldungen für eine bessere Fehlerberichterstattung und -behebung unerlässlich sind.
Wie kann ich mir den 01. eines Monats anzeigen lassen?
Select trunc(to_date(‘20.07.2023’,’DD.MM.YYYY’),’MM’)
FROM dual
Mit sysdate
trunc(sysdate,’MM’)
Es kann auch ‘Month’ oder ‘MON’ verwendet werden.
Wie kann ich mir den 01. des nächsten Monats anzeigen lassen?
add_months( trunc(sysdate,’MM’),1)