Я пытаюсь пройтись по курсору c_ProdutosEncomenda построчно, копируя эти значения в созданную мной таблицу и сохраняя эти значения в переменных, чтобы я мог использовать их для вызова функции, чтобы дать мне конкретное значение.
Предполагая, что все значения / таблицы были созданы правильно, и что у меня внизу есть команды "end loop" и "close c_ProdutosEncomenda", чего здесь не хватает?
Выдает следующую ошибку:
Код, о котором идет речь:
create or replace Procedure proc_nota_encomenda(p_id_notaEncomenda in NotaEncomenda.cod_notaEncomenda%TYPE)
IS
cursor c_ProdutosEncomenda IS
Select Distinct f.cod_armazem, nep.cod_produto
from notaencomenda ne join
funcionario f on ne.cod_funcionario=f.cod_funcionario
join NotaEncomenda_Produto nep on ne.cod_notaencomenda=nep.cod_notaencomenda;
ex_cod_notaEcomenda_n_existe EXCEPTION;
codigo_encomenda number;
ProdutosEncomenda c_ProdutosEncomenda%ROWTYPE;
stockArmazem number;
stockMinimo number;
stockPedido number;
armazem number;
produto number;
Begin
Select cod_notaencomenda into codigo_encomenda from NotaEncomenda where cod_notaEncomenda=p_id_notaEncomenda;
If (codigo_encomenda!=p_id_notaEncomenda) THEN
raise ex_cod_notaEcomenda_n_existe;
end if;
Open c_ProdutosEncomenda;
Loop
Fetch c_ProdutosEncomenda INTO ProdutosEncomenda;
Exit when c_ProdutosEncomenda%NotFound;
Select cod_armazem from ProdutoEncomenda into armazem;
Select cod_produto from ProdutosEncomenda into produto;
stockArmazem:= FUNC_STOCK_ARTIGO_ARMAZEM(produto,armazem);
Select stock_minimo INTO stockMinimo FROM Stock where Produto_cod_produto=ProdutosEncomenda.cod_produto
AND Armazem_cod_Armazem=ProdutosEncomenda.cod_armazem;
Select quantidade INTO stockPedido FROM NotaEncomenda_Produto WHERE cod_produto=ProdutosEncomenda.cod_produto
AND cod_notaEncomenda=p_id_notaEncomenda;
If stockArmazem-stockPedido<stockMinimo THEN
Insert into ProdutosEmFalta Values (ProdutosEncomenda.cod_produto,p_id_notaEncomenda,stockPedido);
Else
Insert into GuiaSaida (cod_notaEncomenda) Values (ProdutosEncomenda.cod_produto);
Insert into ZonaArmazem_Produto_GuiaSaida (cod_produto,id_guia,quantidadeRetirada)
Values (ProdutosEncomenda.cod_produto,ProdutosEncomenda.cod_armazem,stockPedido);
end if;
end loop;
Close c_ProdutosEncomenda;
Exception
when ex_cod_notaEcomenda_n_existe then
raise_application_error(-20001,'Nota de encomenda inexistente'); end;