rcrd18 Posted February 14, 2014 at 02:44 PM Report #545263 Posted February 14, 2014 at 02:44 PM Boa tarde, estou a tentar fazer um procedimento que me faça uma transação de uma certa quantidade de um armazem para uma instituição. O código está feito mas estou a receber um erro: 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_ Aqui está o código: 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; 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; O que faço para corrigir?
Mimato Posted March 11, 2014 at 10:15 PM Report #548291 Posted March 11, 2014 at 10:15 PM Boa noite. Existem aí algumas coisas erradas. 1 - Usa end if apenas para fechar um if, e não para fechar cada if e else if. Tens aí end if's a mais. Tu estás afazer algo do tipo: if(c) { qq coisa } else if(c) { outra coisa } else { cena } end if; end if; end if; quando ocorreto seria usar apenas UM end if. 2 - Em PL/SQL o operador booleano de diferente não se representa por !=, mas sim por <> 3 - A tua quarta linha a contar do fim será else (dbms_output.put_line('O pedido já foi avaliado')); Espero ter ajudado, Cumprimentos 1 Report
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now