Chamada de Procedures no Forms

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Adimari
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 05 Set 2008 6:20 pm
Localização: São Paulo

Oi, tenho o seguinte codigo em um form:

Selecionar tudo

PROCEDURE VERIFICA_PLACA IS

BEGIN
  DECLARE
    
    W_COUNT                      NUMBER(04) := 0;
    P_COD_CIA                    NUMBER;
    P_PLACA                      VARCHAR2(10);
    P_FEC_VIGENCIA               VARCHAR2(8);
    OUT_CTR_COD_CONTRATO         NUMBER(6);   --CÓDIGO DO CONTRATO DA EMPRESA
    OUT_APO_NRO_APOLICE          NUMBER(13);  --NÚMERO DA APÓLICE
    OUT_SUC_COD_SUCURSAL         NUMBER(6);   --CÓDIGO DA SUCURSAL/AGÊNCIA
    OUT_COR_COD_CORRETOR         NUMBER(5);   --CÓDIGO DO CORRETOR
    OUT_APO_NRO_ENDOSSO          NUMBER(5);   --NÚMERO DO ENDOSSO DA APÓLICE
    OUT_APO_VIGENCIA_INI         DATE;        --DATA INICIAL DA VIGÊNCIA DO BEM SEGURADO
    OUT_APO_VIGENCIA_FIM         DATE;        --DATA FINAL DA VIGÊNCIA DO BEM SEGURADO
    OUT_TPR_COD_PRODUTO          NUMBER(3);   --CÓDIGO DO TIPO DE PRODUTO
    OUT_USU_CGC_CPF              NUMBER(18);  --CGC/CPF DO USUÁRIO
    OUT_APO_FEC_EMISSAO          VARCHAR2(10);
    OUT_BSE_PLACA_VEICULO        VARCHAR2(10);--PLACA DO VEÍCULO
    OUT_BSE_CHASSIS              VARCHAR2(30);--CHASSIS DO VEÍCULO
    OUT_BSE_COD_RISCO            NUMBER(4);   --RISCO DO BEM SEGURADO
    OUT_BSE_NOME_COND_HABITUAL   VARCHAR2(30);--NOME DO CONDUTOR HABITUAL
    OUT_APO_NRO_LIGACAO_você       NUMBER(14);  --NÚMERO QUE A VERA CRUZ USA COMO CHAVE DE LIGAÇÃO    
    OUT_APO_COD_ENDOSSO          NUMBER(3);   --CÓDIGO DO ENDOSSO       
    OUT_USU_NOME_USU             VARCHAR2(30);--NOME DO USUÁRIO         
    OUT_USU_DDD_RES              VARCHAR2(3); --DDD DO USUÁRIO           
    OUT_USU_TEL_RES              VARCHAR2(8); --TELEFONE DO USUÁRIO           
    OUT_EMP_END_LOGO_TELAS       NUMBER(4);
    OUT_TCV_COD_CONV             NUMBER(3);   --CÓDIGO DO TIPO DE CONVÊNIO         
    OUT_BSE_MARCA_VEICULO        VARCHAR2(60);--MARCA DO VEÍCULO
    OUT_BSE_ANO_MOD_VEIC         NUMBER(4);   --ANO DO MODELO DO VEÍCULO    
    OUT_BSE_ZERO_KM              VARCHAR2(1); --SE O VEÍCULO É 0KM? SIM/NÃO     
    OUT_APO_SEG_RISCO            VARCHAR2(1); --INDICA SE A APÓLICE É DE SEGUNDO RISCO. S/N.
    
    

  CURSOR C1 (P_COD_CIA NUMBER
              ,P_PLACA VARCHAR2
              ,P_FEC_VIGENCIA VARCHAR2) IS
  SELECT * FROM
   PKG_IDENTIFICA_SEGURADO.PRC_IDENTIFICA_PLACA (P_COD_CIA,
                                    P_PLACA,
                                    P_FEC_VIGENCIA,
                                    OUT_CTR_COD_CONTRATO,
                                    OUT_APO_NRO_APOLICE,
                                    OUT_SUC_COD_SUCURSAL,
                                    OUT_COR_COD_CORRETOR,
                                    OUT_APO_NRO_ENDOSSO,
                                    OUT_APO_VIGENCIA_INI,
                                    OUT_APO_VIGENCIA_FIM,
                                    OUT_TPR_COD_PRODUTO,
                                    OUT_USU_CGC_CPF,
                                    OUT_APO_FEC_EMISSAO,
                                    OUT_BSE_PLACA_VEICULO,
                                    OUT_BSE_CHASSIS,
                                    OUT_BSE_COD_RISCO,
                                    OUT_BSE_NOME_COND_HABITUAL,
                                    OUT_APO_NRO_LIGACAO_você,    
                                    OUT_APO_COD_ENDOSSO,       
                                    OUT_USU_NOME_USU,          
                                    OUT_USU_DDD_RES,           
                                    OUT_USU_TEL_RES,           
                                    OUT_EMP_END_LOGO_TELAS,
                                    OUT_TCV_COD_CONV,          
                                    OUT_BSE_MARCA_VEICULO,
                                    OUT_BSE_ANO_MOD_VEIC,    
                                    OUT_BSE_ZERO_KM,     
                                    OUT_APO_SEG_RISCO);
                                    
    R1 C1%ROWTYPE;
    
   
    
  BEGIN
     GO_BLOCK('USU_PESQ');
     FIRST_RECORD;
    
     FOR R1 IN C1 LOOP

        	
           OPEN C1( R1.P_COD_CIA
                   ,R1.P_PLACA
                   ,R1.P_FEC_VIGENCIA);
           FETCH C1 INTO R1;
           
           LOOP
               EXIT WHEN C1%NOTFOUND;
               :USU_PESQ.PLACA                   := R1.OUT_BSE_PLACA_VEICULO;
               :USU_PESQ.NOME_CONDUTOR_HABITUAL  := R1.OUT_BSE_NOME_COND_HABITUAL;
               :USU_PESQ.CHASSIS                 := R1.OUT_BSE_CHASSIS;
               :USU_PESQ.RISCO                   := R1.OUT_BSE_COD_RISCO;
               :USU_PESQ.APOLICE                 := R1.OUT_APO_NRO_APOLICE;
               :USU_PESQ.SUCURSAL                := R1.OUT_SUC_COD_SUCURSAL;
               :USU_PESQ.CORRETOR                := R1.OUT_COR_COD_CORRETOR;
               :USU_PESQ.NRO_LIGACAO_você          := R1.OUT_APO_NRO_LIGACAO_você;
               :USU_PESQ.NRO_ENDOSSO             := R1.OUT_APO_NRO_ENDOSSO;
               :USU_PESQ.COD_ENDOSSO             := R1.OUT_APO_COD_ENDOSSO;
               :USU_PESQ.NOME                    := R1.OUT_USU_NOME_USU;
               :USU_PESQ.DDD_USUARIO             := R1.OUT_USU_DDD_RES;
               :USU_PESQ.TEL_USUARIO             := R1.OUT_USU_TEL_RES;
               :USU_PESQ.CONTRATO                := R1.OUT_CTR_COD_CONTRATO;
               :USU_PESQ.CGC_CPF                 := R1.OUT_USU_CGC_CPF;
               :USU_PESQ.END_LOGO_EMPRESA        := R1.OUT_EMP_END_LOGO_TELAS;
               :USU_PESQ.TCV_COD_CONV            := R1.OUT_TCV_COD_CONV;
               :USU_PESQ.APO_VIGENCIA_INI        := R1.OUT_APO_VIGENCIA_INI;
               :USU_PESQ.APO_VIGENCIA_FIM        := R1.OUT_APO_VIGENCIA_FIM;
               :USU_PESQ.MODELO                  := R1.OUT_BSE_MARCA_VEICULO;
               :USU_PESQ.ANO_VEIC                := R1.OUT_BSE_ANO_MOD_VEIC;
               :USU_PESQ.BSE_ZERO_KM             := R1.OUT_BSE_ZERO_KM;
               :USU_PESQ.TPR_COD_PRODUTO         := R1.OUT_TPR_COD_PRODUTO;  
               :USU_PESQ.APO_SEG_RISCO           := R1.OUT_APO_SEG_RISCO;
               
               NEXT_RECORD;
               W_COUNT := W_COUNT + 1;
               FETCH C1 INTO R1;
           END LOOP;
           CLOSE C1;

     END LOOP;
     FIRST_RECORD;
     IF W_COUNT = 1 THEN
        ENVIA_DADOS_USUARIO;
        VERIFICA_CONTATOS;
     ELSIF W_COUNT  = 0 THEN
        VERIFICA_CONTATOS;
     ELSE
       GO_BLOCK('USU_PESQ');
     END IF;
  END;

