Oracle PL/SQL-datatyper: Boolean, tal, dato [eksempel]

โšก Smart opsummering

PL/SQL-datatyper definerer, hvordan Oracle lagrer, hรฅndterer og begrรฆnser hver vรฆrdi i en blok. De grupperes i tegn-, tal-, booleske-, dato- og store objektfamilier (LOB), hver med sit eget lagringsformat, stรธrrelsesgrรฆnser og tildelingsregler.

  • ๐Ÿ”ค Karakter: CHAR har fast lรฆngde, VARCHAR2 har variabel lรฆngde, og NCHAR og NVARCHAR2 bruger det nationale tegnsรฆt.
  • ๐Ÿ”ข Antal: NUMMER gemmer faste eller flydende kommavรฆrdier med en prรฆcision pรฅ op til 38 cifre.
  • โœ… Boolean: Har SAND eller FALSK og bruges primรฆrt i betinget logik.
  • ๐Ÿ“… Dato: Gemmer dato og klokkeslรฆt, og standardindstillingen er midnat, nรฅr der ikke er angivet noget klokkeslรฆt.
  • ๐Ÿ—‚๏ธ LOB: BLOB, CLOB, NCLOB og BFILE lagrer store ustrukturerede data pรฅ op til 128 TB.
  • ๐Ÿ’ก Bedste praksis: Foretrรฆk VARCHAR2 frem for CHAR og LOB frem for LONG for at spare hukommelse og forblive fremtidssikret.
  • ๐Ÿ”— Anvendelsesomrรฅde: SQL-typer gรฆlder for tabelkolonner; PL/SQL-typer bruges inde i PL/SQL-blokke.

Oracle PL/SQL-datatyper

Hvad er PL/SQL-datatyper?

Datatyper I PL/SQL defineres hvordan data skal lagres, hรฅndteres og behandles af Oracle under lagring og behandling. Datatyper er knyttet til et specifikt lagringsformat og omrรฅdebegrรฆnsninger. Oracle, tildeles hver vรฆrdi eller konstant en datatype.

Den stรธrste forskel mellem PL/SQL og SQL datatyper er, at SQL-datatyper er begrรฆnset til tabelkolonner, mens PL/SQL-datatyper bruges i PL/SQL blokke. Mere om dette senere i selvstudiet.

Fรธlgende er et diagram over de forskellige Oracle PL/SQL-datatyper:

Forskellige datatyper i PL/SQL
Forskellige datatyper i PL/SQL

PL/SQL KARAKTER Datatype

Denne datatype gemmer alfanumeriske tegn i strengformat. Literalvรฆrdierne skal altid omsluttes af enkelte anfรธrselstegn, nรฅr de tildeles en CHARACTER-datatype.

Denne karakterdatatype er yderligere klassificeret som fรธlger:

  • CHAR-datatype (fast strengstรธrrelse)
  • VARCHAR2 datatype (variabel strengstรธrrelse)
  • VARCHAR-datatype
  • NCHAR (native fast streng stรธrrelse)
  • NVARCHAR2 (native variabel strengstรธrrelse)
  • LANG og LANG Rร…
Datatype Beskrivelse Syntaks
CHAR Denne datatype gemmer en strengvรฆrdi, og strengens stรธrrelse er fast pรฅ tidspunktet for deklarationen. variabel.

  • Oracle blank-fylder variablen, hvis den ikke optager hele den deklarerede stรธrrelse, sรฅ Oracle allokerer hukommelsen til den deklarerede stรธrrelse, selvom variablen ikke udfylder den.
  • Stรธrrelsesbegrรฆnsningen er 1-2000 bytes.
  • CHAR er mere passende, hvor der hรฅndteres data med en fast stรธrrelse.
grade CHAR;
manager CHAR (10):= 'guru99';

Syntaks forklaring:

  • Den fรธrste sรฆtning deklarerer variablen 'grade' af CHAR-datatypen med en maksimal stรธrrelse pรฅ 1 byte (standardvรฆrdi).
  • Den anden sรฆtning deklarerer variablen 'manager' af CHAR-datatypen med en maksimal stรธrrelse pรฅ 10 og tildeler vรฆrdien 'guru99', som er 6 bytes. Oracle allokerer 10 bytes i stedet for 6 i dette tilfรฆlde.
VARCHAR2 Denne datatype gemmer en streng, men lรฆngden er ikke fast.

  • Stรธrrelsesbegrรฆnsningen er 1-4000 bytes for en tabelkolonne og 1-32767 bytes for en variabel.
  • Stรธrrelsen defineres for hver variabel ved deklarationen.
  • Oracle allokerer kun hukommelse efter variablen er defineret, sรฅ den bruger den faktiske lรฆngde af den gemte streng i stedet for den deklarerede stรธrrelse.
  • Det er altid en god idรฉ at bruge VARCHAR2 i stedet for CHAR for at optimere hukommelsesudnyttelsen.
