[Sql] Wie kann ich Spaltennamen aus einer Tabelle in Oracle abrufen?


Answers

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

Question

Ich muss die Datenbank abfragen, um die Spaltennamen zu erhalten, die nicht mit Daten in der Tabelle verwechselt werden dürfen. Wenn ich beispielsweise eine Tabelle mit dem Namen EVENT_LOG , die eventID , eventType , eventDesc und eventTime enthält, eventType ich diese Feldnamen aus der Abfrage abrufen und sonst nichts.

Ich habe herausgefunden, wie man das macht in:

Aber ich muss wissen: Wie kann dies in Oracle getan werden?




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, Ansichten und
    Cluster, die dem aktuellen Benutzer gehören. Diese Ansicht zeigt nicht die
    EIGENTÜMER-Spalte.




Abfrage, um Spaltendetails in SQL 2008 auszuwählen

DECLARE @tableName varchar(20)='item'
SELECT UPPER(COLUMN_NAME)columnname
,DATA_TYPE+(CASE DATA_TYPE WHEN 'numeric' THEN '('+CAST(NUMERIC_PRECISION AS varchar)+','+CAST(NUMERIC_PRECISION_RADIX AS varchar)+')'
                WHEN 'varchar' THEN '('+CAST(CHARACTER_MAXIMUM_LENGTH AS varchar)+')'
                ELSE ''  END)
,'DECLARE @'+COLUMN_NAME+' '+DATA_TYPE+(CASE DATA_TYPE WHEN 'numeric' THEN '('+CAST(NUMERIC_PRECISION AS varchar)+','+CAST(NUMERIC_PRECISION_RADIX AS varchar)+')'
                WHEN 'varchar' THEN '('+CAST(CHARACTER_MAXIMUM_LENGTH AS varchar)+')'
                ELSE ''  END) Declaration
,'@'+ UPPER(COLUMN_NAME)+' '+DATA_TYPE+(CASE DATA_TYPE WHEN 'numeric' THEN '('+CAST(NUMERIC_PRECISION AS varchar)+','+CAST(NUMERIC_PRECISION_RADIX AS varchar)+')'
                WHEN 'varchar' THEN '('+CAST(CHARACTER_MAXIMUM_LENGTH AS varchar)+')'
                ELSE ''  END)+',' XMLDeclare
,'@'+COLUMN_NAME+',' Assign
,COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_PRECISION_RADIX



describe YOUR_TABLE;

In Ihrem Fall :

describe EVENT_LOG;



SELECT COLUMN_NAME 
FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName'



Mysql

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

Dies ergibt ein Ergebnis in etwa wie folgt:

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 kannst du die Werte einfach rausziehen

fetch row[0]

Dies ist auch ideal, um Eingaben dynamisch zu übergeben, da REGEXP das '|' für mehrere Eingaben, ist aber auch eine Möglichkeit, Daten getrennt zu halten und einfach zu Klassen / Funktionen zu speichern.

Versuchen Sie auch, beim Senden Dummy-Daten einzuwerfen und vergleichen Sie, was bei Fehlern zurückgegeben wurde.




select column_name,* from information_schema.columns
 where table_name = 'YourTableName'
order by ordinal_position



Für SQL Server:

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



Kam über diese Frage nach dem Zugriff auf Spaltennamen auf Teradata, also werde ich die Antwort für ihre 'Geschmack' von SQL hinzufügen:

SELECT ColumnName
FROM DBC.Columns
WHERE DatabaseName='DBASE_NAME'
AND TableName='TABLE_NAME';

Die Info wird in der DBC-Datenbank gespeichert.

Das Einholen von Datentypen ist etwas komplizierter : Holen Sie den Spaltentyp mit Teradata-Systemtabellen




Für SQL Server 2008 können wir information_schema.columns zum Abrufen von Spalteninformationen verwenden

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



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'



SELECT COLUMN_NAME 'all_columns' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='user';



Diese Information wird in der ALL_TAB_COLUMNS gespeichert:

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

DUMMY

Oder Sie könnten die Tabelle DESCRIBE wenn Sie SQL * PLUS verwenden:

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