0

我正在使用 DBVisualizer 从 Oracle 10.2 DB 中提取 DDL。我在约束中得到重复列的奇怪实例,或者在生成的 DDL 中得到重复约束。起初我将其归结为 DBVisualizer 中的一个错误,但我尝试对 DB 使用 Apache DDLUtils,它开始抛出错误,调查显示该错误是由同一问题引起的。Oracle 返回的表元数据似乎具有某些 FK 约束的多个条目。

我从我的谷歌搜索中找不到这种东西的参考,我想知道是否有其他人看到过同样的东西。这是 Oracle 驱动程序中的错误,还是元数据包含在我的工具访问它时被丢弃的额外信息,导致工具部分混乱......

这是一个示例(截断)DDL 输出

CREATE TABLE ARTIST
(
    ID INTEGER NOT NULL,
    FIRST_NAME VARCHAR2( 128 ),
    LAST_NAME VARCHAR2( 128 ),
    CONSTRAINT ARTIST_ID_PK PRIMARY KEY( ID ),
    CONSTRAINT ARTIST_CONTENT_ID_FK FOREIGN KEY( ID, ID, ID ) REFERENCES CMS_CONTENT( CONTENT_ID, CONTENT_ID, CONTENT_ID )
    -- note the multiple instances of ID and CONTENT_ID in the above line
    -- rest assured there is nothing bizarre about the foreign table CMS_CONTENT
)

我正在尝试找到一个可以显示行为的 Java 示例,并在我有具体示例时更新问题。

4

2 回答 2

2

您可以尝试内置的 Oracle DBMS_METADATA.GET_DDL('TABLE','ARTIST') 并查看是否可以解决问题(即是否是工具或数据库中的错误)。

您也可以查看 data_dictionary 表。在这种情况下,ALL_CONSTRAINTS 和 ALL_CONS_COLUMNS。

select ac.owner, ac.constraint_name, ac.table_name, ac.r_owner, ac.r_constraint_name,
       acc.column_name, acc.position
from all_constraints ac join all_cons_columns acc on
 (ac.owner = acc.owner and ac.constraint_name = acc.constraint_name)
where ac.table_name = 'ARTIST'
and ac.constraint_type = 'R'

我怀疑这是工具中的一个错误,他们错过了拥有模式的连接,您正在选择同一个表/约束,但在另一个用户的模式中。

于 2009-07-07T22:55:27.747 回答
0

据我所见,dbvis(6.5.7)在使用“DDL”选项卡时使用自己的代码,而在使用“DDL with Storage”选项卡时使用 dbms_metadata。这对你有影响吗?

罗纳德

于 2009-07-08T09:06:45.663 回答