Oracle PL/SQL-Datentypen: Boolescher Wert, Zahl, Datum [Beispiel]

⚡ Intelligente Zusammenfassung

PL/SQL-Datentypen definieren, wie Oracle Speichert, verarbeitet und beschränkt jeden Wert in einem Block. Sie werden in die Familien Zeichen, Zahl, Boolescher Wert, Datum und Large Object (LOB) eingeteilt, jede mit ihrem eigenen Speicherformat, Größenbeschränkungen und Zuweisungsregeln.

  • 🔤 Charakter: CHAR hat eine feste Länge, VARCHAR2 hat eine variable Länge, und NCHAR und NVARCHAR2 verwenden den nationalen Zeichensatz.
  • 🔢 Nummer: NUMBER speichert Festkomma- oder Gleitkommawerte mit einer Genauigkeit von bis zu 38 Stellen.
  • ✅ Boolesch: Enthält den Wert WAHR oder FALSCH und wird hauptsächlich in der bedingten Logik verwendet.
  • 📅 Datum: Speichert Datum und Uhrzeit; standardmäßig wird Mitternacht verwendet, wenn keine Uhrzeit angegeben ist.
  • 🗂️ LOB: BLOB, CLOB, NCLOB und BFILE speichern große unstrukturierte Datenmengen bis zu 128 TB.
  • 💡 Best Practice: Um Speicherplatz zu sparen und zukunftssicher zu sein, sollten Sie VARCHAR2 gegenüber CHAR und LOB gegenüber LONG bevorzugen.
  • 🔗 Umfang: SQL-Typen werden auf Tabellenspalten angewendet; PL/SQL-Typen werden innerhalb von PL/SQL-Blöcken verwendet.

Oracle PL/SQL-Datentypen

Was sind PL/SQL-Datentypen?

Datentypen In PL/SQL wird definiert, wie Daten gespeichert, verarbeitet und behandelt werden. Oracle Während der Speicherung und Verarbeitung werden Datentypen einem bestimmten Speicherformat und Bereichsbeschränkungen zugeordnet. OracleJedem Wert oder jeder Konstante wird ein Datentyp zugewiesen.

Der Hauptunterschied zwischen PL/SQL und SQL Der Unterschied zwischen SQL- und PL/SQL-Datentypen besteht darin, dass SQL-Datentypen auf Tabellenspalten beschränkt sind, während PL/SQL-Datentypen in der gesamten Datenbank verwendet werden. PL/SQL-Blöcke. Mehr dazu später im Tutorial.

Nachfolgend ein Diagramm der verschiedenen Oracle PL/SQL-Datentypen:

Verschiedene Datentypen in PL/SQL
Verschiedene Datentypen in PL/SQL

PL/SQL CHARACTER-Datentyp

Dieser Datentyp speichert alphanumerische Zeichen im Zeichenkettenformat. Die Literalwerte müssen beim Zuweisen zu einem CHARACTER-Datentyp immer in einfache Anführungszeichen eingeschlossen werden.

Dieser Zeichendatentyp wird weiter wie folgt klassifiziert:

  • CHAR-Datentyp (feste Zeichenkettenlänge)
  • VARCHAR2-Datentyp (variable Zeichenkettenlänge)
  • VARCHAR-Datentyp
  • NCHAR (native feste Zeichenfolgengröße)
  • NVARCHAR2 (native variable Zeichenfolgengröße)
  • LANG und LANG ROH
Dateityp Beschreibung Syntax
VERKOHLEN Dieser Datentyp speichert einen Zeichenkettenwert, dessen Größe bei der Deklaration festgelegt wird. Variable.

  • Oracle Die Variable wird mit Leerzeichen aufgefüllt, falls sie nicht die gesamte deklarierte Größe einnimmt. Oracle reserviert den Speicher für die angegebene Größe, auch wenn die Variable ihn nicht vollständig ausfüllt.
  • Die Größenbeschränkung beträgt 1-2000 Byte.
  • CHAR ist überall dort besser geeignet, wo Daten einer festen Größe verarbeitet werden.
grade CHAR;
manager CHAR (10):= 'guru99';

Syntaxerklärung:

  • Die erste Anweisung deklariert die Variable 'grade' vom Datentyp CHAR mit einer maximalen Größe von 1 Byte (Standardwert).
  • Die zweite Anweisung deklariert die Variable 'manager' vom Datentyp CHAR mit einer maximalen Größe von 10 und weist ihr den Wert 'guru99' zu, der 6 Byte groß ist. Oracle In diesem Fall werden 10 Bytes anstatt 6 Bytes zugewiesen.
VARCHAR2 Dieser Datentyp speichert eine Zeichenkette, deren Länge jedoch nicht festgelegt ist.

  • Die Größenbeschränkung beträgt 1-4000 Byte für eine Tabellenspalte und 1-32767 Byte für eine Variable.
  • Die Größe wird für jede Variable bei ihrer Deklaration festgelegt.
  • Oracle Der Speicher wird erst nach der Definition der Variablen reserviert, sodass die tatsächliche Länge der gespeicherten Zeichenkette und nicht die deklarierte Größe verwendet wird.
  • Um die Speichernutzung zu optimieren, ist es immer ratsam, VARCHAR2 anstelle von CHAR zu verwenden.