END;

Ele chama uma procedure que está dentro de uma package, mas não esta´executando, o erro aparece na chamada, tentei converter o tipo data deste parâmetro P_FEC_VIGENCIA mas nem assim funcionou, alguém pode me ajudar?

Abraços
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Tenta trocar o codigo:

Selecionar tudo

PROCEDURE VERIFICA_PLACA IS
BEGIN
DECLARE 
por somente

Selecionar tudo

PROCEDURE VERIFICA_PLACA IS
Adimari
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 05 Set 2008 6:20 pm
Localização: São Paulo

Não deu certo,

porém o parâmetro p_fec_vigencia recebe data e hora, esta como varchar2, no form a data tem mascara DD/MM/AAAA, mas a hora não e essa proc busca data e hora numa string, le e separa.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Qual o erro que aparece na chamada?
JOPA
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 58
Registrado em: Sex, 30 Out 2009 9:52 am
Localização: Salvador - BA
Contato:
Atenciosamente,

João Paulo A. C. do Bomfim

"Deu certo? Deixa! Funcionou? Não mexa!"

Tira o BEGIN da linha 3 e o DECLARE da linha 4.

Caso tenha algum outro erro posta aqui.
JOPA
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 58
Registrado em: Sex, 30 Out 2009 9:52 am
Localização: Salvador - BA
Contato:
Atenciosamente,

