如何自定义/格式化SQL(Oracle)中DESCRIBE命令的输出?

24 浏览
0 Comments

如何自定义/格式化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)

有人知道如何做到这一点吗?

提前感谢 🙂

0
0 Comments

如何自定义/格式化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命令的输出,以满足您的需求。您可以根据自己的需要进一步修改查询语句,添加其他条件逻辑或选择要显示的列,以获得更具体的输出。

0
0 Comments

问题的原因是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';

这样就可以获得所需的输出了!非常感谢帮助!

0