web-dev-qa-db-fra.com

Comment puis-je obtenir les noms de colonne d'une table dans Oracle?

J'ai besoin d'interroger la base de données pour obtenir les noms de colonnes , à ne pas confondre avec les données de la table. Par exemple, si j’ai une table nommée EVENT_LOG contenant eventID, eventType, eventDesc et eventTime, je voudrais récupérer ces noms de champs. de la requête et rien d'autre.

J'ai trouvé comment faire cela en:

Mais j'ai besoin de savoir: comment cela peut-il être fait dans Oracle ?

171
Paxenos

Vous pouvez interroger la table USER_TAB_COLUMNS pour obtenir des métadonnées de colonne de table.

SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'MYTABLE'
174
baretta

Dans SQL Server ...

SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = (SELECT id FROM sysobjects WHERE type = 'V' AND [Name] = 'Your table name')

Type = 'V' pour les vues Type = 'U' pour les tableaux

67
Eppz

Tu peux le faire:

describe EVENT_LOG

ou

desc EVENT_LOG

Remarque: applicable uniquement si vous connaissez le nom de la table et spécifiquement pour Oracle.

38
Sergey Golovchenko

Pour SQL Server 2008, nous pouvons utiliser information_schema.columns pour obtenir des informations sur les colonnes.

SELECT *
FROM   information_schema.columns
WHERE  table_name = 'Table_Name'
ORDER  BY ordinal_position  
25
Jom

Pour SQLite, je pense que vous pouvez utiliser quelque chose comme ceci:

PRAGMA table_info(table-name);

Explication de sqlite.org:

Ce pragma renvoie une ligne pour chaque colonne de la table nommée. Les colonnes du jeu de résultats incluent le nom de la colonne, le type de données, si la colonne peut être ou non NULL et la valeur par défaut de la colonne. La colonne "pk" dans le jeu de résultats est zéro pour les colonnes qui ne font pas partie de la clé primaire et correspond à l'index de la colonne dans la clé primaire pour les colonnes qui font partie de la clé primaire.

Voir aussi: Sqlite.org Pragma Table Info

18
shieldstroy

Ces informations sont stockées dans la table système ALL_TAB_COLUMNS:

SQL> select column_name from all_tab_columns where table_name = 'DUAL';

DUMMY

Ou vous pouvez DESCRIBE la table si vous utilisez SQL * PLUS:

SQL> desc dual
Name                               Null?    Type
----------------------------------------------------- -------- ---------------------- -------------
DUMMY                               VARCHAR2(1)
12
Jon Ericson

Les autres réponses répondent suffisamment à la question, mais je pensais partager quelques informations supplémentaires. D'autres décrivent la syntaxe "DESCRIBE table" afin d'obtenir les informations sur la table. Si vous souhaitez obtenir les informations dans le même format, mais sans utiliser DESCRIBE, vous pouvez procéder comme suit:

SELECT column_name as COLUMN_NAME, nullable || '       ' as BE_NULL,
  SUBSTR(data_type || '(' || data_length || ')', 0, 10) as TYPE
 FROM all_tab_columns WHERE table_name = 'TABLENAME';

Cela n'a probablement pas beaucoup d'importance, mais je l'ai écrit plus tôt et cela semble correspondre.

8
Sasha

Pour MySQL, utilisez

SELECT column_name 
FROM information_schema.columns 
WHERE 
table_schema = 'Schema' AND table_name = 'Table_Name'
3
ssamuel68
select column_name,* from information_schema.columns
 where table_name = 'YourTableName'
order by ordinal_position
3
user1464296
describe YOUR_TABLE;

Dans ton cas :

describe EVENT_LOG;
3
Rohit

Pour SQL Server:

SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = object_id('TABLE_NAME')
2
bstricks

Même ceci est aussi l'une des manières dont nous pouvons l'utiliser

select * from product where 1 != 1
2
JaiSankarN
SELECT COLUMN_NAME 'all_columns' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='user';
2
expert one

Pour Oracle

SELECT column_name FROM user_tab_cols WHERE table_name=UPPER('tableName');
2
jampez77

Mysql

SHOW COLUMNS FROM a_table_named_users WHERE Field REGEXP 'user_id|user_name|user_pass'

Cela retournera un résultat comme ceci:

Field     |  Type        |   Null   |   Key   |   Default   |   Extra  
user_id      int(8)          NO         PRI       NULL          auto_increment
user_name    varchar(64)     NO         MUL       NULL
user_pass    varchar(64)     NO                   NULL

Ensuite, pour extraire les valeurs, vous pouvez simplement

fetch row[0]

C'est aussi très bien pour passer des entrées de manière dynamique car REGEXP a besoin du '|' pour des entrées multiples, mais est aussi un moyen de garder les données séparées et facile à stocker/passer aux classes/fonctions.

Essayez également d'ajouter des données factices pour plus de sécurité lors de l'envoi et comparez ce qui a été renvoyé lors de la réception des erreurs.

1
Dbo

Dans Oracle, deux vues décrivent les colonnes:

  • DBA_TAB_COLUMNS décrit les colonnes de toutes les tables, vues et clusters de la base de données.

  • USER_TAB_COLUMNS décrit les colonnes des tables, des vues et des
    clusters appartenant à l'utilisateur actuel. Cette vue n'affiche pas le
    Colonne PROPRIÉTAIRE.

1
Renaud Kern

Vous pouvez également essayer ceci, mais il se peut que ce soit plus d'informations que vous n'en avez besoin:

sp_columns TABLE_NAME
1
WEFX

La réponse est ici: http://php.net/manual/en/function.mysql-list-fields.php J'utiliserais le code suivant dans votre cas:

$result = mysql_query("SHOW COLUMNS FROM sometable");
if (!$result) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}
$fields = array();
if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
        $fields[] = $row['Field'];
    }
}
0
user2558588
SELECT A.COLUMN_NAME, A.* FROM all_tab_columns a 
WHERE table_name = 'Your Table Name'
AND A.COLUMN_NAME = 'COLUMN NAME' AND a.owner = 'Schema'
0
Henry

vous pouvez exécuter cette requête

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%%' --if you want to find specific column write here 
ORDER BY schema_name, table_name;
0
Etibar Hasanov