manager VARCHAR2(10) := 'guru99';

Syntaks forklaring:

  • Sรฆtningen deklarerer variablen 'manager' af VARCHAR2-datatypen med en maksimal stรธrrelse pรฅ 10 og tildeler 'guru99', som er 6 bytes. Oracle allokerer kun hukommelse pรฅ 6 bytes her.
VARCHAR Dette er synonymt med VARCHAR2-datatypen.

  • Det er altid god praksis at bruge VARCHAR2 i stedet for VARCHAR for at undgรฅ adfรฆrdsรฆndringer.
manager VARCHAR(10) := 'guru99';

Syntaks forklaring:

  • Sรฆtningen deklarerer variablen 'manager' af VARCHAR-datatypen med en maksimal stรธrrelse pรฅ 10 og tildeler 'guru99', 6 bytes. Oracle allokerer kun 6 bytes, svarende til VARCHAR2.
NCHAR Denne datatype er den samme som CHAR, men tegnsรฆttet er det nationale tegnsรฆt.

  • Dette tegnsรฆt kan defineres for sessionen ved hjรฆlp af NLS_PARAMETERS.
  • Tegnsรฆttet kan enten vรฆre UTF16 eller UTF8.
  • Stรธrrelsesbegrรฆnsningen er 1-2000 bytes.
native NCHAR(10);

Syntaks forklaring:

  • Sรฆtningen erklรฆrer variablen 'native' af NCHAR-datatypen med en maksimal stรธrrelse pรฅ 10.
  • Lรฆngden afhรฆnger af antallet af bytes pr. tegn, der er defineret i tegnsรฆttet.
NVARCHAR2 Denne datatype er den samme som VARCHAR2, men tegnsรฆttet er det nationale tegnsรฆt.

  • Dette tegnsรฆt kan defineres for sessionen ved hjรฆlp af NLS_PARAMETERS.
  • Tegnsรฆttet kan enten vรฆre UTF16 eller UTF8.
  • Stรธrrelsesbegrรฆnsningen er 1-4000 bytes.
Native_var NVARCHAR2(10):= 'guru99';

Syntaks forklaring:

  • Sรฆtningen deklarerer variablen 'Native_var' af NVARCHAR2-datatypen med en maksimal stรธrrelse pรฅ 10.
LANG og LANG Rร… Denne datatype lagrer stor tekst eller rรฅdata pรฅ op til en maksimal stรธrrelse pรฅ 2 GB.

  • Disse bruges hovedsageligt i dataordbogen.
  • LONG gemmer tegnsรฆtdata, mens LONG RAW gemmer data i binรฆrt format.
  • LONG RAW accepterer medieobjekter og billeder, hvorimod LONG kun fungerer pรฅ data, der kan gemmes ved hjรฆlp af et tegnsรฆt.
Large_text LONG;
Large_raw LONG RAW;

Syntaks forklaring:

  • Sรฆtningen erklรฆrer 'Large_text' af datatypen LONG og 'Large_raw' af datatypen LONG RAW.

Bemรฆrk: Brug af datatypen LONG anbefales ikke af OracleLOB-datatypen bรธr foretrรฆkkes i stedet.

PL/SQL NUMMER Datatype

Denne datatype gemmer faste eller flydende tal med en prรฆcision pรฅ op til 38 cifre. Den bruges til at arbejde med felter, der kun indeholder taldata. Variablen kan deklareres enten med prรฆcision og decimaldata eller uden dem. Vรฆrdier behรธver ikke at vรฆre omsluttet af anfรธrselstegn, nรฅr de tildeles.

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

Syntaks forklaring:

  • Den fรธrste deklaration deklarerer variablen 'A' af datatypen tal med en samlet prรฆcision pรฅ 8 og 2 decimaler.
  • Den anden erklรฆrer 'B' af taldatatypen med total prรฆcision 8 og ingen decimalcifre.
  • Den tredje er den mest generiske, idet den deklarerer 'C' af taldatatypen uden begrรฆnsning pรฅ prรฆcision eller decimaler. Den kan tage op til 38 cifre.

PL/SQL BOOLEAN Datatype

Denne datatype gemmer logiske vรฆrdier. Oracle Booleske datatyper reprรฆsenterer enten SAND eller FALSK og bruges primรฆrt i betingede sรฆtninger. Vรฆrdier behรธver ikke at vรฆre omsluttet af anfรธrselstegn, nรฅr de tildeles.

Var1 BOOLEAN;

Syntaks forklaring:

  • Variablen 'Var1' erklรฆres som en BOOLEAN-datatype. Outputtet vil enten vรฆre sandt eller falsk baseret pรฅ den angivne betingelse.

