DESC —— SQL语句 —— 详解

DESC —— SQL语句 —— 详解

书接上回《SQL语句where in查询括号中的字段加不加单引号''?》

提到了一种通过DESC来查询字段数据类型的方法,那么DESC运行出来结果示例究竟是怎样的,怎么能够做到呢?

首先,如何记忆?

很简单,DESC —— 即DESCRIBE的意思。顾名思义,描述一个表格。

DESC + 表名; 命令的作用是查看表结构,它会返回表中每个字段的详细信息,包括字段名、数据类型、是否可为空、键类型、默认值和额外信息。

1. DESC BC_INVOICE; 示例在 Oracle 数据库中,执行以下命令:

DESC BC_INVOICE;

示例输出(Oracle 环境):

Name Null? Type

------------------- -------- ------------

BC_INVOICE_ID NOT NULL NUMBER(19)

INVOICE_NO NOT NULL VARCHAR2(50)

INVOICE_TYPE VARCHAR2(20)

CREATED_DATE DATE

AMOUNT NUMBER(10,2)

REMARK CLOB

2. DESC命令输出解读Name

字段名(列名)

Null?

是否允许为NULL(NOT NULL表示不允许)

Type

字段的数据类型及长度(如NUMBER, VARCHAR2, DATE等)

3. 如何根据Type判断是否要加引号?在Oracle中,根据Type(数据类型)判断IN()中的值是否加引号,具体规则如下:

NUMBER

数字类型(如NUMBER,NUMBER(10,2))

纯数字

❌ 不加引号

WHERE BC_INVOICE_ID IN (7304794410654150656)

VARCHAR2/CHAR

字符串类型

字符串(即使是数字)

✅ 加引号

WHERE INVOICE_NO IN ('25327000000057799451')

DATE/TIMESTAMP

日期/时间类型

日期/时间格式

✅ 加引号

WHERE CREATED_DATE IN ('2024-01-01')

CLOB/BLOB

大字段类型(存储文本或二进制数据)

通常使用LIKE或CONTAINS等

✅ 加引号

WHERE REMARK LIKE '%重要信息%'

4. 示例代码✅ 数值类型(不加引号)字段类型为NUMBER时:

UPDATE BC_INVOICE

SET INVOICE_TYPE = 'IS'

WHERE BC_INVOICE_ID IN (7304794410654150656);

✅ 字符串类型(加引号)字段类型为VARCHAR2时:

UPDATE BC_INVOICE

SET IS_CWGX = 'Y'

WHERE INVOICE_NO IN ('25327000000057799451', '25327000000057799450');

✅ 日期类型(加引号)字段类型为DATE 时:

SELECT * FROM BC_INVOICE

WHERE CREATED_DATE IN ('2024-01-01', '2024-02-01');

5. 推荐的 Oracle 数据字典查询方法DESC在某些Oracle 工具(如SQL Developer、PL/SQL Developer)中可能受限。

推荐使用以下 SQL 查询来查看表的详细字段信息:

使用USER_TAB_COLUMNS查看字段信息SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE

FROM USER_TAB_COLUMNS

WHERE TABLE_NAME = 'BC_INVOICE';

示例输出:

COLUMN_NAME DATA_TYPE DATA_LENGTH NULLABLE

---------------------------------------------------------

BC_INVOICE_ID NUMBER 19 N

INVOICE_NO VARCHAR2 50 N

INVOICE_TYPE VARCHAR2 20 Y

CREATED_DATE DATE Y

AMOUNT NUMBER 10 Y

REMARK CLOB Y