PL / SQL - Tipi di dati

In questo capitolo, discuteremo i tipi di dati in PL / SQL. Le variabili PL / SQL, le costanti ei parametri devono avere un tipo di dati valido, che specifica un formato di archiviazione, vincoli e un intervallo di valori valido. Ci concentreremo sulSCALAR e il LOBtipi di dati in questo capitolo. Gli altri due tipi di dati verranno trattati in altri capitoli.

S.No Categoria e descrizione
1

Scalar

Valori singoli senza componenti interni, come a NUMBER, DATE, o BOOLEAN.

2

Large Object (LOB)

Puntatori a oggetti di grandi dimensioni che vengono memorizzati separatamente da altri elementi di dati, come testo, immagini grafiche, clip video e forme d'onda audio.

3

Composite

Elementi di dati che hanno componenti interni a cui è possibile accedere individualmente. Ad esempio, raccolte e record.

4

Reference

Puntatori ad altri elementi di dati.

Tipi e sottotipi di dati scalari PL / SQL

I tipi e i sottotipi di dati scalari PL / SQL rientrano nelle seguenti categorie:

S.No Tipo di data e descrizione
1

Numeric

Valori numerici su cui vengono eseguite le operazioni aritmetiche.

2

Character

Valori alfanumerici che rappresentano singoli caratteri o stringhe di caratteri.

3

Boolean

Valori logici su cui vengono eseguite le operazioni logiche.

4

Datetime

Date e orari.

PL / SQL fornisce sottotipi di tipi di dati. Ad esempio, il tipo di dati NUMBER ha un sottotipo chiamato INTEGER. È possibile utilizzare i sottotipi nel programma PL / SQL per rendere i tipi di dati compatibili con i tipi di dati in altri programmi incorporando il codice PL / SQL in un altro programma, come un programma Java.

Tipi di dati numerici PL / SQL e sottotipi

La tabella seguente elenca i tipi di dati numerici predefiniti PL / SQL e i loro sottotipi -

S.No Tipo di dati e descrizione
1

PLS_INTEGER

Numero intero con segno compreso tra -2.147.483.648 e 2.147.483.647, rappresentato in 32 bit

2

BINARY_INTEGER

Numero intero con segno compreso tra -2.147.483.648 e 2.147.483.647, rappresentato in 32 bit

3

BINARY_FLOAT

Numero a virgola mobile in formato IEEE 754 a precisione singola

4

BINARY_DOUBLE

Numero a virgola mobile in formato IEEE 754 a precisione doppia

5

NUMBER(prec, scale)

Numero a virgola fissa o virgola mobile con valore assoluto compreso tra 1E-130 e 1.0E126 (ma non incluso). Una variabile NUMBER può anche rappresentare 0

6

DEC(prec, scale)

Tipo a virgola fissa specifico ANSI con massima precisione di 38 cifre decimali

7

DECIMAL(prec, scale)

Tipo di virgola fissa specifico IBM con massima precisione di 38 cifre decimali

8

NUMERIC(pre, secale)

Tipo mobile con massima precisione di 38 cifre decimali

9

DOUBLE PRECISION

Tipo a virgola mobile specifico ANSI con massima precisione di 126 cifre binarie (circa 38 cifre decimali)

10

FLOAT

Tipo a virgola mobile specifico ANSI e IBM con massima precisione di 126 cifre binarie (circa 38 cifre decimali)

11

INT

Tipo intero specifico ANSI con massima precisione di 38 cifre decimali

12

INTEGER

Tipo intero specifico ANSI e IBM con massima precisione di 38 cifre decimali

13

SMALLINT

Tipo intero specifico ANSI e IBM con massima precisione di 38 cifre decimali

14

REAL

Tipo a virgola mobile con massima precisione di 63 cifre binarie (circa 18 cifre decimali)

Di seguito è una dichiarazione valida -

DECLARE 
   num1 INTEGER; 
   num2 REAL; 
   num3 DOUBLE PRECISION; 
BEGIN 
   null; 
END; 
/

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

PL/SQL procedure successfully completed

Tipi di dati e sottotipi di caratteri PL / SQL

Di seguito è riportato il dettaglio dei tipi di dati carattere predefiniti PL / SQL e dei loro sottotipi:

S.No Tipo di dati e descrizione
1

CHAR

Stringa di caratteri a lunghezza fissa con dimensione massima di 32.767 byte

2

VARCHAR2

Stringa di caratteri a lunghezza variabile con dimensione massima di 32.767 byte

3

RAW

Stringa binaria o byte a lunghezza variabile con dimensione massima di 32.767 byte, non interpretata da PL / SQL

4

NCHAR

Stringa di caratteri nazionali a lunghezza fissa con dimensione massima di 32.767 byte

5

NVARCHAR2

Stringa di caratteri nazionali a lunghezza variabile con dimensione massima di 32.767 byte

6

LONG

Stringa di caratteri a lunghezza variabile con dimensione massima di 32.760 byte

7

LONG RAW

Stringa binaria o byte di lunghezza variabile con dimensione massima di 32.760 byte, non interpretata da PL / SQL

8

ROWID

Identificatore di riga fisico, l'indirizzo di una riga in una tabella ordinaria

9

UROWID

