У меня есть процедура, которая выполняет транзакцию из таблицы в другую. Я уже сделал код, но он получает мне эту ошибкуПроцедура: PLS - 00103 ошибка
Error(89,59): PLS-00103: Encountered the symbol ";" when expecting one of the following: * & = - + </> at in is mod remainder not rem then <expoente (**)> <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_ between overlaps || multiset year DAY_ member SUBMULTISET_
Я не могу понять, что я делаю неправильно!
Вот мой код:
create or replace procedure arm_inst (
p_cod_armazem_zona in varchar2,
p_cod_instituicao in varchar2)
is
qn_cg_pd number(8);
qn_cm_pd number(8);
qn_cp_pd number(8);
qn_cg_ar number(8);
qn_cm_ar number(8);
qn_cp_ar number(8);
estado_pd char (8);
begin
select estado_ped
into estado_pd
from pedidos
where cod_instituicao = p_cod_instituicao;
select quantidade_az_cg, quantidade_az_cm, quantidade_az_cp
into qn_cg_ar, qn_cm_ar, qn_cp_ar
from armazem_zona
where armazem_zona = p_cod_armazem_zona;
if (estado_pd = 'Pendente') then
select quantidade_pedida_cg, quantidade_pedida_cm, quantidade_pedida_cp
into qn_cg_pd, qn_cm, qn_cp
from pedidos
where cod_instituicao = p_cod_instituicao;
if(qn_cg_pd <= qn_cg_ar) then -- verifica quantidade cabazes grandes
update pedidos
set estado_ped = 'Aprovado' --se e verdadeira da aprovado
where cod_instituicao = p_cod_instituicao;
update armazem_zona -- faz update da tabela armazem com as
set qn_cg_ar = qn_cg_ar - qn_cg_pd -- quantidades
where cod_armazem_zona = p_cod_armazem_zona;
commit;
else if(qn_cg_pd > qn_cg_ar)then -- se nao for verdadeira da recusado
update pedidos
set estado_pd = 'Recusado'
where cod_instituicao = p_cod_instituicao;
end if;
end if;
if(qn_cm_pd <= qn_cm_ar)then --verifica quantidade cabazes medias
update pedidos
set estado_pd = 'Aprovado'
where cod_instituicao = p_cod_instituicao;
update armazem_zona
set qn_cm_ar = qn_cm_ar - qn_cm_pd
where cod_armazem_zona = p_cod_armazem_zona;
else if(qn_cm_pd > qn_cm_ar)then-- condicao é falsa
update pedidos
set estado_pd = 'Recusado'
where cod_instituicao = p_cod_instituicao;
end if;
end if;
if(qn_cp_pd <= qn_cp_ar) then
update pedidos
set estado_pd = 'Aprovado'
where cod_instituicao = p_cod_instituicao;
update armazem_zona
set qn_cp_ar = qn_cp_ar - qn_cp_pd
where cod_armazem_zona = p_cod_armazem_zona;
else if(qn_cp_pd > qn_cp_ar) then
update pedidos
set estado_pd = 'Recusado'
where cod_instituicao = p_cod_instituicao;
end if;
end if;
select estado_pd
from pedidos
where cod_instituicao = p_cod_instituicao;
if (estado_pd = 'Aprovado') then
update pedidos
set estado_pd = 'Aprovado'
where cod_instituicao = p_cod_instituicao;
else if (estado_pf != 'Aprovado') then
update pedidos
set estado_pd = 'Reprovado'
where cod_instituicao = p_cod_instituicao;
end if;
end if;
elsif (dbms_output.put_line('O pedido já foi avaliado'));
end if;
commit;
end;
Любая помощь будет оценен по достоинству! :)
В этом случае я хочу проверить, если последний estado_pd = 'Aprovado' или 'Reprovado', поэтому я могу обновить таблицу с результатом. Это была ошибка? – rcrd18
Вы должны добавить предложение INTO после инструкции SELECT и перед предложением FROM. –
Кроме того, у вас есть другие ошибки, о чем говорили Алекс Пул и OracleUser. –