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?

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