我一直在使用 dbVisualizer 作为快速而简单的数据库查看器,因为我不熟悉 Oracle 并且没有可用的 sqlplus/gqlplus。我假设它的“列”视图向我显示了与 Oracle 相同的表元数据。该视图中的标题是:
BUFFER_LENGTH DECIMAL_DIGITS SQL_DATA_TYPE
CHAR_OCTET_LENGTH IS_NULLABLE SQL_DATETIME_SUB
COLUMN_DEF NULLABLE TABLE_CAT
COLUMN_NAME NUM_PREC_RADIX TABLE_NAME
COLUMN_SIZE ORDINAL_POSITION TABLE_SCHEM
DATA_TYPE REMARKS TYPE_NAME
我的应用程序非常简单,但它确实有几个整数字段和几个小数字段,我希望能够在开发过程中轻松转储这些信息。
所以我通过 Python 的 cx_Oracle 查询了 USER_TAB_COLS 表,并询问了 DECIMAL_DIGITS 等。我得到“cx_Oracle.DatabaseError:ORA-00904:“DECIMAL_DIGITS”:无效标识符”。我要求的其他列都很好。
于是我直接通过cx_Oracle查询了USER_TAB_COLS,得到了这些字段:
AVG_COL_LEN DATA_TYPE_MOD NULLABLE
CHAR_COL_DECL_LENGTH DATA_TYPE_OWNER NUM_BUCKETS
CHAR_LENGTH DATA_UPGRADED NUM_DISTINCT
CHAR_USED DEFAULT_LENGTH NUM_NULLS
CHARACTER_SET_NAME DENSITY QUALIFIED_COL_NAME
COLUMN_ID GLOBAL_STATS SAMPLE_SIZE
COLUMN_NAME HIDDEN_COLUMN SEGMENT_COLUMN_ID
DATA_DEFAULT HIGH_VALUE TABLE_NAME
DATA_LENGTH HISTOGRAM USER_STATS
DATA_PRECISION INTERNAL_COLUMN_ID V80_FMT_IMAGE
DATA_SCALE LAST_ANALYZED VIRTUAL_COLUMN
DATA_TYPE LOW_VALUE
碰巧我感兴趣的其他字段(表名、列名、数据类型和字符长度)在两个列表中具有相同的名称。但不是 DECIMAL_DIGITS。
所以,如果这就是 cx_Oracle 给我的,那很好;我会用它来运行,因为这就是我想用来转储我的模式(用于下游进一步处理)的东西。但我不知道如何从更大的字段列表中获取相同的信息。对于我的所有字段,DATA_PRECISION 为“无”,无论它们在创建表时被声明为 INT 还是 NUMBER(*, 4)。同样,我所有的数字字段的 DATA_LENGTH 都是 22。
我来自哪里:我在使用 Postgres 和 ColdFusion 和 Zope 等专用中间件系统进行 Web/数据库开发方面有着陈旧而生疏的背景,但我是 Oracle 的新手。感谢您愿意提供的任何和所有帮助!