I do not understand why there is a select statement in this code and why it has twice the alter sequence statement for increment by
I found this code on the site asktom
CREATE OR REPLACE
PACKAGE pkg_seq AS
PROCEDURE alterSequenceLast(
sequenceName IN VARCHAR2,
inc in integer);
END;
/
CREATE OR REPLACE
PACKAGE BODY pkg_asktom AS
PROCEDURE alterSequenceLast(
sequenceName IN VARCHAR2,
inc in integer)
is
stmt VARCHAR2(2000);
l_n number;
begin
BEGIN
-- alter increment to inc
stmt := 'ALTER SEQUENCE ' || sequenceName ||' INCREMENT BY ' ||inc;
dbms_output.put_line('Executing ''' || stmt || '''');
EXECUTE IMMEDIATE stmt;
-- read the next value
stmt := 'SELECT ' || sequenceName || '.NEXTVAL FROM DUAL';
dbms_output.put_line('Executing ''' || stmt || '''');
EXECUTE IMMEDIATE stmt into l_n;
-- alter increment to 1
stmt := 'ALTER SEQUENCE ' || sequenceName ||' INCREMENT BY 1';
dbms_output.put_line('Executing ''' || stmt || '''');
EXECUTE IMMEDIATE stmt;
END;
end alterSequenceLast;
END;
/
After execution I get this
SQL> exec pkg_seq.alterSequenceLast('acc_seq',1);
Executing 'ALTER SEQUENCE acc_seq INCREMENT BY 1'
Executing 'SELECT acc_seq.NEXTVAL FROM DUAL'
Executing 'ALTER SEQUENCE acc_seq INCREMENT BY 1'
I would do it this way, I would return the sequence to the beginning.
CREATE OR REPLACE
PACKAGE pkg_seq AS
PROCEDURE alterSequenceLast(
sequenceName IN VARCHAR2,
inc in integer);
END;
/
CREATE OR REPLACE
PACKAGE BODY pkg_seq AS
PROCEDURE alterSequenceLast(
sequenceName IN VARCHAR2,
inc in integer)
is
stmt VARCHAR2(2000);
l_n number;
begin
BEGIN
stmt := 'ALTER SEQUENCE ' || sequenceName ||' restart start with ' ||inc;
dbms_output.put_line('Executing ''' || stmt || '''');
EXECUTE IMMEDIATE stmt;
-- alter increment to 1
stmt := 'ALTER SEQUENCE ' || sequenceName ||' INCREMENT BY 1';
dbms_output.put_line('Executing ''' || stmt || '''');
EXECUTE IMMEDIATE stmt;
END;
end alterSequenceLast;
END;
/
Thaks advance, Petar.