How do I reset a sequence in Oracle?

后端 未结 18 1498
天命终不由人
天命终不由人 2020-11-22 05:09

In PostgreSQL, I can do something like this:

ALTER SEQUENCE serial RESTART WITH 0;

Is there an Oracle equivalent?

18条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-22 05:27

    I make an alternative that the user don’t need to know the values, the system get and use variables to update.

    --Atualizando sequence da tabela SIGA_TRANSACAO, pois está desatualizada
    DECLARE
     actual_sequence_number INTEGER;
     max_number_from_table INTEGER;
     difference INTEGER;
    BEGIN
     SELECT [nome_da_sequence].nextval INTO actual_sequence_number FROM DUAL;
     SELECT MAX([nome_da_coluna]) INTO max_number_from_table FROM [nome_da_tabela];
     SELECT (max_number_from_table-actual_sequence_number) INTO difference FROM DUAL;
    IF difference > 0 then
     EXECUTE IMMEDIATE CONCAT('alter sequence [nome_da_sequence] increment by ', difference);
     --aqui ele puxa o próximo valor usando o incremento necessário
     SELECT [nome_da_sequence].nextval INTO actual_sequence_number from dual;
    --aqui volta o incremento para 1, para que futuras inserções funcionem normalmente
     EXECUTE IMMEDIATE 'ALTER SEQUENCE [nome_da_sequence] INCREMENT by 1';
     DBMS_OUTPUT.put_line ('A sequence [nome_da_sequence] foi atualizada.');
    ELSE
     DBMS_OUTPUT.put_line ('A sequence [nome_da_sequence] NÃO foi atualizada, já estava OK!');
    END IF;
    END;
    

提交回复
热议问题