DevGym_PLSQL_Quizzes_02 Flashcards

1
Q

Was macht die Funktion TRUNC?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was macht TO_CHAR(sysdate, ‘HH’)?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was sind Objekte in PLSQL?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

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;
A
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;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was sind Labels in PL/SQL?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

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.
A

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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Was ist DBMS_UTIL?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Ein Beispiel für DBMS_UTIL.EXEC_SQL?

A

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;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was gibt es außer DBMS_UTIL noch für wichtige PL/SQL-Pakete?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

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;
A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Was ist die RETURNING-Klausel einer DML-Anweisung?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Können Sie den Wert einer Variablen ändern, indem Sie sie als Argument an eine Prozedur oder Funktion übergeben?

A

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;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Was ist RAISE_APPLICATION_ERROR?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wie kann ich mir den 01. eines Monats anzeigen lassen?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wie kann ich mir den 01. des nächsten Monats anzeigen lassen?

A

add_months( trunc(sysdate,’MM’),1)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Was ist der Vorteil von BULK SQL?

A

Bulk SQL minimiert den Leistungs-Overhead der Kommunikation zwischen PL/SQL und SQL.

PL/SQL und SQL kommunizieren wie folgt: Um eine SELECT INTO- oder DML-Anweisung auszuführen, sendet die PL/SQL-Engine die Abfrage oder DML-Anweisung an die SQL-Engine. Die SQL-Engine führt die Abfrage oder DML-Anweisung aus und gibt das Ergebnis an die PL/SQL-Engine zurück.

Die PL/SQL-Funktionen, die Bulk-SQL umfassen, sind die FORALL-Anweisung und die BULK-COLLECT-Klausel. Die FORALL-Anweisung sendet DML-Anweisungen von PL/SQL zu SQL in Batches und nicht eine nach der anderen. Die BULK COLLECT-Klausel gibt die Ergebnisse von SQL an PL/SQL in Batches und nicht einzeln zurück. Wenn eine Abfrage oder DML-Anweisung vier oder mehr Datenbankzeilen betrifft, kann Bulk-SQL die Leistung erheblich verbessern.

17
Q

Wie kann ich den Typ NUMBER definieren?

A

In PL/SQL können Sie mit der Syntax NUMBER(precision, scale) eine NUMBER-Variable mit Präzision und Skalierung definieren, wobei die Präzision die Gesamtzahl der Ziffern (ganzzahlig und gebrochen) und die Skalierung die Anzahl der Ziffern rechts vom Dezimalpunkt angibt. Dies ist besonders nützlich, wenn Sie mit Dezimalzahlen arbeiten müssen, die eine bestimmte Genauigkeit und Skalierung erfordern.
So können Sie eine NUMBER-Variable mit Präzision und Skalierung deklarieren:

DECLARE
  my_decimal NUMBER(10, 2); -- A NUMBER variable with precision 10 and scale 2
BEGIN
  my_decimal := 12345.67;
  DBMS_OUTPUT.PUT_LINE('My Decimal: ' || my_decimal);
END;

In diesem Beispiel wird die Variable my_decimal als NUMBER mit einer Genauigkeit von 10 und einer Skalierung von 2 deklariert. Das bedeutet, dass sie Zahlen mit bis zu 10 Ziffern (einschließlich ganzer und gebrochener Teile) und bis zu 2 Nachkommastellen speichern kann.
Beachten Sie, dass der tatsächliche Wert, der der Variablen zugewiesen wird, mit der angegebenen Genauigkeit und Skalierung übereinstimmen muss. Wenn Sie versuchen, einen Wert zuzuweisen, der die angegebene Skalierung überschreitet, rundet Oracle den Wert möglicherweise entsprechend ab oder schneidet ihn ab.

18
Q

Was wird auf meinem Bildschirm angezeigt, nachdem ich den folgenden Block ausgeführt habe?

DECLARE
   l_date1   DATE := TO_DATE ('2011-02-28', 'YYYY-MM-DD');
   l_date2   DATE := TO_DATE ('2011-03-28', 'YYYY-MM-DD');
BEGIN
   DBMS_OUTPUT.put_line (ADD_MONTHS (l_date1, 1));
   DBMS_OUTPUT.put_line (ADD_MONTHS (l_date1, -1));
   DBMS_OUTPUT.put_line (ADD_MONTHS (l_date2, 1));
   DBMS_OUTPUT.put_line (ADD_MONTHS (l_date2, -1));
END;
A
31-MAR-11
31-JAN-11
28-APR-11
28-FEB-11

Verwenden Sie ADD_MONTHS, um Ihr Datum um die angegebene Anzahl von Monaten (vorwärts oder rückwärts) zu verschieben. ADD_MONTHS stellt sicher, dass das resultierende Datum gültig ist (denken Sie daran, dass nur weil der ursprüngliche Monat einen 31. Tag hat, dies nicht bedeutet, dass das Datum, das Sie ändern, auch diesen Tag hat).

In diesem Quiz geht es speziell um das Verhalten von ADD_MONTH, wenn Sie ihm ein Datum übergeben, das der letzte Tag des Monats ist.

Der Variablen l_date1 wird der Wert des letzten Tages im Monat Februar 2011 zugewiesen. Das Datum, das durch einen Aufruf von ADD_MONTHS zurückgegeben wird, ist also immer der letzte Tag des resultierenden Monats.

Der Wert, der l_date2 zugewiesen wurde, ist nicht der letzte Tag des Monats, so dass das durch einen Aufruf von ADD_MONTHS zurückgegebene Datum immer den Wert des Tages des Monats hat: 28.