2016-12-20 22 views
0

在SQL Developer中我可以做是否有可能獲得CTE的概述?

desc table 

,並得到

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

是這樣的可能的CTE?例如,如果表中有10列,我會得到所有這些的描述。但是,如果我只想要描述2列。

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

這是行不通的。

回答

2

你可以申請一招:

CREATE VIEW dummy AS 
WITH .. 
SELECT .. 

然後:

DESC dummy 
+0

這是可行的,因爲'DESC'適用於表_and_視圖。 –

+0

@TimBiegeleisen:是的。漂亮,呃? –

+0

我真的離開發帖只有一分鐘,我看到你先進來,因此+1 :-) –

1

不,你不能這樣做。

CTE未存儲在系統目錄中的任何位置。它本質上是一樣的派生表:

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

相同

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

而且你不能describe派生表可能。

您可以做一些遠程類似的唯一方法是從CTE中進行選擇,但是選擇不是行的where條件。

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

那麼你至少會看到列名稱和數據類型

0

你可以做到這一點,而無需創建一個視圖(那取決於你使用的是SQL客戶端上的細節),用的東西有點更復雜:

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

您可以使用DBMS_SQL描述select查詢的列:

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. 

結果必須通過此表來解釋:

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 

因此,它是說,列KEY的類型爲1,這是一個VARCHAR2。 您可以通過相同的方式獲得更多信息,例如大小。

相關問題