Skip to content

Instantly share code, notes, and snippets.

@JohnZavyn
Last active August 29, 2015 14:09
Show Gist options
  • Save JohnZavyn/0f2386fa44d31c8b3f62 to your computer and use it in GitHub Desktop.
Save JohnZavyn/0f2386fa44d31c8b3f62 to your computer and use it in GitHub Desktop.
Reset An Oracle SEQUENCE
SET DEFINE OFF;
SET SERVEROUTPUT ON;
SET FEEDBACK OFF;
--/
DECLARE
newStartNumber INTEGER;
oldStartNumber INTEGER;
difference INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT NVL(MAX(EXAMPLE_ID) + 1, 1) FROM TABLE_EXAMPLES' INTO newStartNumber;
EXECUTE IMMEDIATE 'SELECT EXAMPLES_SEQ.NEXTVAL FROM DUAL' INTO oldStartNumber;
difference := newStartNumber - oldStartNumber;
EXECUTE IMMEDIATE 'DROP SEQUENCE EXAMPLES_SEQ';
EXECUTE IMMEDIATE
'CREATE SEQUENCE EXAMPLES_SEQ' ||
' MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 ' ||
'START WITH ' || newStartNumber ||
' NOCACHE NOORDER NOCYCLE';
EXECUTE IMMEDIATE 'GRANT SELECT ON EXAMPLES_SEQ TO TABLE_U';
DBMS_OUTPUT.PUT_LINE('Reset SEQUENCE EXAMPLES_SEQ.NEXTVAL = ' || newStartNumber || ' - changed by (' || difference || ')');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Reset SEQUENCE `EXAMPLES_SEQ` ERROR: ' || SQLERRM);
END;
/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment