Procedure com operador IN

28/03/2014

0

Olá Pessoal, será que alguém pode me ajudar ? Estou executando essa pkg de uma aplicação C#, porém não dá erro, mas não consigo executar quando informa o parametro V_EQPIDE. Pela minha aplicação C# estou enviando assim:
parameters.Add("V_ANO", V_ANO);
parameters.Add("V_MES_ANO", V_MES);
parameters.Add("V_EQPIDE", V_EQPIDE);

Sendo que estão da seguinte forma:
parameters.Add("V_ANO", 2013);
parameters.Add("V_MES_ANO", "<TODOS>");
parameters.Add("V_EQPIDE", "01,02,03");

O insert com o Select não está funcionando, alguém saberia como eu informo esse campo AND EBM_EQP_IDE in (V_EQPIDE);

create or replace
PACKAGE BODY PKG_REL_IND_PRODUTIVIDADE AS

PROCEDURE SP_RELACAO_HORAS_PRODTV_INSERT (
V_ANO IN INT,
V_MESIN VARCHAR2,
V_EQPIDE IN VARCHAR2) IS

BEGIN

DELETE FROM TFTSSYSTEM.CRT_REL_PIFAT
WHERE QEM_INCLUIU = USER;

COMMIT;

INSERT INTO TFTSSYSTEM.CRT_REL_PIFAT
SELECT *
FROM EXTRATO_PROD_GERAL_BI_MOD
WHERE EBM_ANO = V_ANO
AND (V_MES= '<TODOS>' OR EBM_MES_ANO = V_MES)
AND EBM_EQP_IDE in (V_EQPIDE);

COMMIT;



END SP_RELACAO_HORAS_PRODTV_INSERT;

END PKG_REL_IND_PRODUTIVIDADE;
Jaqueline

Jaqueline

Responder

Posts

28/03/2014

Deivison Melo

imagino que já tenha criado o corpo de sua PACKAGE, certo?

Então vamos lá...

create or replace
PACKAGE BODY PKG_REL_IND_PRODUTIVIDADE AS

PROCEDURE SP_RELACAO_HORAS_PRODTV_INSERT (
    V_ANO IN INT,
    V_MES IN VARCHAR2,
    V_EQPIDE IN VARCHAR2
    ) IS 

BEGIN 

    DELETE FROM TFTSSYSTEM.CRT_REL_PIFAT
      WHERE QEM_INCLUIU = USER; -- A VARIÁVEL USER PEGA O USUARIO LOGADO NA SEÇÃO ATUAL

    --COMMIT; GERALMENTE USA-SE O COMMIT FORA DA PROCEDURE...

  INSERT INTO TFTSSYSTEM.CRT_REL_PIFAT 
   SELECT * -- AO INVES DO CORINGA * USAR OS CAMPOS QUANDO USA DESSA FORMA TEM Q COLOCAR TODOS NA MESMA ORDEM...
     FROM EXTRATO_PROD_GERAL_BI_MOD
    WHERE EBM_ANO = V_ANO
      AND (V_MES= '<TODOS>' OR EBM_MES_ANO = V_MES) 
      AND EBM_EQP_IDE in (V_EQPIDE);

   --COMMIT; GERALMENTE USA-SE O COMMIT FORA DA PROCEDURE...




END SP_RELACAO_HORAS_PRODTV_INSERT;

END PKG_REL_IND_PRODUTIVIDADE;



Por favor, postar o código do erro!!
Responder

31/03/2014

Jaqueline

Então não apresenta erro, apenas não executa o insert, só o delete.
Responder

14/04/2014

Marisiana Battistella

Você testou o INSERT separadamente para ver se ele funciona?

Sugiro faça as alterações que o Deivison mencionou e ainda utilize exceptions para verificar erros do DELETE e no INSERT.
Assim se não deletar você deverá impedir que tente inserir. Se deletar, mas não inserir, você deverá desfazer tudo.
Se você não utilizar o tratamento de exceções, correrá o risco de não executar o procedimento por completo gerando erros nos dados armazenados.
Responder

05/05/2014

Marisiana Battistella

Jaqueline, vc conseguiu resolver o problema?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar