java有外键怎么导出_导出当前用户下所有外键、主键、索引、sequence的DDL

在数据转换的过程中,我使用create table as ...等方式,批量将A的数据表创建到B下后,

主键、外键、索引是需要手工建的,一个一个嫌麻烦,故写下了以下脚本。

可使A用户下的主键、外键、索引都产生出来,然后到B用户下创建。

--------------------------------------------------------------------------------

10g及以上

--导出索引

SELECT 'CREATE ' || DECODE(B.INDEX_TYPE, 'NORMAL', '', B.INDEX_TYPE) ||

DECODE(B.UNIQUENESS, 'NONUNIQUE', '', B.UNIQUENESS) || ' INDEX ' ||

B.INDEX_NAME || ' ON ' || B.TABLE_NAME || ' (' ||

(SELECT TO_CHAR(WMSYS.WM_CONCAT(A.COLUMN_NAME))

FROM USER_IND_COLUMNS A

WHERE A.INDEX_NAME = B.INDEX_NAME) || ');'

FROM USER_INDEXES B

WHERE B.TABLE_NAME IN

('IB02', 'IB03', 'IC02', 'IC05', 'IC06', 'IC10', 'IC11', 'IC13',

'IC14', 'IC16', 'IC18', 'IC20', 'IC21', 'IC22', 'IC26', 'IC27',

'IC28', 'IC40', 'IC41', 'IC43', 'IC44', 'IC45', 'IC51', 'IC64',

'IC68', 'IC93', 'ICA8', 'ICD1', 'ICD2', 'ICD3', 'ICE1', 'ICE2',

'ICF1', 'ICF2', 'ID02', 'LB03', 'LC01', 'LC02', 'LC04', 'LC06',

'LC09', 'LC12', 'LC13', 'LC14', 'LC16', 'LC17', 'LC20', 'LC21',

'LC22', 'LC25', 'LC26', 'LC27', 'LC28', 'LC30', 'LC31', 'LC32',

'LC33', 'LC40', 'LC41', 'LC47', 'LC48', 'LC58', 'MB03', 'MB06',

'MC01', 'MC01', 'MC02', 'MC05');

--导出主键

SELECT 'ALTER TABLE ' || B.TABLE_NAME || ' ADD CONSTRAINT ' ||

B.CONSTRAINT_NAME || ' PRIMARY KEY (' ||

(SELECT TO_CHAR(WMSYS.WM_CONCAT(A.COLUMN_NAME))

FROM USER_CONS_COLUMNS A

WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME) || ');'

FROM USER_CONSTRAINTS B

WHERE B.CONSTRAINT_TYPE = 'P'

AND B.TABLE_NAME IN

('IB02', 'IB03', 'IC02', 'IC05', 'IC06', 'IC10', 'IC11', 'IC13',

'IC14', 'IC16', 'IC18', 'IC20', 'IC21', 'IC22', 'IC26', 'IC27',

'IC28', 'IC40', 'IC41', 'IC43', 'IC44', 'IC45', 'IC51', 'IC64',

'IC68', 'IC93', 'ICA8', 'ICD1', 'ICD2', 'ICD3', 'ICE1', 'ICE2',

'ICF1', 'ICF2', 'ID02', 'LB03', 'LC01', 'LC02', 'LC04', 'LC06',

'LC09', 'LC12', 'LC13', 'LC14', 'LC16', 'LC17', 'LC20', 'LC21',

'LC22', 'LC25', 'LC26', 'LC27', 'LC28', 'LC30', 'LC31', 'LC32',

'LC33', 'LC40', 'LC41', 'LC47', 'LC48', 'LC58', 'MB03', 'MB06',

'MC01', 'MC01', 'MC02', 'MC05');

--导出外键

SELECT 'ALTER TABLE ' || B.TABLE_NAME || ' ADD CONSTRAINT ' ||

B.CONSTRAINT_NAME || ' FOREIGN KEY (' ||

(SELECT TO_CHAR(WMSYS.WM_CONCAT(A.COLUMN_NAME))

FROM USER_CONS_COLUMNS A

WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME) || ') REFERENCES ' ||

(SELECT B1.table_name FROM USER_CONSTRAINTS B1

WHERE B1.CONSTRAINT_NAME = B.R_CONSTRAINT_NAME) || '(' ||

(SELECT TO_CHAR(WMSYS.WM_CONCAT(A.COLUMN_NAME))

FROM USER_CONS_COLUMNS A

WHERE A.CONSTRAINT_NAME = B.R_CONSTRAINT_NAME) || ');'

