By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE D_DEPARTAMENTO
(ID_DEPARTAMENT NUMBER(10,0)
GENERATED BY DEFAULT ON NULL AS IDENTITY
MINVALUE 1
MAXVALUE 9999999999999999999999999999
INCREMENT BY 1
START WITH 1
CACHE 20
NOORDER
NOCYCLE
NOKEEP
NOSCALE
NOT NULL ENABLE)
CREATE OR REPLACE FUNCTION GET_COLUMN_SEQUENCE_NAME(pinTable_name IN VARCHAR2,
pinColumn_name IN VARCHAR2)
RETURN VARCHAR2
AS
lData_default LONG;
s VARCHAR2(32767);
BEGIN
SELECT DATA_DEFAULT
INTO lData_default
FROM USER_TAB_COLS
WHERE TABLE_NAME = pinTable_name AND
COLUMN_NAME = pinColumn_name;
s := SUBSTR(lData_default, 1, 32767);
RETURN SUBSTR(s, 1, INSTR(s, '.', -1)-1);
END GET_COLUMN_SEQUENCE_NAME;
/
CREATE OR REPLACE FUNCTION RESET_SEQUENCE(pinSequence IN VARCHAR2,
pinStart_value IN NUMBER DEFAULT 1,
pinIncrement IN NUMBER DEFAULT 1)
RETURN NUMBER
AS
nVal NUMBER;
BEGIN
-- Get the next value from the sequence
EXECUTE IMMEDIATE 'SELECT ' || pinSequence || '.NEXTVAL ' ||
' FROM DUAL'
INTO nVal;
-- Change the sequence so it decrements or increments to the desired
-- start value the next time NEXTVAL is invoked.
EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || pinSequence ||
' INCREMENT BY ' || (nVal - (pinStart_value - pinIncrement)) * -1 ||
' MINVALUE 0';
-- Decrement/increment the sequence to the desired start value
EXECUTE IMMEDIATE 'SELECT ' || pinSequence || '.NEXTVAL ' ||
' FROM DUAL'
INTO nVal;
-- Reset the sequence so it uses the desired "increment-by"
EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || pinSequence ||
' INCREMENT BY ' || pinIncrement ||
' MINVALUE 0';
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('RESET_SEQUENCE : ' || SQLCODE || ' ' || SQLERRM);
DECLARE
strSequence_name VARCHAR2(32767);
nVal NUMBER;
nReset NUMBER;
BEGIN
strSequence_name := GET_COLUMN_SEQUENCE_NAME('D_DEPARTAMENTO', 'ID_DEPARTAMENT');
DBMS_OUTPUT.PUT_LINE('strSequence_name = ''' || strSequence_name || '''');
EXECUTE IMMEDIATE 'SELECT ' || strSequence_name || '.NEXTVAL FROM DUAL'
INTO nVal;
DBMS_OUTPUT.PUT_LINE('nVal = ' || nVal);
EXECUTE IMMEDIATE 'SELECT ' || strSequence_name || '.NEXTVAL FROM DUAL'
INTO nVal;
DBMS_OUTPUT.PUT_LINE('nVal = ' || nVal);
EXECUTE IMMEDIATE 'SELECT ' || strSequence_name || '.NEXTVAL FROM DUAL'
INTO nVal;
DBMS_OUTPUT.PUT_LINE('nVal = ' || nVal);
EXECUTE IMMEDIATE 'SELECT ' || strSequence_name || '.NEXTVAL FROM DUAL'
INTO nVal;
DBMS_OUTPUT.PUT_LINE('nVal = ' || nVal);
nReset := RESET_SEQUENCE(strSequence_name, 10, 2);
DBMS_OUTPUT.PUT_LINE('nReset = ' || nReset);
EXECUTE IMMEDIATE 'SELECT ' || strSequence_name || '.NEXTVAL FROM DUAL'
INTO nVal;
DBMS_OUTPUT.PUT_LINE('nVal = ' || nVal);
EXECUTE IMMEDIATE 'SELECT ' || strSequence_name || '.NEXTVAL FROM DUAL'
INTO nVal;
DBMS_OUTPUT.PUT_LINE('nVal = ' || nVal);
EXECUTE IMMEDIATE 'SELECT ' || strSequence_name || '.NEXTVAL FROM DUAL'
1 rows affected
dbms_output:
strSequence_name = '"FIDDLE_DOMZWZHLIQTSJKRAMIBH"."ISEQ$$_299576"'
nVal = 1
nVal = 2
nVal = 3
nVal = 4
RESET_SEQUENCE : -32793 ORA-32793: cannot alter a system-generated sequence
nReset = 0
nVal = 6
nVal = 7
nVal = 8
nVal = 9
RESET_SEQUENCE : -32793 ORA-32793: cannot alter a system-generated sequence
nReset = 0
nVal = 11
nVal = 12
nVal = 13
nVal = 14