PL/SQL DATO Datatype

Denne datatype gemmer vรฆrdier i datoformat, som dato, mรฅned og รฅr. Nรฅr en variabel defineres med datatypen DATE, kan den indeholde tidsoplysninger; som standard er tiden indstillet til 12:00:00, hvis den ikke er angivet. Vรฆrdier skal omsluttes af anfรธrselstegn, nรฅr de tildeles.

Standarden Oracle Tidsformatet for input og output er 'DD-MON-YY', som er indstillet til NLS_PARAMETERS (NLS_DATE_FORMAT) pรฅ sessionsniveau.

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

Syntaks forklaring:

  • Variablen 'nyรฅr' erklรฆres som datatypen DATE og tildeles vรฆrdien 1. januar 2015.
  • Den anden deklaration erklรฆrer 'current_date' som DATE-datatypen og tildeler den aktuelle systemdato.
  • Begge variabler indeholder tidsinformation.

PL/SQL LOB-datatype

Denne datatype bruges primรฆrt til at gemme og manipulere store blokke af ustruktureret data sรฅsom billeder og multimediefiler. Oracle foretrรฆkker LOB frem for LONG-datatypen, fordi den er mere fleksibel. De vigtigste fordele ved LOB frem for LONG er:

  • En tabel er begrรฆnset til รฉn LONG kolonne, hvorimod der ikke er nogen begrรฆnsning pรฅ antallet af LOB-kolonner.
  • Datagrรฆnsefladevรฆrktรธjer accepterer LOB under replikering, men udelader LONG-kolonner, som skal replikeres manuelt.
  • En LONG-kolonne kan lagre op til 2 GB, hvorimod en LOB kan lagre op til 128 TB.
  • Oracle LOB-datatypen forbedres fortsat med hver udgivelse, hvorimod LONG stort set forbliver uรฆndret.

Sรฅ det er altid en god idรฉ at bruge LOB-datatypen i stedet for LONG. De forskellige LOB-datatyper nedenfor kan lagre op til 128 terabyte:

  1. Blob
  2. CLOB og NCLOB
  3. BFIL
Datatype Beskrivelse Syntaks
Blob Denne datatype lagrer LOB-data i binรฆrt filformat pรฅ op til maksimalt 128 TB. Den lagrer ikke data baseret pรฅ tegnsรฆtdetaljer, sรฅ den kan lagre ustrukturerede data sรฅsom multimedieobjekter og billeder.
Binary_data BLOB;

Syntaks forklaring:

  • Variablen 'Binary_data' erklรฆres som en BLOB.
CLOB og NCLOB CLOB gemmer LOB-data i tegnsรฆttet, hvorimod NCLOB gemmer data i det oprindelige tegnsรฆt. Da disse bruger tegnsรฆtbaseret lagring, kan de ikke gemme data som multimedier eller billeder. Den maksimale stรธrrelse er 128 TB.
Charac_data CLOB;

Syntaks forklaring:

  • Variablen 'Charac_data' erklรฆres som CLOB-datatypen.
BFIL
  • BFILE gemmer ustrukturerede binรฆre data uden for databasen som en operativsystemfil.
  • Stรธrrelsen pรฅ en BFILE er begrรฆnset af operativsystemet, og filerne er skrivebeskyttede og kan ikke รฆndres.

Ofte Stillede Spรธrgsmรฅl

CHAR har en fast lรฆngde og udfylder blanke vรฆrdier til den deklarerede stรธrrelse, hvilket spilder plads pรฅ korte vรฆrdier. VARCHAR2 har en variabel lรฆngde og gemmer kun de faktiske tegn, sรฅ den foretrรฆkkes til de fleste strengkolonner.

LOB tillader mange kolonner pr. tabel, lagrer op til 128 TB og forbedrer lรธbende hver udgivelse. LONG er begrรฆnset til รฉn kolonne, har en grรฆnse pรฅ 2 GB og bevares primรฆrt af hensyn til bagudkompatibilitet.

Ikke i รฆldre versioner. BOOLEAN var en type kun til PL/SQL, sรฅ tabelkolonner brugte i stedet et NUMBER- eller CHAR-flag. Det bruges direkte inde i blokke til betinget logik.

Ja. Ved at profilere eksempelvรฆrdier for lรฆngde, omrรฅde og format kan AI foreslรฅ VARCHAR2, NUMBER, DATE eller en LOB og markere kolonner, der er for store. Bekrรฆft valget mod fremtidige data.

Ja. DATE gemmer รฅrhundrede, รฅr, mรฅned, dag, time, minut og sekund. Hvis der ikke er angivet noget tidspunkt, er standardvรฆrdien midnat. Brug TIMESTAMP i stedet for at bruge brรธkdele af sekunder eller tidszoner.

Opsummer dette indlรฆg med: