我正在使用DBVisualizer从Oracle 10.2 DB中提取DDL。我在约束中得到重复列的奇怪实例,或者在生成的DDL中重复约束。起初我把它归结为DBVisualizer中的一个错误,但是我尝试对数据库使用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示例,并在我有一个具体示例时更新问题。
答案 0 :(得分: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'
我怀疑这是工具中的一个错误,他们错过了拥有架构的连接,并且你正在使用相同的表/约束但是在另一个用户的架构中。
答案 1 :(得分:0)
据我所知,dbvis(6.5.7)在使用“DDL”选项卡时使用自己的代码,并且在使用“DDL with Storage”选项卡时使用dbms_metadata。 这对你有影响吗?