João Paulo A. C. do Bomfim

"Deu certo? Deixa! Funcionou? Não mexa!"

Aumente P_FEC_VIGENCIA de VARCHAR2(8) para VARCHAR2(10),
pois, se a data vinda do Forms for 16/12/2009, por exemplo,
temos aí 10 caracters contando com << / >>.
Adimari
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 05 Set 2008 6:20 pm
Localização: São Paulo

Não deu certo....

estou chegando a duvidar se e assim que se chama uma procedure/package, hehehe

alguém tem alguma sugestão?
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

se você falasse que erro que é ficaria beeeeeeeeeeeeeeeeeem mais facil
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara posta o erro aew.
Adimari
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 05 Set 2008 6:20 pm
Localização: São Paulo

Selecionar tudo

error-103: Encountered the symbol "." when expecting one of the following:

contact exception <an identifier>
<a doule-quoted delimited-identifier> table LONG_double ref
char binary national  character nchar
The symbol "<an identifier>" was substituted for "." to continue...

aparece bem na chamada da proc
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

cara, um cursor não consegue chamar uma procedure, somente consegue chamar uma FUNCTION.

se eu entendi o seu codigo...
JOPA
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 58
Registrado em: Sex, 30 Out 2009 9:52 am
Localização: Salvador - BA
Contato:
Atenciosamente,

João Paulo A. C. do Bomfim

"Deu certo? Deixa! Funcionou? Não mexa!"

Adimari,

Como é que você está chamando essa procedure?
..como é que está o código da trigger que a chama?
..o problema deve estar nesse código de chamada.

Se a procedure estiver em Program Units no Forms ou no Banco,
na sua trigger basta chamar com o nome da procedure. Um exemplo bem simples é:

Selecionar tudo

BEGIN
   VERIFICA_PLACA;   
END;
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara me parece que o erro ta na hora que tu abre o teu cursor.

Tu ta passando R1.P_COD_CIA e outros valores de R1 como parâmetro.

Só que eu imagino que existe um momento onde R1 não existe ainda pois não foi feito nenhum fetch nele ainda.
Adimari
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 05 Set 2008 6:20 pm
Localização: São Paulo

oi gente, já resolvi o problema, era um campo input que não estava recebendo nada.....

Obrigada pela ajuda
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes