在sql developer中我可以做到
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
这不起作用。
答案 0 :(得分:2)
你可以应用一招:
CREATE VIEW dummy AS
WITH ..
SELECT ..
然后:
DESC dummy
答案 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;
然后你至少会看到列名和数据类型(具体取决于你使用的SQL客户端)
答案 2 :(得分:0)
您可以在不创建视图的情况下执行此操作,其中包含更复杂的内容:
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
。
就像你可以获得更多信息一样,例如大小。