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 ?
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'
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
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.
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
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
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)
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.
Pour MySQL, utilisez
SELECT column_name
FROM information_schema.columns
WHERE
table_schema = 'Schema' AND table_name = 'Table_Name'
select column_name,* from information_schema.columns
where table_name = 'YourTableName'
order by ordinal_position
describe YOUR_TABLE;
Dans ton cas :
describe EVENT_LOG;
Pour SQL Server:
SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = object_id('TABLE_NAME')
Même ceci est aussi l'une des manières dont nous pouvons l'utiliser
select * from product where 1 != 1
SELECT COLUMN_NAME 'all_columns'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='user';
Pour Oracle
SELECT column_name FROM user_tab_cols WHERE table_name=UPPER('tableName');
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.
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.
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
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'];
}
}
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'
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;