如何自定义/格式化SQL(Oracle)中DESCRIBE命令的输出?
如何自定义/格式化SQL(Oracle)中DESCRIBE命令的输出?
我创建了一个名为BORROW的表,它具有以下属性和相应列的数据类型,如下所示:
SQL> CREATE TABLE BORROW 2 ( 3 LOANNO VARCHAR2(5), 4 CNAME VARCHAR2(20), 5 BNAME VARCHAR2(20), 6 AMOUNT NUMBER(8,2) 7 ); 表已创建。 SQL> DESCRIBE BORROW; 名称 允许为空? 类型 ----------------------------------------- -------- ---------------------------- LOANNO VARCHAR2(5) CNAME VARCHAR2(20) BNAME VARCHAR2(20) AMOUNT NUMBER(8,2)
当我运行DESCRIBE命令时,我希望它显示如下的图片所示:
(https://i.stack.imgur.com/V001t.jpg)
有人知道如何做到这一点吗?
提前感谢 🙂
如何自定义/格式化SQL(Oracle)中DESCRIBE命令的输出?
DESCRIBE是一个SQLPlus命令,不可配置。但是您可以自己查询数据字典,并以您想要的任何方式呈现它。如果您想要一个单一的大小列,您必须进行一些条件逻辑,因为Oracle如何表示“大小”取决于数据类型和您对“大小”的理解(字符长度与存储所需的字节数,数字精度与精度+标度与存储所需的字节数等等)。以下是一个开始的示例:
SELECT column_name field_name, data_type, CASE WHEN (data_type LIKE '%CHAR%') THEN TO_CHAR(char_length) WHEN (data_type LIKE '%NUMBER%') THEN '('||NVL(TO_CHAR(data_precision),'*')||','||NVL(TO_CHAR(data_scale),'*')||')' WHEN (data_type = 'RAW') THEN TO_CHAR(data_length) ELSE NULL END "size" FROM all_tab_columns WHERE table_name = 'BORROW' ORDER BY column_id
这个查询语句将从数据字典中的all_tab_columns表中检索与表名为'BORROW'的表相关的列信息,并按列的顺序进行排序。它使用一些条件逻辑来确定每个列的大小。对于字符类型的列,它使用char_length函数来获取字符的长度。对于数字类型的列,它使用data_precision和data_scale来获取数字的精度和标度,并将它们以'('和')'括起来。对于RAW类型的列,它使用data_length来获取列的长度。对于其他类型的列,它将大小设置为NULL。
通过使用这个查询语句,您可以自定义和格式化DESCRIBE命令的输出,以满足您的需求。您可以根据自己的需要进一步修改查询语句,添加其他条件逻辑或选择要显示的列,以获得更具体的输出。
问题的原因是Oracle SQL中的DESCRIBE命令不能以指定的格式显示字段名、数据类型和大小。然而,可以结合其他SQL命令使用DESCRIBE命令来实现所需的输出。一种方法是查询USER_TAB_COLUMNS视图,该视图包含当前模式中所有表的所有列的信息。
以下是一个可以获得所需输出的查询示例:
SELECT column_name as "FIELDNAME", data_type as "DATATYPE", data_length as "SIZE" FROM user_tab_columns WHERE table_name = 'BORROW';
这样就可以获得所需的输出了!非常感谢帮助!