web-dev-qa-db-fra.com

Obtenir le type de données du champ dans l'instruction select dans ORACLE

Puis-je obtenir les types de données de chaque colonne que j'ai sélectionnée au lieu des valeurs, à l'aide d'une instruction select?

PAR EXEMPLE:

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

et le résultat devrait être comme ça

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

ou cela peut être en ligne comme ça, ce n’est pas important:

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

Merci

15
Bushwacka

Vous pouvez interroger la vue all_tab_columns dans la base de données.

SELECT  table_name, column_name, data_type, data_length FROM all_tab_columns where table_name = 'CUSTOMER'
13
abhi

J'ai trouvé un moyen pas très intuitif de faire cela en utilisant DUMP()

SELECT DUMP(A.NAME), 
       DUMP(A.surname), 
       DUMP(B.ordernum) 
FROM   customer A 
       JOIN orders B 
         ON A.id = B.id

Il retournera quelque chose comme:

'Typ=1 Len=2: 0,48' pour chaque colonne.

Type=1 signifie VARCHAR2/NVARCHAR2
Type=2 signifie NUMBER/FLOAT
Type=12 signifie DATE, etc. 

Vous pouvez vous référer à ce document Oracle pour plus d'informations Code de type de données
ou ceci pour un mappage simple Mappages de type de type Oracle

7
Maxwell Cheng

Je suis entré dans la même situation. En guise de solution de contournement, je viens de créer une view (si vous avez des privilèges), de la décrire et de la supprimer plus tard. :)

3
Praveen

Je crée généralement une vue et utilise la commande DESC:

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

Ensuite, la commande DESC montrera le type de chaque champ.

DESC tmp_view

3
Fernando M

Si vous n'avez pas les privilèges pour créer une vue dans Oracle, faites un "piratage" pour utiliser MS Access :-(

Dans MS Access, créez une requête directe avec votre SQL (mais ajoutez la clause where pour ne sélectionner qu'un seul enregistrement), créez une requête de sélection dans la vue (très important), sélectionnez all *, puis créez une table de création à partir de la requête de sélection. Lorsque cela fonctionne, il crée une table avec un enregistrement, tous les types de données doivent "correspondre" à Oracle . I.e. Passthrough -> Choisir -> MakeTable -> Table

Je suis sûr qu'il existe d'autres moyens plus efficaces, mais si vous avez des outils et des privilèges limités, cela fonctionnera.

1
Swamp

De plus, si vous avez Toad for Oracle, vous pouvez surligner la déclaration et appuyer sur CTRL + F9 et vous aurez une belle vue de la colonne et de leurs types de données.

0
Florin Ghita