Ich muss die Datenbank abfragen, um die Spaltennamen zu erhalten, nicht mit Daten in der Tabelle zu verwechseln. Wenn ich zum Beispiel eine Tabelle mit dem Namen EVENT_LOG
Habe, die eventID
, eventType
, eventDesc
und eventTime
enthält, dann möchte ich diese Feldnamen aus der Abfrage und nichts anderes abzurufen.
Wie das geht, habe ich gefunden in:
Aber ich muss wissen: wie kann das in Oracle gemacht werden?
Sie können die Tabelle USER_TAB_COLUMNS nach Tabellenspaltenmetadaten abfragen.
SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'MYTABLE'
In SQL Server ...
SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = (SELECT id FROM sysobjects WHERE type = 'V' AND [Name] = 'Your table name')
Typ = 'V' für Ansichten Typ = 'U' für Tabellen
Du kannst das:
describe EVENT_LOG
oder
desc EVENT_LOG
Hinweis: Gilt nur, wenn Sie den Tabellennamen und speziell für Oracle kennen.
Für SQL Server 2008 können wir information_schema.columns verwenden, um Spalteninformationen abzurufen
SELECT *
FROM information_schema.columns
WHERE table_name = 'Table_Name'
ORDER BY ordinal_position
Für SQLite können Sie meines Erachtens Folgendes verwenden:
PRAGMA table_info(table-name);
Erklärung von sqlite.org:
Dieses Pragma gibt eine Zeile für jede Spalte in der genannten Tabelle zurück. Zu den Spalten in der Ergebnismenge gehören der Spaltenname, der Datentyp, ob die Spalte NULL sein kann oder nicht, und der Standardwert für die Spalte. Die Spalte "pk" in der Ergebnismenge ist Null für Spalten, die nicht Teil des Primärschlüssels sind, und ist der Index der Spalte im Primärschlüssel für Spalten, die Teil des Primärschlüssels sind.
Siehe auch: Sqlite.org Pragma Table Info
Diese Informationen werden im ALL_TAB_COLUMNS
Systemtabelle:
SQL> select column_name from all_tab_columns where table_name = 'DUAL';
DUMMY
Oder Sie könnten DESCRIBE
die Tabelle, wenn Sie SQL * PLUS verwenden:
SQL> desc dual
Name Null? Type
----------------------------------------------------- -------- ---------------------- -------------
DUMMY VARCHAR2(1)
Die anderen Antworten beantworten die Frage ausreichend, aber ich dachte, ich würde einige zusätzliche Informationen teilen. Andere beschreiben die Syntax "DESCRIBE table", um die Tabelleninformationen abzurufen. Wenn Sie die Informationen im gleichen Format erhalten möchten, jedoch ohne DESCRIBE zu verwenden, können Sie Folgendes tun:
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';
Wahrscheinlich macht es nicht viel aus, aber ich habe es früher geschrieben und es scheint zu passen.
Verwenden Sie für MySQL
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;
In deinem Fall :
describe EVENT_LOG;
Für SQL Server:
SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = object_id('TABLE_NAME')
Auch dies ist eine der Möglichkeiten, die wir nutzen können
select * from product where 1 != 1
SELECT COLUMN_NAME 'all_columns'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='user';
Für 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'
Dies gibt ein Ergebnis wie das folgende zurück:
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
Dann können Sie die Werte einfach herausziehen
fetch row[0]
Dies ist auch hervorragend für die dynamische Übergabe von Eingaben geeignet, da das REGEXP das '|' für mehrere Eingaben, ist aber auch eine Möglichkeit, Daten getrennt zu halten und einfach zu speichern/an Klassen/Funktionen zu übergeben.
Versuchen Sie aus Sicherheitsgründen, auch Dummy-Daten einzusenden, und vergleichen Sie, was beim Empfang von Fehlern zurückgegeben wurde.
In Oracle gibt es zwei Ansichten, die Spalten beschreiben:
DBA_TAB_COLUMNS beschreibt die Spalten aller Tabellen, Ansichten und Cluster in der Datenbank.
USER_TAB_COLUMNS beschreibt die Spalten der Tabellen, Sichten und
Cluster, die dem aktuellen Benutzer gehören. Diese Ansicht zeigt nicht die
Spalte BESITZER.
Sie können dies auch versuchen, es handelt sich jedoch möglicherweise um mehr Informationen, als Sie benötigen:
sp_columns TABLE_NAME
Die Antwort ist hier: http://php.net/manual/en/function.mysql-list-fields.php Ich würde den folgenden Code in Ihrem Fall verwenden:
$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'
Sie können diese Abfrage ausführen
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;