Skip to content

Instantly share code, notes, and snippets.

@timvw
Last active August 29, 2015 14:09
Show Gist options
  • Select an option

  • Save timvw/49d2bd8b3e0a22a2697c to your computer and use it in GitHub Desktop.

Select an option

Save timvw/49d2bd8b3e0a22a2697c to your computer and use it in GitHub Desktop.
PL/SQL template for doing a data import
SET SERVER OUTPUT ON;
WHENEVER SQLERROR EXIT;
DECLARE
v_sql VARCHAR2(32000);
CURSOR c_disableConstraints IS
SELECT 'alter table "'||table_name||'" disable constraint "'||constraint_name||'"' sqlstatement
FROM USER_CONSTRAINTS
WHERE constraint_type IN ('R','U','P')
ORDER BY DECODE (CONSTRAINT_TYPE, 'R', 1, 'U', 2, 'P', 3);
CURSOR c_enableConstraints IS
SELECT 'alter table "'||table_name||'" enable constraint "'||constraint_name||'"' sqlstatement
FROM USER_CONSTRAINTS
WHERE constraint_type IN ('R','U','P')
ORDER BY DECODE (CONSTRAINT_TYPE, 'R', 1, 'U', 2, 'P', 3) DESC;
BEGIN
DBMS_OUTPUT.PUT_LINE('running script on ' || CURRENT_TIMESTAMP);
FOR v_disableConstraint IN c_disableConstraints LOOP
v_sql := v_disableConstraint.sqlstatement;
EXECUTE IMMEDIATE (v_sql);
END LOOP;
-- data here...
COMMIT;
FOR v_enableConstraint IN c_enableConstraints LOOP
v_sql := v_enableConstraint.sqlstatement;
EXECUTE IMMEDIATE (v_sql);
END LOOP;
DBMS_OUTPUT.PUT_LINE('completed on ' || CURRENT_TIMESTAMP);
END
;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment