Migrando do Oracle para o MySQL, encontramos muitos problemas de incompatibilidade. Temos algumas soluções alternativas para muitos deles, porém ainda temos um: As Sequências
temos esta mesa
CREATE TABLE "HEADS"(
"HEAD_ID" NUMBER NOT NULL ENABLE,
"COLUMN" NUMBER NOT NULL ENABLE,
"ROW" NUMBER NOT NULL ENABLE,
"VALUE" VARCHAR2(200),
"CREATED_BY" VARCHAR2(40),
"CREATED_DATE" DATE,
"MODIFIED_BY" VARCHAR2(40),
"MODIFIED_DATE" DATE
)
Observe que HEAD_ID não é uma chave primária e, portanto, não é exclusiva. Porém, em uma Stored Procedure temos este código:
declare var_id,sequences number;
SELECT CRM_SEQ_GIS_FCEHEAD.NEXTVAL INTO sequences FROM DUAL;
INSERT INTO HEADS (
HEAD_ID,
COLUMN,
ROW,
VALUE,
CREATED_BY,
CREATED_DATE
) ( SELECT
sequences,
COLUMN,
ROW,
VALUE,
CREATED_BY,
SYSDATE
FROM HEADS
WHERE HEAD_ID = var_id );
Sendo var_id qualquer valor numérico dado.
Ele usa uma sequência para obter o próximo valor para HEAD_ID. Qual seria a abordagem para fazer isso no MySQL?
Sabemos que as sequências equivalentes no MySQL são as colunas auto_increment. Mas para uma coluna ser auto_increment, ela deve ser a chave primária e ser única. A coluna no oracle não é PK nem UNIQUE. Tem valores repetidos para HEAD_ID.
Você pode escrever sua própria função definida pelo usuário para gerar números de sequência. Como alternativa, você pode criar uma tabela separada com uma única
AUTO_INCREMENT
coluna para gerar novos IDs: em seu procedimento armazenado, você inseriria uma linha nessa tabela, usariaLAST_INSERT_ID()
para buscar o valor gerado e excluiria a linha inserida.