FROM USER_CONSTRAINTS B

WHERE B.CONSTRAINT_TYPE = 'R'

AND B.TABLE_NAME IN

('IB02', 'IB03', 'IC02', 'IC05', 'IC06', 'IC10', 'IC11', 'IC13',

'IC14', 'IC16', 'IC18', 'IC20', 'IC21', 'IC22', 'IC26', 'IC27',

'IC28', 'IC40', 'IC41', 'IC43', 'IC44', 'IC45', 'IC51', 'IC64',

'IC68', 'IC93', 'ICA8', 'ICD1', 'ICD2', 'ICD3', 'ICE1', 'ICE2',

'ICF1', 'ICF2', 'ID02', 'LB03', 'LC01', 'LC02', 'LC04', 'LC06',

'LC09', 'LC12', 'LC13', 'LC14', 'LC16', 'LC17', 'LC20', 'LC21',

'LC22', 'LC25', 'LC26', 'LC27', 'LC28', 'LC30', 'LC31', 'LC32',

'LC33', 'LC40', 'LC41', 'LC47', 'LC48', 'LC58', 'MB03', 'MB06',

'MC01', 'MC01', 'MC02', 'MC05');

--------------------------------------------------------------------------------

9i、10g都可以

SELECT 'drop SEQUENCE ' || T.SEQUENCE_NAME || ';'

FROM USER_SEQUENCES T

WHERE T.SEQUENCE_NAME IN

('SEQ_A_AAZ257', 'SEQ_A_BAZ601', 'SEQ_A_BAE088', 'SEQ_A_AAZ033',

'SEQ_A_BAZ605', 'SEQ_A_BAZ603', 'SEQ_A_BAZ001', 'SEQ_A_BAZ002',

'SEQ_A_BAZ601', 'SEQ_A_BAZ612', 'SEQ_A_BAZ613', 'SEQ_A_BAZ606',

'SEQ_A_BAZ609', 'SEQ_A_BAC402', 'SEQ_A_BZA203', 'SEQ_A_BZA668',

'SEQ_A_BAZ607');

--导出sequence

SELECT 'CREATE SEQUENCE ' || SEQUENCE_NAME || ' MINVALUE ' || MIN_VALUE ||

' MAXVALUE ' || MAX_VALUE || ' START WITH ' || LAST_NUMBER ||

' INCREMENT BY ' || INCREMENT_BY || (CASE

WHEN CACHE_SIZE = 0 THEN

' NOCACHE'

ELSE

' CACHE ' || CACHE_SIZE

END) || ';'

FROM USER_SEQUENCES;

--------------------------------------------------------------------------------

9i及以下

CREATE OR REPLACE FUNCTION ZJW_C2L(IND IN VARCHAR2) RETURN VARCHAR2 IS

RET_MSG VARCHAR2(1000);

BEGIN

SELECT SUBSTR(MAX(SYS_CONNECT_BY_PATH(COLUMN_NAME, ',')), 2) AS COLUMN_NAME

INTO RET_MSG

FROM (SELECT C.COLUMN_NAME, ROWNUM AS RN

FROM USER_IND_COLUMNS C

WHERE C.INDEX_NAME = IND

ORDER BY C.COLUMN_POSITION)

START WITH RN = 1

CONNECT BY RN - 1 = PRIOR RN;

RETURN RET_MSG;

END ZJW_C2L;

--导出索引

SELECT 'CREATE ' || DECODE(T.INDEX_TYPE, 'NORMAL', '', T.INDEX_TYPE) ||

DECODE(T.UNIQUENESS, 'NONUNIQUE', '', T.UNIQUENESS) || ' INDEX ' ||

T.INDEX_NAME || ' ON ' || T.TABLE_NAME || ' (' ||

(ZJW_C2L(T.INDEX_NAME)) || ');'

FROM USER_INDEXES T

WHERE T.TABLE_NAME IN

('IB02', 'IB03', 'IC02', 'IC05', 'IC06', 'IC10', 'IC11', 'IC13',

'IC14', 'IC16', 'IC18', 'IC20', 'IC21', 'IC22', 'IC26', 'IC27',

'IC28', 'IC40', 'IC41', 'IC43', 'IC44', 'IC45', 'IC51', 'IC64',

'IC68', 'IC93', 'ICA8', 'ICD1', 'ICD2', 'ICD3', 'ICE1', 'ICE2',

'ICF1', 'ICF2', 'ID02', 'LB03', 'LC01', 'LC02', 'LC04', 'LC06',

'LC09', 'LC12', 'LC13', 'LC14', 'LC16', 'LC17', 'LC20', 'LC21',

'LC22', 'LC25', 'LC26', 'LC27', 'LC28', 'LC30', 'LC31', 'LC32',

'LC33', 'LC40', 'LC41', 'LC47', 'LC48', 'LC58', 'MB03', 'MB06',

'MC01', 'MC01', 'MC02', 'MC05')

