2014-04-09 1 views
11

Posso ottenere tipi di dati per ogni colonna che ho selezionato al posto dei valori, usando un'istruzione select?Ottieni il tipo di dati del campo nell'istruzione select in ORACLE

AD ESEMPIO:

SELECT a.name, a.surname, b.ordernum 
FROM customer a 
JOIN orders b 
ON a.id = b.id 

e risultato dovrebbe essere così

name | NVARCHAR(100) 
surname | NVARCHAR(100) 
ordernum| INTEGER 

oppure può essere in fila come tale, non è importante:

name   | surname  | ordernum 
NVARCHAR(100) | NVARCHAR(100) | INTEGER 

Grazie

+0

usare 'desc nome_tabella' – user3470953

risposta

8

È possibile interrogare il all_tab_columns visualizza nel database.

SELECT table_name, column_name, data_type, data_length FROM all_tab_columns where table_name = 'CUSTOMER' 
+4

Sì, ma questo non funziona per una query come questa: 'SELECT a.name, a.surname, TO_CHAR (b.ordernum) as ordernum_char'. Per questo è necessario utilizzare il pacchetto DBMS_SQL e utilizzare i cursori espliciti. –

+1

@WernfriedDomscheit Un esempio concreto sarebbe il benvenuto. – zeodtr

1

Sono entrato nella stessa situazione. Per ovviare al problema, ho appena creato un view (se disponi di privilegi) e l'ho descritto e rilasciato in seguito. :)

+0

#NiceIdea Questo è ciò di cui avevo bisogno –

3

trovo un modo intuitivo per non farlo utilizzando DUMP()

SELECT DUMP(a.name), DUMP(a.surname), DUMP(b.ordernum)
FROM customer a
JOIN orders b
ON a.id = b.id

tornerà qualcosa come: Typ=1 Len=2: 0,48 per ogni colonna

Type=1 significa VARCHAR2 o NVARCHAR2
Type=2 significa NUMBER/FLOAT
Type=12 significa DATE
and many ..
si può fare riferimento al documento Oracle per questi Datatype Code
anche questo con maggiore dettaglio Oracle Type Code Mappings

0

Io di solito creare una vista e utilizzare il comando "disc" :

CREATE tmp_view as SELECT a.name, a.surname, b.ordernum FROM customer a JOIN orders b ON a.id = b.id

Quindi, il comando "DESC" mostrerà il tipo di ciascun campo.

DESC tmp_view

0

Se non si dispone dei privilegi per creare una vista in Oracle, un "hack" in giro in modo da utilizzare MS Access :-(

In MS Access, creare un passaggio attraverso la query con il tuo sql (ma aggiungi la clausola where per selezionare solo 1 record), crea una query select dalla vista (molto importante), seleziona tutto *, quindi crea una tabella make dalla query select. Quando viene eseguita creerà una tabella con una record, tutti i tipi di dati devono corrispondere all'oracolo. ovvero Passthrough -> Seleziona -> MakeTable -> Tabella

Sono sicuro che ci sono altri modi migliori, ma se disponi di strumenti e privilegi limitati, questo funzionerà.

0

Inoltre, se si dispone di Toad for Oracle, è possibile evidenziare l'istruzione e premere CTRL + F9 e avrete una bella vista di colonna e loro tipi di dati.