3
respostas

[Bug] Erro na criação das Constraints - Tabelas PRODUTO_EXERCICIO e PRODUTO_VENDA_EXERCICIO

ALTER TABLE PRODUTO_EXERCICIO ADD CONSTRAINT PRODUTO_EXERCICIO_COD_PKPRIMARY KEY (COD);

ALTER TABLE PRODUTO_VENDA_EXERCICIO ADD CONSTRAINT PRODUTO_VENDA_EXERCICIO_ID_PKPRIMARY KEY (ID);

Os nomes das constraints concatenaram com o termo PRIMARY KEY gerando um erro na hora da execução.

Att,

Evandro Dias

3 respostas

O mesmo ocorre na criação da Foreign Key.

Olá Evandro, tudo bem?

Os dois primeiros erros ocorrem pois o nome da constraint está "junto" do tipo da constraint.

No primeiro: PRODUTO_EXERCICIO_COD_PK junto da palavra PRIMARY: ..ADD CONSTRAINT PRODUTO_EXERCICIO_COD_PKPRIMARY KEY (COD);

No segundo: PRODUTO_VENDA_EXERCICIO_ID_PK da palavra PRIMARY: ..ADD CONSTRAINT PRODUTO_VENDA_EXERCICIO_ID_PKPRIMARY KEY (ID);

Separando:

ALTER TABLE PRODUTO_EXERCICIO 
  ADD CONSTRAINT PRODUTO_EXERCICIO_COD_PK 
  PRIMARY KEY (COD);

ALTER TABLE PRODUTO_VENDA_EXERCICIO 
  ADD CONSTRAINT PRODUTO_VENDA_EXERCICIO_ID_PK
  PRIMARY KEY (ID);

table PRODUTO_EXERCICIO alterado. table PRODUTO_VENDA_EXERCICIO alterado.

Já o terceiro erro (criação da Foreign Key), além de ocorrer a mesma observação dos casos acima (nome da constraint estar "junto" do tipo da constraint), indica que o nome da constraint é muito longo:

Relatório de erros -
Erro de SQL: ORA-00972: identificador muito longo
00972. 00000 -  "identifier is too long"
*Cause:    An identifier with more than 30 characters was specified.
*Action:   Specify at most 30 characters.
ALTER TABLE PRODUTO_VENDA_EXERCICIO ADD CONSTRAINT 
  PRODUTO_VENDA_EXERCICIO_PRODUTO_EXERCICIO_COD
  FOREIGN KEY (COD_PRODUTO) REFERENCES PRODUTO_EXERCICIO (COD);

De fato o identificador PRODUTO_VENDA_EXERCICIO_PRODUTO_EXERCICIO_COD possui 45 caracteres. Diminuindo, o comando foi aceito:

ALTER TABLE PRODUTO_VENDA_EXERCICIO ADD CONSTRAINT 
  PROD_VENDA_EXER_PROD_EXER_FK
  FOREIGN KEY (COD_PRODUTO) REFERENCES PRODUTO_EXERCICIO (COD);

table PRODUTO_VENDA_EXERCICIO alterado.

Isso mesmo, dando somente um espaço nas palavras a query funciona.

ALTER TABLE PRODUTO_EXERCICIO ADD CONSTRAINT PRODUTO_EXERCICIO_COD_PK PRIMARY KEY (COD);

ALTER TABLE PRODUTO_VENDA_EXERCICIO ADD CONSTRAINT PRODUTO_VENDA_EXERCICIO_ID_PK PRIMARY KEY (ID);

ALTER TABLE PRODUTO_VENDA_EXERCICIO ADD CONSTRAINT PRODUTO_VENDA_EXERCICIO_PRODUTO_EXERCICIO_COD FOREIGN KEY (COD_PRODUTO) REFERENCES PRODUTO_EXERCICIO (COD);