manager VARCHAR2(10) := 'guru99';

Syntaxerklärung:

  • Die Anweisung deklariert die Variable 'manager' vom Datentyp VARCHAR2 mit einer maximalen Größe von 10 und weist ihr den Wert 'guru99' zu, was 6 Byte entspricht. Oracle Hier werden nur 6 Byte Speicherplatz reserviert.
VARCHAR Dies ist gleichbedeutend mit dem Datentyp VARCHAR2.

  • Um Verhaltensänderungen zu vermeiden, empfiehlt es sich stets, VARCHAR2 anstelle von VARCHAR zu verwenden.
manager VARCHAR(10) := 'guru99';

Syntaxerklärung:

  • Die Anweisung deklariert die Variable 'manager' vom Datentyp VARCHAR mit einer maximalen Größe von 10 und weist ihr den Wert 'guru99', 6 Bytes, zu. Oracle Es werden nur 6 Bytes zugewiesen, ähnlich wie bei VARCHAR2.
NCHAR Dieser Datentyp ist derselbe wie CHAR, aber der Zeichensatz ist der nationale Zeichensatz.

  • Dieser Zeichensatz kann mit NLS_PARAMETERS für die Sitzung definiert werden.
  • Der Zeichensatz kann entweder UTF16 oder UTF8 sein.
  • Die Größenbeschränkung beträgt 1-2000 Byte.
native NCHAR(10);

Syntaxerklärung:

  • Die Anweisung deklariert die Variable 'native' vom Datentyp NCHAR mit einer maximalen Größe von 10.
  • Die Länge hängt von der Anzahl der Bytes pro Zeichen ab, die im Zeichensatz definiert sind.
NVARCHAR2 Dieser Datentyp ist derselbe wie VARCHAR2, aber der Zeichensatz ist der nationale Zeichensatz.

  • Dieser Zeichensatz kann mit NLS_PARAMETERS für die Sitzung definiert werden.
  • Der Zeichensatz kann entweder UTF16 oder UTF8 sein.
  • Die Größenbeschränkung beträgt 1-4000 Byte.
Native_var NVARCHAR2(10):= 'guru99';

Syntaxerklärung:

  • Die Anweisung deklariert die Variable 'Native_var' vom Datentyp NVARCHAR2 mit einer maximalen Größe von 10.
LANG und LANG ROH Dieser Datentyp speichert große Text- oder Rohdatenmengen mit einer maximalen Größe von 2 GB.

  • Diese werden hauptsächlich im Datenwörterbuch verwendet.
  • LONG speichert Zeichensatzdaten, während LONG RAW Daten im Binärformat speichert.
  • LONG RAW akzeptiert Medienobjekte und Bilder, während LONG nur mit Daten arbeitet, die mit einem Zeichensatz gespeichert werden können.
Large_text LONG;
Large_raw LONG RAW;

Syntaxerklärung:

  • Die Anweisung deklariert 'Large_text' vom Datentyp LONG und 'Large_raw' vom Datentyp LONG RAW.

Hinweis: Die Verwendung des Datentyps LONG wird nicht empfohlen von OracleDer Datentyp LOB sollte stattdessen bevorzugt werden.

PL/SQL NUMBER-Datentyp

Dieser Datentyp speichert Festkomma- oder Gleitkommazahlen mit bis zu 38 Nachkommastellen. Er wird für Felder verwendet, die ausschließlich Zahlen enthalten. Die Variable kann mit oder ohne Angabe der Genauigkeit und der Nachkommastellen deklariert werden. Werte müssen bei der Zuweisung nicht in Anführungszeichen gesetzt werden.

A NUMBER(8,2);
B NUMBER(8);
C NUMBER;

Syntaxerklärung:

  • Die erste Deklaration deklariert die Variable 'A' vom Datentyp Zahl mit einer Gesamtgenauigkeit von 8 und 2 Dezimalstellen.
  • Die zweite Angabe deklariert 'B' vom Datentyp Zahl mit einer Gesamtgenauigkeit von 8 und ohne Dezimalstellen.
  • Der dritte Typ ist der allgemeinste und deklariert den Datentyp „C“ für Zahlen ohne Einschränkungen hinsichtlich Genauigkeit oder Dezimalstellen. Er kann bis zu 38 Stellen aufnehmen.

PL/SQL BOOLEAN-Datentyp

Dieser Datentyp speichert logische Werte. Oracle Der Datentyp Boolean repräsentiert entweder WAHR oder FALSCH und wird hauptsächlich in bedingten Anweisungen verwendet. Werte müssen bei der Zuweisung nicht in Anführungszeichen gesetzt werden.

Var1 BOOLEAN;

Syntaxerklärung:

  • Die Variable 'Var1' ist als BOOLEAN-Datentyp deklariert. Die Ausgabe ist je nach der festgelegten Bedingung entweder wahr oder falsch.

PL/SQL-DATE-Datentyp

