Regole per i tipi di dati di risultato
I tipi di dati di un risultato sono determinati da regole che vengono applicate agli operandi in un'operazione. Questo argomento spiega quelle regole.
- Colonne corrispondenti in fullselect di operazioni impostate (UNION, INTERSECT e TRANNE)
- Espressioni di risultato di un'espressione CASE e le funzioni scalari DECODE e NVL2
- Argomenti della funzione scalare COALESCE (anche NVL e VALUE)
- Argomenti delle funzioni scalari GREATEST, LEAST, MAX e MIN
- Valori di espressione dell'in elenco di un predicato IN
- Espressioni corrispondenti di una clausola VALUES a più righe
- Valori di espressione per gli elementi in un costruttore di array
- Argomenti di un predicato TRA (tranne se i tipi di dati di tutti gli operandi sono numerici)
- Argomenti per gli intervalli di gruppo di aggregazione nelle specifiche OLAP
Queste regole sono applicate soggette ad altre limitazioni su lunghe stringhe per le varie operazioni.
Seguono le regole che coinvolgono vari tipi di dati. In alcuni casi, una tabella viene utilizzata per mostrare i possibili tipi di dati di risultato. I tipi di dati LONG VARCHAR e LONG VARGRAPHIC continuano ad essere supportati ma sono obsoleti e non consigliati.
CHAR(2) UNION CHAR(4) UNION VARCHAR(3)La prima coppia risulta in un tipo di tipo di CHAR (4). I valori dei risultati hanno sempre 4 bytes. Il tipo di risultato finale è VARCHAR (4). I valori nel risultato dalla prima operazione UNION avranno sempre una lunghezza di 4.Stringhe di caratteri
Un valore stringa di carattere è compatibile con un altro valore stringa di carattere. Le stringhe di caratteri includono i tipi di dati di tipo CHAR, VARCHAR e CLOB.
| Se un operando è ... | E l'altro operando è ... | Il tipo di dati del risultato è ... |
|---|---|---|
| CHAR (x) | CHAR (y) | CHAR (z) dove z = max (x, y) |
| CHAR (x) | VARCHAR (y) | VARCHAR (z) dove z = max (x, y) |
| VARCHAR (x) | CHAR (y) o VARCHAR (y) | VARCHAR (z) dove z = max (x, y) |
| CLOB (x) | CHAR (y), VARCHAR (y) o CLOB (y) | CLOB (z) dove z = max (x, y) |
La code page della stringa di caratteri del risultato sarà ricavata in base alle regole per le conversioni di stringa.
| Se un operando è ... | E l'altro operando è ... | Il tipo di dati del risultato è ... |
|---|---|---|
| CHAR (x OCTETS) con x>63 | CHAR (y CODEUNITS32) | VARCHAR (z CODEUNITS32) dove z = max (x, y) |
| VARCHAR (x OCTETS) con x>8168 | CHAR (y CODEUNITS32) o VARCHAR (y CODEUNITS32) | Errore |
| CLOB (x OCTETS) con x>536870911 | CHAR (y CODEUNITS32), VARCHAR (y CODEUNITS32), o CLOB (y CODEUNITS32) | CLOB (536870911 CODEUNITS32) |
Stringhe grafiche
Un valore stringa grafico è compatibile con un altro valore di stringa grafica. Stringhe grafiche includono i tipi di dati GRAPHIC, VARGRAPHIC e DBCLOB.
| Se un operando è ... | E l'altro operando è ... | Il tipo di dati del risultato è ... |
|---|---|---|
| GRAFICA (x) | GRAFICA (y) | GRAFICA (z) dove z = max (x, y) |
| VARGRAFICO (x) | GRAFICO (y) OR VARGRAFICO (y) | VARGRAPHIC (z) dove z = max (x, y) |
| DBCLOB (x) | GRAPHIC (y), VARGRAPHIC (y) o DBCLOB (y) | DBCLOB (z) dove z = max (x, y) |
La code page della stringa grafica di risultato sarà ricavata in base alle regole per le conversioni di stringa.
| Se un operando è ... | E l'altro operando è ... | Il tipo di dati del risultato è ... |
|---|---|---|
| GRAFICA (x CODEUNITS16) con x>63 | GRAFICA (y CODEUNITS32) | VARGRAPHIC (z CODEUNITS32) dove z = max (x, y) |
| VARGRAPHIC (x CODEUNITS16 ) con x>8168 | GRAPHIC (y CODEUNITS32) o VARGRAPHIC (y CODEUNITS32) | Errore |
| DBCLOB (x CODEUNITS16 ) con x>536870911 | GRAPHIC (y CODEUNITS32), VARGRAPHIC (y CODEUNITS32) o DBCLOB (y CODEUNITS32) | DBCLOB (536870911 CODEUNITS32) |
Stringhe di carattere e grafica in un database Unicode
In un database Unicode, un valore stringa di carattere è compatibile con un valore di stringa grafico.
| Se un operando è ... | E l'altro operando è ... | Il tipo di dati del risultato è ... |
|---|---|---|
| GRAFICA (x) | CHAR (y) o GRAFICO (y) | GRAFICA (z) dove z = max (x, y) |
| VARGRAFICO (x) | CHAR (y) o VARCHAR (y) | VARGRAPHIC (z) dove z = max (x, y) |
| VARCHAR (x) | GRAFICO (y) o VARGRAPHIC | VARGRAPHIC (z) dove z = max (x, y) |
| DBCLOB (x) | CHAR (y) o VARCHAR (y) o CLOB (y) | DBCLOB (z) dove z = max (x, y) |
| CLOB (x) | GRAFICO (y) o VARGRAFICO (y) | DBCLOB (z) dove z = max (x, y) |
| Se un operando è ... | E l'altro operando è ... | Il tipo di dati del risultato è ... |
|---|---|---|
| CHAR (x OCTETS) con x>63 | GRAFICA (y CODEUNITS32) | VARGRAPHIC (z CODEUNITS32) dove z = max (x, y) |
| GRAFICA (x CODEUNITS16) con x>63 | CHAR (y CODEUNITS32) | VARGRAPHIC (z CODEUNITS32) dove z = max (x, y) |
| VARCHAR (x OCTETS) con x>8168 | GRAPHIC (y CODEUNITS32) o VARGRAPHIC (y CODEUNITS32) | Errore |
| VARGRAPHIC (x CODEUNITS16 ) con x>8168 | CHAR (y CODEUNITS32) o VARCHAR (y CODEUNITS32) | Errore |
| CLOB (x OCTETS) con x>536870911 | GRAPHIC (y CODEUNITS32), VARGRAPHIC (y CODEUNITS32), o DBCLOB (y CODEUNITS32) | DBCLOB (536870911 CODEUNITS32) |
| DBCLOB (x CODEUNITS16 ) con x>536870911 | CHAR (y CODEUNITS32), VARCHAR (y CODEUNITS32), o CLOB (y CODEUNITS32) | DBCLOB (536 870 911 CODEUNITS32) |
Stringhe binari
Le stringhe binarie sono compatibili con altre stringhe binarie e stringhe di carattere FOR BIT DATA. Le stringhe binarie includono BINARIO, VARBINARIO e BLOB.
| Se un operando è ... | E l'altro operando è ... | Il tipo di dati del risultato è ... |
|---|---|---|
| binary(x) | BINARY (y) o CHAR (y) PER BIT DATA | BINARIO (z) dove z=max (x, y) |
| VARBINARIO (x) | BINARIO (y), VARBINARIO (y), CHAR (y) PER DATI DI BIT DATA o VARCHAR (y) PER DATI DI | VARBINARIO (z) dove z=max (x, y) |
| VARCHAR (x) PER DATA BIT | BINARIO (y) o VARBINARIO (y) | VARBINARIO (z) dove z=max (x, y) |
| BLOB (x) | BINARIO (y), VARBINARI (y), BLOB (y), CHAR (y) PER DATI DI TIPO o VARCHAR (y) PER BIT DATA | BLOB (z) dove z=max (x, y) |
numerico
Tipi numerici sono compatibili con altri tipi di dati numerici, tipi di dati stringa di carattere (eccetto CLOB), e in un database Unicode, tipi di dati a stringa grafica (tranne DBCLOB). I tipi numerici includono SMALLINT, INTEGER, BIGINT, DECIMALE, REAL, DOUBLE, e DECFLOAT.
| Se un operando è ... | E l'altro operando è ... | Il tipo di dati del risultato è ... |
|---|---|---|
| SMALLINT | SMALLINT | SMALLINT |
| SMALLINT | Stringa | DECFLOAT (34) |
| INTEGER | SMALLINT o INTERO | INTEGER |
| INTEGER | Stringa | DECFLOAT (34) |
| BIGINT | SMALLINT, INTERO o BIGINT | BIGINT |
| BIGINT | Stringa | DECFLOAT (34) |
| DECIMALE (w, x) | SMALLINT | DECIMALE (p, x) dove p = x + max (w-x,5)1 |
| DECIMALE (w, x) | INTEGER | DECIMALE (p, x) dove p = x + max (w-x,11)1 |
| DECIMALE (w, x) | BIGINT | DECIMALE (p, x) dove p = x + max (w-x,19)1 |
| DECIMALE (w, x) | DECIMALE (y, z) | DECIMALE (p, s) dove p = max (x, z) + max (w - x, y - z)1 s = max (x, z) |
| DECIMALE (w, x) | Stringa | DECFLOAT (34) |
| REAL | REAL | REAL |
| REAL | SMALLINT, INTERO, BIGINT o DECIMALE | DOUBLE |
| REAL | Stringa | DECFLOAT (34) |
| DOUBLE | SMALLINT, INTEGER, BIGINT, DECIMALE, REAL o DOUBLE | DOUBLE |
| DOUBLE | Stringa | DECFLOAT (34) |
| DECFLOAT (n) | SMALLINT, INTERO, DECIMALE (<=16,s), REAL o DOUBLE | DECFLOAT (n) |
| DECFLOAT (n) | BIGINT o DECIMALE (>16,s) | DECFLOAT (34) |
| DECFLOAT (n) | DECFLOAT (m) | DECFLOAT (MAX (n, m)) |
| DECFLOAT (n) | Stringa | DECFLOAT (34) |
| 1 La precisione non può superare i 31. | ||
Data e ora
I tipi di dati datetime sono compatibili con altri operandi dello stesso tipo di dati o di qualsiasi espressione di tipo CHAR o VARCHAR che contiene una rappresentazione di stringa valida dello stesso tipo di dati. Inoltre, DATE è compatibile con TIMESTAMP e l'altro operando di una TIMESTAMP può essere la rappresentazione di stringa di una data / ora o di una data. In un database Unicode sono compatibili caratteri e stringhe grafiche che implica che le rappresentazioni di stringa GRAPHIC o VARGRAPHIC di valori datetime siano compatibili con altri operandi datetime.
| Se un operando è ... | E l'altro operando è ... | Il tipo di dati del risultato è ... |
|---|---|---|
| DATA | DATE, CHAR (y) o VARCHAR (y) | DATA |
| ORA | TIME, CHAR (y) o VARCHAR (y) | ORA |
| TIMESTAMP (x) | TIMESTAMP (y) | TIMESTAMP (max (x, y)) |
| TIMESTAMP (x) | DATE, CHAR (y) o VARCHAR (y) | TIMESTAMP (x) |
XML
Un valore XML è compatibile con un altro valore XML. Il tipo di dati del risultato è XML.
Booleano
Un valore booleano è compatibile con i seguenti valori o tipi:
- Un altro valore booleano.
- Tipi di dati interi binari, come SMALLINT, INTEGER e BIGINT.
- Tipi di dati a stringa di carattere, tranne che per CLOB.
- Tipi di dati a stringa grafica, ad eccezione di DBCLOB, in un database Unicode.
Il tipo di dati del risultato è BOOLEAN.
Un valore booleano è compatibile con un altro valore booleano. Il tipo di dati del risultato è BOOLEAN.
Tipi definiti dall'utente
- Tipi distinti
- Un valore di tipo distinto fortemente tipizzato è compatibile solo con un altro valore dello stesso tipo distinto. Il tipo di dati del risultato è il tipo distinto.
Se entrambi gli operandi hanno lo stesso tipo distinto debolmente digitato, il risultato è il tipo distinto. In caso contrario, se qualsiasi operando è un tipo distinto debolmente digitato allora il tipo di dati dell'operando è considerato il tipo di dati di origine e il tipo di dati di risultato è determinato in base alla combinazione di operandi di tipo dati integrati.
- Tipi di dati array
- Un valore di tipo dati array definito dall'utente è compatibile solo con un altro valore dello stesso tipo di dati array definito dall'utente. Il tipo di dati del risultato è il tipo di dati array definito dall'utente.
- Tipi di dati cursore
- Un valore CURSOR è compatibile con un altro valore CURSOR. Il tipo di dati di risultato è CURSOR. Un valore di tipo dati cursore definito dall'utente è compatibile solo con un altro valore dello stesso tipo di dati del cursore definito dall'utente. Il tipo di dati del risultato è il tipo di dati del cursore definito dall'utente.
- Tipi di dati di riga
- Un valore di tipo dati riga definito dall'utente è compatibile solo con un altro valore dello stesso tipo di dati della riga definita dall'utente. Il tipo di dati del risultato è il tipo di dati di riga definito dall'utente.
Tipi di riferimento
Un valore di tipo di riferimento è compatibile con un altro valore dello stesso tipo di riferimento purché i loro tipi di destinazione abbiano un supertipo comune. Il tipo di dati del risultato è un tipo di riferimento avente il supertipo comune come tipo di destinazione. Se tutti gli operandi hanno la tabella di portata identica, il risultato ha quella portata. Altrimenti il risultato è inscopato.
Tipi strutturati
Un valore di tipo strutturato è compatibile con un altro valore dello stesso tipo strutturato purché abbiano un supertipo comune. Il tipo di dati statico della colonna di tipo strutturato risultante è il tipo strutturato che è il supertipo meno comune di entrambe le colonne.
A
/ \
B C
/ \
D E
/ \
F GI tipi strutturati di tipo statico E e F sono compatibili con il tipo statico risultante di B, che è il super tipo meno comune di E e F.Attributo annullabile del risultato
- Per INTERSECT, se entrambi gli operandi non consentono nulli il risultato non consente nulli (l'incrostato non sarebbe mai nullo).
- Per TRANNE, se il primo operando non consente nulli il risultato non consente nulli (il risultato può essere solo valori dal primo operando).