Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro ao tentar executar o script no Dbeaver

Prezados,

Para tentar ficar mais próximo do ambiente de trabalho, estou tentando executar os exercícios na ferramenta que uso no trabalho (Dbeaver - Oracle).

Criei todas as tabelas, mas na hora de executar o script para carregar os valores maiores ou iguais a 400 para a TABELA_PEDIDOS_GOLD, acaba acontecendo o seguinte erro: Erro SQL [2291] [23000]: ORA-02291: restrição de integridade (ALURA.SYSC008228) violada - chave mãe não localizada

DLL - TABELA_PEDIDOS_GOLD

-- ALURA.TABELA_PEDIDOS_GOLD definição

CREATE TABLE "ALURA"."TABELA_PEDIDOS_GOLD" 
   (	"ID_GOLD" NUMBER(*,0), 
    "DATA_PEDIDO_GOLD" VARCHAR2(50), 
    "STATUS_GOLD" VARCHAR2(50), 
    "TOTAL_PEDIDO_GOLD" FLOAT(126), 
    "CLIENTE_GOLD" NUMBER(*,0), 
    "DATA_ENVIO_ESTIMADA_GOLD" VARCHAR2(50), 
     PRIMARY KEY ("ID_GOLD")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;

CREATE UNIQUE INDEX "ALURA"."SYS_C008227" ON "ALURA"."TABELA_PEDIDOS_GOLD" ("ID_GOLD") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;


-- ALURA.TABELA_PEDIDOS_GOLD chaves estrangeiras

ALTER TABLE "ALURA"."TABELA_PEDIDOS_GOLD" ADD FOREIGN KEY ("CLIENTE_GOLD")
      REFERENCES "ALURA"."TABELA_CLIENTES" ("ID_CLIENTE") ENABLE;

DLL - TABELA_CLIENTES

-- ALURA.TABELA_CLIENTES definição

CREATE TABLE "ALURA"."TABELA_CLIENTES" 
   (	"ID_CLIENTE" NUMBER(*,0), 
    "NOME_CLIENTE" VARCHAR2(250), 
    "INFORMACOES_CONTATO" VARCHAR2(250), 
    "ENDERECO_CLIENTE" VARCHAR2(250), 
     PRIMARY KEY ("ID_CLIENTE")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;

CREATE UNIQUE INDEX "ALURA"."SYS_C008220" ON "ALURA"."TABELA_CLIENTES" ("ID_CLIENTE") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;

**Script que tentei executar 01: **

INSERT INTO TABELA_PEDIDOS_GOLD (
    ID_GOLD,
    DATA_PEDIDO_GOLD,
    STATUS_GOLD,
    TOTAL_PEDIDO_GOLD,
    CLIENTE_GOLD,
    DATA_ENVIO_ESTIMADA_GOLD
)
SELECT
    ID,
    DATA_PEDIDO,
    STATUS,
    TOTAL_PEDIDO,
    CLIENTE,
    DATA_ENVIO_ESTIMADA
FROM TABELA_PEDIDOS
WHERE TOTAL_PEDIDO >= 400;

O que pode está acontecendo de errado?

3 respostas

Para contornar o problema criei uma View:

CREATE OR REPLACE VIEW VW_PEDIDOS_GOLD AS
SELECT
a.ID AS ID_GOLD,
a.DATA_PEDIDO AS DATA_PEDIDO_GOLD,
a.STATUS AS STATUS_GOLD,
a.TOTAL_PEDIDO AS TOTAL_PEDIDO_GOLD,
a.CLIENTE AS CLIENTE_GOLD,
a.DATA_ENVIO_ESTIMADA AS DATA_ENVIO_ESTIMADA_GOLD
FROM
TABELA_PEDIDOS a
WHERE
a.TOTAL_PEDIDO >= 400
solução!

Oie, Fabio! Tudo joia?

Que bom ver que conseguiu retornar o problema, parabéns!

O erro ORA - 02291 retorna quando a chave estrangeira não encontrou correspondência na tabela que foi referenciada. Então, uma dica, também, é revisar SE todos os calores do campo Cliente na TABELA_PEDIDOS existem na TABELA_CLIENTES.

Agradeço por compartilhar sua solução com a comunidade, continue se dedicando aos estudos e qualquer dúvida, conte conosco.

Até mais, Fabio!

Prezada Nathalia,

Deu certo! Havia um erro na minha tabela clientes. Consegui criar a tabela conforme o exercício.

Muito obrigado pela ajuda!