Dieser Datentyp speichert Werte im Datumsformat (Tag, Monat, Jahr). Variablen vom Typ DATE können auch Zeitinformationen enthalten; standardmäßig wird die Uhrzeit auf 12:00:00 gesetzt, sofern nichts anderes angegeben ist. Werte müssen bei der Zuweisung in Anführungszeichen gesetzt werden.

Die Standard Oracle Das Zeitformat für Ein- und Ausgabe ist 'TT-MON-JJ', das auf Sitzungsebene bei NLS_PARAMETERS (NLS_DATE_FORMAT) festgelegt wird.

newyear DATE:= '01-JAN-2015';
current_date DATE:= SYSDATE;

Syntaxerklärung:

  • Die Variable 'newyear' ist als Datentyp DATE deklariert und ihr wurde der Wert 1. Januar 2015 zugewiesen.
  • Die zweite Deklaration deklariert 'current_date' als DATE-Datentyp und weist ihm das aktuelle Systemdatum zu.
  • Beide Variablen enthalten Zeitinformationen.

PL/SQL LOB-Datentyp

Dieser Datentyp wird hauptsächlich zum Speichern und Bearbeiten großer Blöcke unstrukturierter Daten wie Bilder und Multimediadateien verwendet. Oracle LOB wird gegenüber dem Datentyp LONG bevorzugt, da er flexibler ist. Die Hauptvorteile von LOB gegenüber LONG sind:

  • Eine Tabelle ist auf eine LONG-Spalte beschränkt, während es keine Beschränkung für die Anzahl der LOB-Spalten gibt.
  • Datenschnittstellentools akzeptieren LOB-Spalten während der Replikation, lassen aber LONG-Spalten aus, die manuell repliziert werden müssen.
  • Eine LONG-Spalte speichert bis zu 2 GB, während eine LOB-Spalte bis zu 128 TB speichern kann.
  • Oracle Der LOB-Datentyp wird mit jeder neuen Version verbessert, während LONG weitgehend unverändert bleibt.

Daher ist es stets ratsam, den Datentyp LOB anstelle von LONG zu verwenden. Die verschiedenen unten aufgeführten LOB-Datentypen können bis zu 128 Terabyte speichern:

  1. BLOB
  2. CLOB und NCLOB
  3. BFILE
Dateityp Beschreibung Syntax
BLOB Dieser Datentyp speichert LOB-Daten im Binärdateiformat bis zu einer maximalen Größe von 128 TB. Er speichert keine Daten basierend auf Zeichensatzdetails, sodass er unstrukturierte Daten wie Multimedia-Objekte und Bilder speichern kann.
Binary_data BLOB;

Syntaxerklärung:

  • Die Variable 'Binary_data' ist als BLOB deklariert.
CLOB und NCLOB CLOB speichert LOB-Daten im Zeichensatz, NCLOB hingegen im nativen Zeichensatz. Da diese Speichertypen zeichensatzbasiert sind, können sie keine Daten wie Multimedia oder Bilder speichern. Die maximale Größe beträgt 128 TB.
Charac_data CLOB;

Syntaxerklärung:

  • Die Variable 'Charac_data' ist als CLOB-Datentyp deklariert.
BFILE
  • BFILE speichert unstrukturierte Binärdaten außerhalb der Datenbank als Betriebssystemdatei.
  • Die Größe einer BFILE ist durch das Betriebssystem begrenzt, und die Dateien sind schreibgeschützt und können nicht verändert werden.

Häufig gestellte Fragen

CHAR ist ein Datentyp mit fester Länge und füllt mit Leerzeichen auf die angegebene Größe auf, wodurch bei kurzen Werten Speicherplatz verschwendet wird. VARCHAR2 hingegen ist ein Datentyp mit variabler Länge und speichert nur die tatsächlichen Zeichen, weshalb er für die meisten Zeichenkettenspalten bevorzugt wird.

LOB ermöglicht mehrere Spalten pro Tabelle, speichert bis zu 128 TB und wird mit jeder neuen Version verbessert. LONG ist auf eine Spalte und maximal 2 GB beschränkt und wird hauptsächlich aus Gründen der Abwärtskompatibilität beibehalten.

Nicht in älteren Versionen. BOOLEAN war ein reiner PL/SQL-Datentyp, daher verwendeten Tabellenspalten stattdessen ein NUMBER- oder CHAR-Flag. Er wird direkt innerhalb von Blöcken für bedingte Logik verwendet.

Ja. Durch die Analyse von Stichprobenwerten hinsichtlich Länge, Wertebereich und Format kann die KI VARCHAR2, NUMBER, DATE oder LOB vorschlagen und zu große Spalten kennzeichnen. Die Auswahl sollte anhand zukünftiger Daten bestätigt werden.

Ja. DATE speichert Jahrhundert, Jahr, Monat, Tag, Stunde, Minute und Sekunde. Wird keine Uhrzeit angegeben, wird standardmäßig Mitternacht verwendet. Für Sekundenbruchteile oder Zeitzonen verwenden Sie stattdessen TIMESTAMP.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: