You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Jupyter用cx_Oracle执行DESCRIBE语句报ORA-00900错误如何解决

你遇到的ORA-00900报错原因是:DESCRIBE是Oracle官方客户端工具(如SQL*Plus、PL/SQL Developer)自带的交互式命令,不属于标准SQL语法,因此无法直接通过cx_Oracle执行。要实现等效的字段详情查询,可使用以下两种方案:

方案1:查询Oracle系统数据字典(推荐,可获取完整元信息)

Oracle的ALL_TAB_COLUMNS系统视图存储了所有当前账号有权限访问的表的字段元数据,查询该视图可以得到和DESCRIBE完全一致的信息,包括字段名、数据类型、长度、精度、非空约束等。

import cx_Oracle

connection = cx_Oracle.connect(user=username, password=userpwd, dsn=dsn, encoding="UTF-8")
cursor = connection.cursor()

# 构造查询语句,注意表名、用户名大小写要和Oracle库中存储一致
desc_query = """
SELECT 
    COLUMN_NAME AS 字段名,
    DATA_TYPE AS 字段类型,
    DATA_LENGTH AS 类型长度,
    DATA_PRECISION AS 数值精度,
    DATA_SCALE AS 小数位数,
    NULLABLE AS 是否允许为空
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'ARADMIN'
AND TABLE_NAME = 'EPM_TechnicianInformation'
ORDER BY COLUMN_ID ASC
"""

cursor.execute(desc_query)
# 获取所有字段详情
column_details = cursor.fetchall()

# 打印结果
for col in column_details:
    print(col)

cursor.close()
connection.close()

如果查询的是当前登录用户名下的表,也可以直接查询USER_TAB_COLUMNS视图,不需要加OWNER过滤条件。

方案2:使用cx_Oracle内置的description属性

如果只需要快速获取字段名和基础类型,不需要复杂的元信息,可以执行一个无返回结果的查询,直接通过cursor的description属性读取字段结构,不需要记忆系统视图语法。

import cx_Oracle

connection = cx_Oracle.connect(user=username, password=userpwd, dsn=dsn, encoding="UTF-8")
cursor = connection.cursor()

# 加WHERE 1=0条件不会返回任何业务数据,仅加载表的字段结构
cursor.execute("SELECT * FROM ARADMIN.EPM_TechnicianInformation WHERE 1=0")

# description返回的每个元组对应一个字段的属性:(名称, 类型编码, 显示长度, 内部长度, 精度, 小数位, 是否允许为空)
for col_attr in cursor.description:
    print(f"字段名:{col_attr[0]}, 类型编码:{col_attr[1]}, 允许为空:{col_attr[6]}")

cursor.close()
connection.close()

如果需要将类型编码转为可读的类型名称,可以直接匹配cx_Oracle内置的类型常量,例如cx_Oracle.DB_TYPE_VARCHAR对应字符串类型、cx_Oracle.DB_TYPE_NUMBER对应数值类型。

内容的提问来源于stack exchange,提问作者Bharti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:54:03