it-swarm.com.de

Wie kann ich Spaltennamen aus einer Tabelle in Oracle abrufen?

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?

171
Paxenos

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'
174
baretta

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

67
Eppz

Du kannst das:

describe EVENT_LOG

oder

desc EVENT_LOG

Hinweis: Gilt nur, wenn Sie den Tabellennamen und speziell für Oracle kennen.

38

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  
25
Jom

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

18
shieldstroy

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)
12
Jon Ericson

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.

8
Sasha

Verwenden Sie für MySQL

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;

In deinem Fall :

describe EVENT_LOG;
3
Rohit

Für SQL Server:

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

Auch dies ist eine der Möglichkeiten, die wir nutzen können

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

Für 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'

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.

1
Dbo

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.

1
Renaud Kern

Sie können dies auch versuchen, es handelt sich jedoch möglicherweise um mehr Informationen, als Sie benötigen:

sp_columns TABLE_NAME
1
WEFX

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'];
    }
}
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

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;
0
Etibar Hasanov