我不能使用ORDER BY和DESC, 还有其他方法吗?
答案 0 :(得分:2)
如果您只想要列的列表,可以使用_TAB_COLS
视图和ORDER BY
NULLABLE:
select table_name, column_name, data_type, nullable
from user_tab_cols
where table_name = 'MYTABLE'
order by nullable, column_name;
答案 1 :(得分:1)
你不能使用内置的describe
命令来做到这一点,没有。但您可以构建自己的查询(如here),但在order-by子句中包含可空标志:
select column_name as "Column",
case when nullable = 'N' then 'NOT NULL' end as "Null?",
cast (data_type || case
when data_type in ('VARCHAR2', 'CHAR', 'TIMESTAMP')
then '(' || data_length || ')'
when data_type in ('NUMBER')
and (data_precision is not null or data_scale is not null)
then '(' || data_precision || case
when data_scale > 0 then ',' || data_scale
end || ')'
end as varchar2(30)) as "Type"
from user_tab_columns
where table_name = 'YOUR_TABLE'
order by nullable, column_id;
使用以下代码创建表:
create table t42 (id number primary key, col1 varchar2(10),
col2 number(10,3) not null, col3 date);
该查询会给你:
Column Null? Type
------------------------------ -------- ------------------------------
ID NOT NULL NUMBER
COL2 NOT NULL NUMBER(10,3)
COL1 VARCHAR2(10)
COL3 DATE
如果你要经常使用它,你可以使它成为一个流水线函数,你可以传递一个表名。但是,这不会解决同义词或描述存储的程序。
答案 2 :(得分:0)
为了向您澄清,因为您似乎不清楚这一点:DESC不是SQL命令 - 它由Oracle提供,作为SQL * Plus的一部分或您正在使用的任何Oracle实用程序。这就是没有ORDER BY的原因。它有自己的语法,例如,here。
答案 3 :(得分:-1)
是的,您可以查询all_tab_columns
select *
from ALL_TAB_COLUMNS where nullable = 'N' and table_name = '<TABLE NAME>';