DROP TABLE temp_store PURGE
CREATE TABLE temp_store(table_name VARCHAR2(50), cons_details VARCHAR2(4000))
DROP TABLE tab1 PURGE
CREATE TABLE tab1(id NUMBER, name VARCHAR2(100), CONSTRAINT pk_tab1_id PRIMARY KEY(id))
DROP TABLE tab2 PURGE
CREATE TABLE tab2(id NUMBER, name VARCHAR2(100), CONSTRAINT pk_tab2_id PRIMARY KEY(id))
DROP TABLE tab3 PURGE
CREATE TABLE tab3(id NUMBER, name VARCHAR2(100), int_id NUMBER, CONSTRAINT pk_tab3_id PRIMARY KEY(id), CONSTRAINT fk_tab1_id FOREIGN KEY(int_id) REFERENCES tab1(id), CONSTRAINT fk_tab2_id FOREIGN KEY(int_id) REFERENCES tab2(id))
DECLARE
v_strSQL VARCHAR2(32767);
TYPE t_arFKConsDDL IS TABLE OF VARCHAR2(32767);
v_arFKConsDDL t_arFKConsDDL;
BEGIN
v_strSQL := ' INSERT INTO temp_store
SELECT t.table_name,
dbms_metadata.get_dependent_ddl(''REF_CONSTRAINT'', table_name)
FROM user_tables t
WHERE table_name = ''TAB3''
AND EXISTS (SELECT 1
FROM user_constraints
WHERE table_name = t.table_name
AND constraint_type = ''R'') ';
EXECUTE IMMEDIATE v_strSQL;
SELECT cons_details
BULK COLLECT INTO v_arFKConsDDL
FROM temp_store;
IF (v_arFKConsDDL.COUNT>0) THEN
FOR i IN v_arFKConsDDL.FIRST..v_arFKConsDDL.LAST
LOOP
v_strSQL := v_arFKConsDDL(i);
--dbms_output.put_line(v_strSQL);
EXECUTE IMMEDIATE v_strSQL;
END LOOP;
END IF;
END;