--导出主键

SELECT 'alter table '||T.table_name||

' add constraint '||T.constraint_name||' primary key ('||ZJW_C2L(T.constraint_name)||');'

FROM USER_CONSTRAINTS T

WHERE T.TABLE_NAME IN

('IB02', 'IB03', 'IC02', 'IC05', 'IC06', 'IC10', 'IC11', 'IC13',

'IC14', 'IC16', 'IC18', 'IC20', 'IC21', 'IC22', 'IC26', 'IC27',

'IC28', 'IC40', 'IC41', 'IC43', 'IC44', 'IC45', 'IC51', 'IC64',

'IC68', 'IC93', 'ICA8', 'ICD1', 'ICD2', 'ICD3', 'ICE1', 'ICE2',

'ICF1', 'ICF2', 'ID02', 'LB03', 'LC01', 'LC02', 'LC04', 'LC06',

'LC09', 'LC12', 'LC13', 'LC14', 'LC16', 'LC17', 'LC20', 'LC21',

'LC22', 'LC25', 'LC26', 'LC27', 'LC28', 'LC30', 'LC31', 'LC32',

'LC33', 'LC40', 'LC41', 'LC47', 'LC48', 'LC58', 'MB03', 'MB06',

'MC01', 'MC01', 'MC02', 'MC05')

AND T.CONSTRAINT_TYPE ='P';

--导出外键

SELECT 'alter table '||T.table_name||

' add constraint '||T.constraint_name||' foreign key ('||ZJW_C2L(T.R_constraint_name)||

') references '||(SELECT Q.TABLE_NAME FROM USER_CONSTRAINTS Q WHERE Q.constraint_name = T.r_constraint_name) ||'('||ZJW_C2L(T.r_constraint_name)||');'

FROM USER_CONSTRAINTS T

WHERE T.TABLE_NAME IN

('IB02', 'IB03', 'IC02', 'IC05', 'IC06', 'IC10', 'IC11', 'IC13',

'IC14', 'IC16', 'IC18', 'IC20', 'IC21', 'IC22', 'IC26', 'IC27',

'IC28', 'IC40', 'IC41', 'IC43', 'IC44', 'IC45', 'IC51', 'IC64',

'IC68', 'IC93', 'ICA8', 'ICD1', 'ICD2', 'ICD3', 'ICE1', 'ICE2',

'ICF1', 'ICF2', 'ID02', 'LB03', 'LC01', 'LC02', 'LC04', 'LC06',

'LC09', 'LC12', 'LC13', 'LC14', 'LC16', 'LC17', 'LC20', 'LC21',

'LC22', 'LC25', 'LC26', 'LC27', 'LC28', 'LC30', 'LC31', 'LC32',

'LC33', 'LC40', 'LC41', 'LC47', 'LC48', 'LC58', 'MB03', 'MB06',

'MC01', 'MC01', 'MC02', 'MC05')

AND T.CONSTRAINT_TYPE ='R';

--------------------------------------------------------------------------------

也可以通过DBMS_METADATA.GET_DDL来取得对象DDL

-----SELECT DBMS_METADATA.GET_DDL(A.OBJECT_TYPE,A.OBJECT_NAME) from dba_objects where object_type='TABLE';

object_type:

CLUSTER

CONSUMER GROUP

CONTEXT

DATABASE LINK

DIMENSION

DIRECTORY

EVALUATION CONTEXT

FUNCTION

INDEX

INDEX PARTITION

INDEXTYPE

JAVA CLASS

JAVA DATA

JAVA RESOURCE

JAVA SOURCE

LIBRARY

LOB

MATERIALIZED VIEW

OPERATOR

PACKAGE

PACKAGE BODY

PROCEDURE

QUEUE

RESOURCE PLAN

RULE SET

SEQUENCE

SYNONYM

TABLE

TABLE PARTITION

TRIGGER

TYPE

TYPE BODY

VIEW

XML SCHEMA

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29968458/viewspace-1361515/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值