ERROR na linha 37: PLS-00103

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
velosao
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qui, 27 Mai 2010 10:51 am
Localização: Florianópolis - SC

Gostaria de uma ajuda. Estou tentando criar uma procedure para inserir uma nova conta e determinar automaticamente a conta mãe.

Selecionar tudo

create table planoconta(
  id int primary key,
  conta varchar(10) not null,
  mae varchar(10)
)


create or replace procedure InserePlanoConta(p_conta varchar) is

begin 
  
  insert into planoconta values(seq_planoconta.nextval, conta, 0);
end;

  procedure AtualizaPlanoConta is
  begin
  select length(conta) from planoconta into p_conta;
 
     if p_conta > 4 then
                         
        update planoconta
        set mae = p_conta -4
        where conta = p_conta;
     else
  
        if p_conta > 1 and p_conta <= 4 then
                             
        update planoconta
        set mae = p_conta -3
        where conta = p_conta;
        else 
 
           if p_conta = 1 then          
           
           update planoconta
           set mae = null
           where conta = p_conta; 

           end if;

        end if;

     end if;
   end;
/
Está dando o seguinte erro:

Selecionar tudo

ERROR na linha 37: PLS-00103: Encontrado o símbolo "end-of-file" quando um dos seguintes símbolos era esperado:

   begin function package pragma procedure form
O erro indica que eu devo criar uma package. Mas eu creio que dá pra solucionar este caso apenas com uso de procedure.

Por isso peço uma ajuda.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Mensagens de erro PLS-xxxxx em geral são erros de sintaxe. E de fato tem vários erros ali.

- Não tem ; no create table.
- A atualizaplanoconta não está com o "create or replace"
- o Select está incorreto com o into depois do from, quando deveria estar antes.

Talvez tenha mais coisas, mas foi o que enxerguei rapidamente passando o olho.
velosao
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qui, 27 Mai 2010 10:51 am
Localização: Florianópolis - SC

refiz o código e consegui criar a procedure, mas na hora de executar dá o seguinte erro :

Selecionar tudo

ORA-06550: linha 2, coluna 1:
PLS-00905: o objeto SYSTEM.INSEREPLANOCONTA é inválido
ORA-06550: linha 2, coluna 1:
PL/SQL: Statement ignored

Selecionar tudo

create or replace procedure InserePlanoConta(p_conta varchar) is

  procedure AtualizaPlanoConta is
  begin
  select length(conta) into p_conta from planoconta;
 
     if p_conta > 4 then
                         
        update planoconta
        set mae = p_conta -4
        where conta = p_conta;
     else
  
        if p_conta > 1 and p_conta <= 4 then
                             
        update planoconta
        set mae = p_conta -3
        where conta = p_conta;
        else 
 
           if p_conta = 1 then          
           
           update planoconta
           set mae = null
           where conta = p_conta; 

           end if;

        end if;

     end if;
   end;
   
begin 
    insert into planoconta values(seq_planoconta.nextval, conta, 0);
end;
/

begin
InserePlanoConta('1.01');
end;
Agradeço a ajuda!
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Não entendi o motivo de ter aquela procedure dentro da outra.


Na linha abaixo, acho que deveria ser p_conta no values, pois conta não existe no declare.

Selecionar tudo

insert into planoconta values(seq_planoconta.nextval, conta, 0); 
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Google Adsense [Bot] e 9 visitantes