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

Error Code: 1452

Sei que a pergunta será grande, mas gostaria de informar que tentei verificar o problema e não consegui. Até aqui as funções e SP funcionam perfeitamente. Todas forma testadas. Depois criei a SP abaixo, como na aula

/* criando uma compra aleatoria
USE `sucos_vendas`;
DROP procedure IF EXISTS `p_inserir_venda`;

DELIMITER $$
USE `sucos_vendas`$$
CREATE PROCEDURE `p_inserir_venda` (vData     date, max_itens int, max_quantidade int)
BEGIN
    declare vCliente varchar (11);
    declare vProduto varchar (10);
    declare vVendedor varchar (5);
    declare vQuantidade int;
    declare vPreco float;
    declare vItens int;
    declare vNumNota int;
    declare vContador int default 1;
    select max(numero) + 1 into vNumNota from notas_fiscais;
    set vCliente = f_cliente_aleatorio();
    set vVendedor = f_vendedor_aleatorio();
    insert into notas_fiscais (cpf, matricula, data_venda, numero, imposto)
    values (vCliente, vVendedor, vData, vNumNota, 0.18);
    set vItens = f_numero_aleatorio (1, max_itens);
    while vContador <= vItens
    do
    set vProduto = f_numero_aleatorio();
    set vQuantidade = f_numero_aleatorio(10, max_quantidade);
    select preco_de_lista into vPreco from tabela_de_produtos where CODIGO_DO_PRODUTO = vProduto;
    insert into itens_notas_fiscais (numero, codigo_do_produto, quantidade, preco)
    values (vNumNota, vProduto, vQuantidade, vPreco);
    set vContador = vContador + 1;
end while;

END$$

DELIMITER ; */

Fiz o chamamento da SP como abaixo:

call p_inserir_venda (20190517, 3, 100);

O procedimento retornou o erro abaixo:

/Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (sucos_vendas.notas_fiscais, CONSTRAINT notas_fiscais_ibfk_1 FOREIGN KEY (MATRICULA) REFERENCES tabela_de_vendedores (MATRICULA))/

Como pode perceber eu tenho uma formatação diferente do professor na SP, pensei que fosse algo neste sentido, apesar de estar utilizando a plataforma windows, assim, copiei a SP e criei a SP p_inserir_venda_1 () que retornou o mesmo erro.

Como pude perceber o erro diz que estou tentando inserir uma FK que não consta em uma das tabelas... todas as tabelas tem registros inseridos (não estão vazias)

Poderia me ajudar?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas
solução!

Está ficando cada vez melhor... Verifiquei várias vezes a SP e fui buscar uma função que pudesse estar retornando um valor errado, ao testar a F f_vendedor_aleatório percebi que retornava um valor int, como abaixo:

CREATE DEFINER=`root`@`localhost` FUNCTION `f_vendedor_aleatorio`() 
RETURNS int (alterado para varchar(5)
BEGIN
    declare vRetorno varchar(10); (alterado para (5))
    declare num_max_tabela int;
    declare num_aleatorio int;
    declare num_linhas int;
    select count(*) into num_max_tabela from tabela_de_vendedores;
    set num_aleatorio = f_numero_aleatorio (1, num_max_tabela);
    set num_linhas = num_aleatorio - 1;
    select matricula into vRetorno from tabela_de_vendedores
    limit num_linhas, 1;
RETURN vRetorno;
END  

Como o retorno era em INT e não em varchar (5) como na tabela de vendedores, fiz as alterações apontadas, o erro mudou de (Error Code: 1452) para: Error Code: 1318. Incorrect number of arguments for FUNCTION sucos_vendas.f_numero_aleatorio; expected 2, got 0

Continuo precisando de ajuda kkkk

Oie eu novamente.... Depois de ler a SP mais uma dezena de vezes e, pensar sobre o erro, percebi que tinha errado, além dos outros erros, em uma linha, como segue:

set vProduto = f_numero_aleatorio();

Esta linha deveria ser:

set vProduto = f_produto_aleatorio();

O que faz sentido para o erro que esperava 2 argumentos e foi enviado 0.....

Agora... 14:07:37 call p_inserir_venda (20190517, 3, 100) 1 row(s) affected 0.016 sec

Tudo certo para continuar.

Deixo os comentários para auxiliar algum incauto como eu kkkkkk