kep*_*onk 6 oracle metadata information-schema
我是 Oracle 和数据库管理的新手。
作为上下文,我想创建一个 Java 类,该类将为我提供使用DESC SOME_TABLE
.
我在 Java 中找不到任何特定的方法来做到这一点,但是我发现这ALL_TAB_COLUMNS
可以给我类似的信息。我在 SQL Developer 中尝试过,看看输出有多大不同。事实证明,结果与我预期的大不相同。
我希望有人可以引导我了解如何解释以下内容:
desc SOME_TABLE;
select
COLUMN_NAME
, DATA_TYPE
, DATA_LENGTH
, NULLABLE
from ALL_TAB_COLUMNS
where TABLE_NAME='SOME_TABLE'
order by column_id;
Run Code Online (Sandbox Code Playgroud)
给出输出:
Name Null Type
--------------- ------- ----------------------
UIDPK NUMBER(20)
NAME VARCHAR2(255)
2 rows selected
COLUMN_NAME DATA_TYPE DATA_LENGTH NULLABLE
--------------- -------------- -------------- --------
UIDPK NUMBER 22 N
UIDPK NUMBER 22 N
UIDPK NUMBER 22 Y
NAME VARCHAR2 255 N
NAME VARCHAR2 255 Y
NAME VARCHAR2 255 N
6 rows selected
Run Code Online (Sandbox Code Playgroud)
为什么每列重复3次?为什么datatype
和length
不同UIDPK
,为什么NULLABLE
不一样?
很可能有三个模式(用户)包含该表。您需要OWNER = 'FOOBAR'
在查询中包含all_tab_columns (或使用user_tab_columns
)。您还可以OWNER
在选择列表中包含该列以验证这一点。
对于VARCHAR
(和其他字符列),大小存储在CHAR_LENGTH
手册中。请注意,您还需要检查CHAR_USED
以找出定义是字节还是字符(VARCHAR(10 Bytes)
vs. VARCHAR(10 Char)
)。
对于数字列,定义存储在DATA_SCALE
和 中DATA_PRECISION
。
这在手册中都有描述:http : //docs.oracle.com/cd/E11882_01/server.112/e25513/statviews_2103.htm#I1020277
您是否知道可以使用 SELECT 语句使用 `DBMS_METADATA 检索表的完整定义:
SELECT dbms_metadata.get_ddl('TABLE', 'EMPLOYEE', 'SCOTT')
FROM dual;
Run Code Online (Sandbox Code Playgroud)