Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcoridolphi

Erro PLS-00103:

Recommended Posts

Bom dia,

Quando tento compilar a a procedure ele da erro PLS-00103.

Segue a procedure.

 

 

CREATE OR REPLACE PROCEDURE SP_MAPR

AS
 P_CODUSUARIO          VARCHAR(20);
  P_CODCOLIGADA         NUMBER(5);
  P_CODSISTEMA          VARCHAR2(1);
  P_NOME                VARCHAR2(45);
  P_CODPERFIL           VARCHAR2(15);
  P_STATUS              NUMBER(5);
  P_DATAINICIO          DATE;
  P_SENHA               VARCHAR2(8);
  P_CODACESSO           VARCHAR2(16);
  P_OBRIGAALTERARSENHA  VARCHAR2(1);
  P_SUPERVISOR          NUMBER(5);
  P_CRIARELAT           NUMBER(5);
  P_INDICE              NUMBER(5);
  P_COUNT               NUMBER(5);


  CURSOR FUNCIONARIOS IS


                      SELECT PFCOMPL.ATTYED,PFUNC.CODCOLIGADA, PFUNC.NOME, PFUNC.DATAADMISSAO, PPESSOA.CPF
                      FROM PFUNC
                      INNER JOIN PPESSOA ON PFUNC.CODPESSOA=PPESSOA.CODIGO
                      INNER JOIN PFCOMPL ON PFUNC.CODCOLIGADA = PFCOMPL.CODCOLIGADA AND PFUNC.CHAPA = PFCOMPL.CHAPA
                      WHERE PFUNC.CODCOLIGADA=178 AND PFUNC.CHAPA='FRI-01-005'
                      ORDER BY PFCOMPL.ATTYED
                      ;
BEGIN
    OPEN FUNCIONARIOS;
    FETCH FUNCIONARIOS INTO P_CODUSUARIO,P_CODCOLIGADA,P_CODSISTEMA,P_NOME,P_CODPERFIL,P_STATUS,P_DATAINICIO,P_SENHA,
                            P_CODACESSO,P_OBRIGAALTERARSENHA,P_SUPERVISOR,P_CRIARELAT,P_INDICE;
    LOOP
    EXIT WHEN P_CODUSUARIO%NOTFOUND;


         SELECT COUNT(*) INTO P_COUNT FROM GUSUARIO WHERE GUSUARIO.CODCOLIGADA = P_CODCOLIGADA AND  GUSUARIO.CODUSUARIO = P_CODUSUARIO;


                IF P_COUNT = 0 THEN


                   INSERT INTO GUSUARIO (CODUSUARIO ,NOME ,STATUS ,DATAINICIO ,SENHA  ,CODACESSO ,OBRIGAALTERARSENHA )
                   VALUES (P_CODUSUARIO, P_NOME, 1, P_DATAINICIO , 'VBTxJFha',  'Default', 'F');
                COMMIT;
               END IF;
    FETCH FUNCIONARIOS INTO P_CODUSUARIO,P_CODCOLIGADA,P_CODSISTEMA,P_NOME,P_CODPERFIL,P_STATUS,P_DATAINICIO,P_SENHA,
                            P_CODACESSO,P_OBRIGAALTERARSENHA,P_SUPERVISOR,P_CRIARELAT,P_INDICE;
   END LOOP;
   CLOSE FUNCIONARIOS;
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Do manual

 

 

 

  • PLS-00103: string
  • Cause: This error message is from the parser. It found a token (language element) that is inappropriate in this context.
  • Action: Check previous tokens as well as the one given in the error message. The line and column numbers given in the error message refer to the end of the faulty language construct.

 

 

Em que linha dá o erro ?

Em geral o compilador aponta a linha.

Parece ser algo numa string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi

Estava faltando o END; no final e apos isso deu mais erros.

 

Compilation errors for PROCEDURE RM.SP_MAPR
Error: PLS-00394: wrong number of values in the INTO list of a FETCH statement
Line: 29
Text: FETCH FUNCIONARIOS INTO P_CODUSUARIO,P_CODCOLIGADA,P_CODSISTEMA,P_NOME,P_CODPERFIL,P_STATUS,P_DATAINICIO,P_SENHA,
Error: PL/SQL: SQL Statement ignored
Line: 29
Text: FETCH FUNCIONARIOS INTO P_CODUSUARIO,P_CODCOLIGADA,P_CODSISTEMA,P_NOME,P_CODPERFIL,P_STATUS,P_DATAINICIO,P_SENHA,
Error: PLS-00324: cursor attribute may not be applied to non-cursor 'P_CODUSUARIO'
Line: 33
Text: EXIT WHEN P_CODUSUARIO%NOTFOUND;
Error: PL/SQL: Statement ignored
Line: 33
Text: EXIT WHEN P_CODUSUARIO%NOTFOUND;
Error: PLS-00394: wrong number of values in the INTO list of a FETCH statement
Line: 43
Text: FETCH FUNCIONARIOS INTO P_CODUSUARIO,P_CODCOLIGADA,P_CODSISTEMA,P_NOME,P_CODPERFIL,P_STATUS,P_DATAINICIO,P_SENHA,
Error: PL/SQL: SQL Statement ignored
Line: 43
Text: FETCH FUNCIONARIOS INTO P_CODUSUARIO,P_CODCOLIGADA,P_CODSISTEMA,P_NOME,P_CODPERFIL,P_STATUS,P_DATAINICIO,P_SENHA,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em geral não uso cursor, prefiro o for

 

 

...

 


FOR R_EXEMPLO IN (SELECT *
                  FROM TABELA
                  WHERE ...)
  LOOP
    --FAZ O QUE PRECISA
  END LOOP;

 

O compilador otimiza ,e não tem de preocupação com abrir, fechar etc.

 

Só em alguns casos (zilhões de registros) o uso deve ser repensado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.