Identificatore di riga universale (identificatore di riga fisico, logico o esterno)

Tipi di dati booleani PL / SQL

Il BOOLEANil tipo di dati memorizza i valori logici utilizzati nelle operazioni logiche. I valori logici sono i valori booleaniTRUE e FALSE e il valore NULL.

Tuttavia, SQL non ha un tipo di dati equivalente a BOOLEAN. Pertanto, i valori booleani non possono essere utilizzati in -

  • Dichiarazioni SQL
  • Funzioni SQL integrate (come TO_CHAR)
  • Funzioni PL / SQL richiamate da istruzioni SQL

PL / SQL Datetime e tipi di intervallo

Il DATEdatatype viene utilizzato per memorizzare datetimes a lunghezza fissa, che includono l'ora del giorno in secondi dalla mezzanotte. Le date valide vanno dal 1 gennaio 4712 a.C. al 31 dicembre 9999 d.C.

Il formato della data predefinito è impostato dal parametro di inizializzazione Oracle NLS_DATE_FORMAT. Ad esempio, il valore predefinito potrebbe essere "GG-LUN-AA", che include un numero di due cifre per il giorno del mese, un'abbreviazione del nome del mese e le ultime due cifre dell'anno. Ad esempio, 01-OCT-12.

Ogni DATE include il secolo, l'anno, il mese, il giorno, l'ora, i minuti e i secondi. La tabella seguente mostra i valori validi per ogni campo:

Nome campo Valori data / ora validi Valori di intervallo validi
ANNO Da -4712 a 9999 (escluso anno 0) Qualsiasi numero intero diverso da zero
MESE Da 01 a 12 Da 0 a 11
GIORNO Da 01 a 31 (limitato dai valori di MONTH e YEAR, secondo le regole del calendario per il locale) Qualsiasi numero intero diverso da zero
ORA Da 00 a 23 Da 0 a 23
MINUTO Da 00 a 59 Da 0 a 59
SECONDO Da 00 a 59,9 (n), dove 9 (n) è la precisione del tempo frazionario dei secondi Da 0 a 59,9 (n), dove 9 (n) è la precisione dei secondi frazionari dell'intervallo
TIMEZONE_HOUR Da -12 a 14 (la gamma si adatta alle modifiche dell'ora legale) Non applicabile
TIMEZONE_MINUTE Da 00 a 59 Non applicabile
TIMEZONE_REGION Trovato nella visualizzazione dinamica delle prestazioni V $ TIMEZONE_NAMES Non applicabile
TIMEZONE_ABBR Trovato nella visualizzazione dinamica delle prestazioni V $ TIMEZONE_NAMES Non applicabile

Tipi di dati PL / SQL Large Object (LOB)

I tipi di dati LOB (Large Object) si riferiscono a elementi di dati di grandi dimensioni come testo, immagini grafiche, clip video e forme d'onda audio. I tipi di dati LOB consentono un accesso efficiente, casuale e a tratti a questi dati. Di seguito sono riportati i tipi di dati LOB PL / SQL predefiniti:

Tipo di dati Descrizione Taglia
BFILE Utilizzato per memorizzare oggetti binari di grandi dimensioni nei file del sistema operativo all'esterno del database. Dipendente dal sistema. Non può superare i 4 gigabyte (GB).
BLOB Utilizzato per memorizzare oggetti binari di grandi dimensioni nel database. Da 8 a 128 terabyte (TB)
CLOB Utilizzato per memorizzare grandi blocchi di dati di caratteri nel database. Da 8 a 128 TB
NCLOB Utilizzato per memorizzare grandi blocchi di dati NCHAR nel database. Da 8 a 128 TB

Sottotipi PL / SQL definiti dall'utente

Un sottotipo è un sottoinsieme di un altro tipo di dati, denominato tipo di base. Un sottotipo ha le stesse operazioni valide del suo tipo di base, ma solo un sottoinsieme dei suoi valori validi.

PL / SQL predefinisce diversi sottotipi nel pacchetto STANDARD. Ad esempio, PL / SQL predefinisce i sottotipiCHARACTER e INTEGER come segue -

SUBTYPE CHARACTER IS CHAR; 
SUBTYPE INTEGER IS NUMBER(38,0);

Puoi definire e utilizzare i tuoi sottotipi. Il seguente programma illustra la definizione e l'utilizzo di un sottotipo definito dall'utente:

DECLARE 
   SUBTYPE name IS char(20); 
   SUBTYPE message IS varchar2(100); 
   salutation name; 
   greetings message; 
BEGIN 
   salutation := 'Reader '; 
   greetings := 'Welcome to the World of PL/SQL'; 
   dbms_output.put_line('Hello ' || salutation || greetings); 
END; 
/

Quando il codice precedente viene eseguito al prompt SQL, produce il seguente risultato:

Hello Reader Welcome to the World of PL/SQL 
 
PL/SQL procedure successfully completed.

NULL in PL / SQL

I valori NULL PL / SQL rappresentano missing o unknown datae non sono un numero intero, un carattere o qualsiasi altro tipo di dati specifico. Nota cheNULL non è la stessa di una stringa di dati vuota o del valore del carattere null '\0'. Un null può essere assegnato ma non può essere equiparato a nulla, incluso se stesso.