ALTER SEQUENCE nome [ INCREMENT [ BY ] incremento ] [ MINVALUE valor_mínimo | NO MINVALUE ] [ MAXVALUE valor_máximo | NO MAXVALUE ] [ RESTART [ WITH ] início ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { tabela.coluna | NONE } ] ALTER SEQUENCE nome SET SCHEMA novo_esquema
O comando ALTER SEQUENCE altera os parâmetros de um gerador de seqüência existente. Os parâmetros que não são definidos explicitamente no comando ALTER SEQUENCE mantêm suas definições anteriores.
Para utilizar o comando ALTER SEQUENCE é necessário ser o dono do seqüência. Para mudar o esquema da seqüência é necessário possuir o privilégio CREATE no novo esquema.
O nome (opcionalmente qualificado pelo esquema) da seqüência a ser alterada.
A cláusula INCREMENT BY incremento é opcional. Um valor positivo produz uma seqüência ascendente, enquanto um valor negativo produz uma seqüência descendente. Se não for especificado, será mantido o valor anterior do incremento.
A cláusula opcional MINVALUE valor_mínimo determina o valor mínimo que a seqüência pode gerar. Se for especificado NO MINVALUE, serão utilizados os valores padrão 1 e -263-1 para as seqüências ascendentes e descendentes, respectivamente. Se nenhuma das duas opções for especificada, o valor mínimo corrente será mantido.
A cláusula opcional MAXVALUE valor_máximo determina o valor máximo que a seqüência pode gerar. Se for especificado NO MAXVALUE, serão utilizados os valores padrão 263-1 e -1, para seqüências ascendentes e descendentes, respectivamente. Se nenhuma das duas opções for especificada, o valor máximo corrente será mantido.
A cláusula opcional RESTART WITH início altera o valor corrente da seqüência.
A cláusula CACHE cache permite que números da seqüência sejam pré-alocados e armazenados em memória para obter um acesso mais rápido. O valor mínimo é 1 (somente um valor pode ser gerado de cada vez, ou seja, sem cache). Se não for especificado, será mantido o valor anterior de cache.
A palavra chave opcional CYCLE pode ser utilizada para permitir uma seqüência ascendente ou descendente reiniciar quando atingir o valor_máximo ou o valor_mínimo, respectivamente. Se o limite for atingido, o próximo número gerado será o valor_mínimo ou o valor_máximo, respectivamente.
Se for especificada a palavra chave opcional NO CYCLE, todas as chamadas a nextval após a seqüência ter atingido seu valor limite retornam um erro. Se não for especificado nem CYCLE nem NO CYCLE, será mantido o comportamento anterior para o ciclo.
A opção OWNED BY faz com que a seqüência seja associada a uma coluna específica de uma tabela, de tal forma que se a coluna (ou toda a tabela) for removida, a seqüência será automaticamente removida também. Se for especificado, esta associação substitui qualquer associação especificada previamente para a seqüência. A tabela especificada deve possuir o mesmo dono e o mesmo esquema da seqüência. A especificação de OWNED BY NONE remove qualquer associação existente, tornando a seqüência "autônoma".
O novo esquema da seqüência.
Para evitar o bloqueio de transações simultâneas que obtêm números a partir de uma mesma seqüência, os efeitos do comando ALTER SEQUENCE sobre os parâmetros de geração da seqüência nunca são desfeitos (rollback); as mudanças passam a valer imediatamente, não sendo reversíveis. Entretanto, as cláusulas OWNED BY e SET SCHEMA são atualizações comuns do catálogo, podendo ser desfeitas.
O comando ALTER SEQUENCE não afeta imediatamente os resultados de nextval nos processos servidor que pré-alocaram (armazenaram no cache) valores da seqüência, a não ser no processo servidor corrente. Os demais processos servidor utilizarão todos os valores pré-alocados antes de perceberem a mudança dos parâmetros de geração da seqüência. O processo servidor corrente é afetado imediatamente.
Algumas variantes do comando ALTER TABLE podem ser utilizadas com seqüências também; por exemplo, para mudar o nome de uma seqüência é utilizado ALTER TABLE RENAME.