2016-12-20 3 views
0

in SQL Entwickler kann ichIst es möglich, einen Überblick über ein CTE zu bekommen?

desc table 

tun und

describe table 
Name     Null Type   
---------------------- ---- ------------- 
DATE_TIME     DATE   
KEY       VARCHAR2(11) 

Ist so etwas möglich mit einem WAK bekommen? Zum Beispiel, wenn es 10 Spalten in der Tabelle gibt, werde ich die Beschreibung von allen bekommen. Aber was, wenn ich die Beschreibung von nur 2 Spalten haben möchte.

with alias as (select col1, col2 from table) desc alias 

Dies funktioniert nicht.

Antwort

2

Sie könnten einen Trick anwenden:

CREATE VIEW dummy AS 
WITH .. 
SELECT .. 

Und dann:

DESC dummy 
+0

Dies funktioniert, weil 'DESC' mit Tabellen _and_ Ansichten arbeitet. –

+0

@TimBiegeleisen: Ja. Geschickt, was? –

+0

Ich war buchstäblich eine Minute vom Posting entfernt und sah dich zuerst kommen, also +1 zu dir :-) –

1

Nein, Sie kann das nicht tun.

Ein CTE wird nicht in den Systemkatalogen gespeichert. Es ist im Wesentlichen die gleiche wie eine abgeleitete Tabelle:

with alias as (select col1, col2 from table) 
select * from alias 

ist die gleiche wie

select * 
from (select col1, col2 from table) alias 

Und Sie können nicht describe die Tabelle entweder abgeleitet.

Die einzige Möglichkeit, etwas Entferntes Ähnliches zu tun, besteht darin, aus dem CTE eine where Bedingung auszuwählen, die keine Zeilen auswählt.

with alias as (select col1, col2 from table) 
select * from alias 
where 0 = 42; 

Dann würden Sie zumindest sehen die Spaltennamen und Datentypen (die Einzelheiten, die auf dem SQL-Client ab, die Sie verwenden)

0

Sie dies, ohne eine Ansicht tun können, mit etwas ein bisschen Je komplizierter:

create table yourTable(
DATE_TIME     DATE,   
KEY       VARCHAR2(11) 
); 

Sie DBMS_SQL können die Spalten einer select Abfrage beschreiben:

SQL> DECLARE 
    2 l_Cursor  INTEGER DEFAULT dbms_sql.open_cursor; 
    3 l_Stmt   VARCHAR2(4000); 
    4 l_colCnt  NUMBER DEFAULT 0; 
    5 l_descTbl  dbms_sql.desc_tab; 
    6 BEGIN 
    7 dbms_sql.parse(l_Cursor, 'SELECT key FROM yourTable', dbms_sql.native); 
    8 dbms_sql.describe_columns(l_Cursor, l_colCnt, l_descTbl); 
    9 -- 
10 FOR i IN 1..l_colCnt LOOP 
11  dbms_output.put_line('Column '||l_descTbl(i).col_name || ' - type '||l_descTbl(i).col_type); 
12 END LOOP; 
13 -- 
14 dbms_sql.close_cursor(l_Cursor); 
15 END; 
16/
Column KEY - type 1 

PL/SQL procedure successfully completed. 

Das Ergebnis muss nach dieser Tabelle interpretiert werden:

Datatype Number 
VARCHAR2 1 
NVARCHAR2 1 
NUMBER  2 
INTEGER  2 
LONG  8 
ROWID  11 
DATE  12 
RAW   23 
LONG RAW 24 
CHAR  96 
NCHAR  96 
MLSLABEL 106 

Also, es zu sagen, dass die Spalte KEY1 geben hat, ist, dass ein VARCHAR2. So können Sie mehr Informationen haben, zum Beispiel über die Größe.

Verwandte Themen