Procedure para retornar select Simples

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
jrromano23
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Sex, 12 Nov 2010 11:48 am
Localização: São Paulo, SP
Consultor
PMI Certified

Boa tarde,

Preciso da ajuda de vocês.
Preciso desenvolver uma procedure que retorna selects simples.
O que fiz até agora esta abaixo.

Selecionar tudo

Create or replace PROCEDURE Conciliacao 
(p_dt_ini in DATE, 
p_dt_fim in DATE, 
p_cod_estab in VARCHAR2, 
p_cod_empresa in VARCHAR2, 
tipo_movimento in char, 
merc_serv in char, 
nr_docto in number)

/*
p_dt_ini - Data inicial para intervalo de consulta
p_dt_fim - Data final para intervalo de consulta.
p_cod_estab - Codigo do estabelecimento  
p_cod_empresa - Codigo da empresa
tipo_movimento - Informa se documento é de entrada ou saida
9 - Saída
1 a 8 - Entrada
merc_serv - Informa deverá ser informada com as seguintes condiçoes
1 - Mercadoria
2 - Serviços
3 - Conjugada 
nr_docto - Número documento fiscal
*/
is 
Begin



if merc_serv = 1 then 

select 
IDENT_DOCTO_FISCAL, 
COD_EMPRESA,
COD_ESTAB,
DATA_FISCAL,
MOVTO_E_S,
NORM_DEV,
IDENT_DOCTO,
IDENT_FIS_JUR,
NUM_DOCFIS,
SERIE_DOCFIS,
IDENT_PRODUTO,
IDENT_UND_padrão,
NUM_ITEM,
IDENT_CFO,
IDENT_NBM,
QUANTIDADE,
IDENT_MEDIDA,
VLR_UNIT,
VLR_ITEM,
VLR_DESCONTO,
VLR_FRETE,
VLR_SEGURO,
IDENT_SITUACAO_A,
IDENT_SITUACAO_B,
IDENT_FEDERAL,
PESO_LIQUIDO,
ALIQ_TRIBUTO_ICMS,
VLR_TRIBUTO_ICMS,
ALIQ_TRIBUTO_IPI,
VLR_TRIBUTO_IPI,
VLR_BASE_ICMS_1,
VLR_BASE_ICMS_2,
VLR_BASE_ICMS_3,
VLR_BASE_ICMS_4,
VLR_BASE_IPI_1,
VLR_BASE_IPI_2,
VLR_BASE_IPI_3,
VLR_BASE_IPI_4,
VLR_CONTAB_ITEM,
VLR_OUTROS_ICMS,
VLR_OUTROS_IPI,
COD_PAIS_DEST_ORIG,
COD_TRIB_INT,
VLR_ICMS_NDESTAC,
VLR_IPI_NDESTAC,
VLR_BASE_PIS,
VLR_PIS,
VLR_BASE_COFINS,
VLR_COFINS,
QTD_EMBARCADA,
DAT_REGISTRO_EXP,
DAT_DI,
NUM_DEC_IMP_REF,
IND_MOV_FIS,
NUM_DOCFIS_REF,
SERIE_DOCFIS_REF,
SSERIE_DOCFIS_REF,
VLR_BASE_CSLL,
VLR_ALIQ_CSLL,
VLR_CSLL,
VLR_ALIQ_PIS,
VLR_ALIQ_COFINS,
COD_TRIB_IPI,
COD_CLASS_ITEM,
COD_SITUACAO_PIS,
COD_SITUACAO_COFINS
from dwt_itens_merc where
data_fiscal between p_dt_ini and p_dt_fim   
and movto_e_s = tipo_movimento 
and cod_empresa = p_cod_empresa 
and cod_estab = p_cod_estab; 
--and num_docfis = nr_docto; 

End if;
 
if merc_serv = 2 then

select 
IDENT_DOCTO_FISCAL, 
COD_EMPRESA,
COD_ESTAB,
DATA_FISCAL,
MOVTO_E_S,
NORM_DEV,
IDENT_DOCTO,
IDENT_FIS_JUR,
NUM_DOCFIS,
SERIE_DOCFIS,
SUB_SERIE_DOCFIS,
IDENT_SERVICO,
NUM_ITEM,
IDENT_CFO,
QUANTIDADE,
VLR_UNIT,
VLR_SERVICO,
VLR_DESCONTO,
VLR_TOT,
ALIQ_TRIBUTO_IR,
VLR_TRIBUTO_IR,
ALIQ_TRIBUTO_ISS,
VLR_TRIBUTO_ISS,
VLR_BASE_IR_1,
VLR_BASE_IR_2,
VLR_BASE_ISS_1,
VLR_BASE_ISS_2,
VLR_BASE_ISS_3,
VLR_BASE_CSLL,
VLR_ALIQ_CSLL,
VLR_CSLL,
VLR_BASE_PIS,
VLR_ALIQ_PIS,
VLR_PIS,
VLR_BASE_COFINS,
VLR_ALIQ_COFINS,
VLR_COFINS,
COD_TRIB_ISS,
VLR_MAT_PROP,
VLR_MAT_TERC,
VLR_BASE_ISS_RETIDO,
VLR_ISS_RETIDO,
VLR_DEDUCAO_ISS,
VLR_SUBEMPR_ISS,
COD_SITUACAO_PIS,
COD_SITUACAO_COFINS,
VLR_PIS_EXP,
VLR_PIS_TRIB,
VLR_PIS_N_TRIB,
VLR_COFINS_EXP,
VLR_COFINS_TRIB,
VLR_COFINS_N_TRIB  
from dwt_itens_serv 
where data_fiscal between p_dt_ini and p_dt_fim  
and movto_e_s = tipo_movimento 
and cod_empresa = p_cod_empresa 
and cod_estab = p_cod_estab; 
--and num_docfis = nr_docto; 

end if;

if merc_serv = 3 then

select 
m.IDENT_DOCTO_FISCAL, 
m.COD_EMPRESA,
m.COD_ESTAB,
m.DATA_FISCAL,
m.MOVTO_E_S,
m.NORM_DEV,
m.IDENT_DOCTO,
m.IDENT_FIS_JUR,
m.NUM_DOCFIS,
m.SERIE_DOCFIS,
m.IDENT_PRODUTO,
m.IDENT_UND_padrão,
m.NUM_ITEM,
m.IDENT_CFO,
m.IDENT_NBM,
m.QUANTIDADE,
m.IDENT_MEDIDA,
m.VLR_UNIT,
m.VLR_ITEM,
m.VLR_DESCONTO,
m.VLR_FRETE,
m.VLR_SEGURO,
m.IDENT_SITUACAO_A,
m.IDENT_SITUACAO_B,
m.IDENT_FEDERAL,
m.PESO_LIQUIDO,
m.ALIQ_TRIBUTO_ICMS,
m.VLR_TRIBUTO_ICMS,
m.ALIQ_TRIBUTO_IPI,
m.VLR_TRIBUTO_IPI,
m.VLR_BASE_ICMS_1,
m.VLR_BASE_ICMS_2,
m.VLR_BASE_ICMS_3,
m.VLR_BASE_ICMS_4,
m.VLR_BASE_IPI_1,
m.VLR_BASE_IPI_2,
m.VLR_BASE_IPI_3,
m.VLR_BASE_IPI_4,
m.VLR_CONTAB_ITEM,
m.VLR_OUTROS_ICMS,
m.VLR_OUTROS_IPI,
m.COD_PAIS_DEST_ORIG,
m.COD_TRIB_INT,
m.VLR_ICMS_NDESTAC,
m.VLR_IPI_NDESTAC,
m.VLR_BASE_PIS,
m.VLR_PIS,
m.VLR_BASE_COFINS,
m.VLR_COFINS,
m.QTD_EMBARCADA,
m.DAT_REGISTRO_EXP,
m.DAT_DI,
m.NUM_DEC_IMP_REF,
m.IND_MOV_FIS,
m.NUM_DOCFIS_REF,
m.SERIE_DOCFIS_REF,
m.SSERIE_DOCFIS_REF,
m.VLR_BASE_CSLL,
m.VLR_ALIQ_CSLL,
m.VLR_CSLL,
m.VLR_ALIQ_PIS,
m.VLR_ALIQ_COFINS,
m.COD_TRIB_IPI,
m.COD_CLASS_ITEM,
m.COD_SITUACAO_PIS,
m.COD_SITUACAO_COFINS,
s.IDENT_DOCTO_FISCAL, 
s.COD_EMPRESA,
s.COD_ESTAB,
s.DATA_FISCAL,
s.MOVTO_E_S,
s.NORM_DEV,
s.IDENT_DOCTO,
s.IDENT_FIS_JUR,
s.NUM_DOCFIS,
s.SERIE_DOCFIS,
s.SUB_SERIE_DOCFIS,
s.IDENT_SERVICO,
s.NUM_ITEM,
s.IDENT_CFO,
s.QUANTIDADE,
s.VLR_UNIT,
s.VLR_SERVICO,
s.VLR_DESCONTO,
s.VLR_TOT,
s.ALIQ_TRIBUTO_IR,
s.VLR_TRIBUTO_IR,
s.ALIQ_TRIBUTO_ISS,
s.VLR_TRIBUTO_ISS,
s.VLR_BASE_IR_1,
s.VLR_BASE_IR_2,
s.VLR_BASE_ISS_1,
s.VLR_BASE_ISS_2,
s.VLR_BASE_ISS_3,
s.VLR_BASE_CSLL,
s.VLR_ALIQ_CSLL,
s.VLR_CSLL,
s.VLR_BASE_PIS,
s.VLR_ALIQ_PIS,
s.VLR_PIS,
s.VLR_BASE_COFINS,
s.VLR_ALIQ_COFINS,
s.VLR_COFINS,
s.COD_TRIB_ISS,
s.VLR_MAT_PROP,
s.VLR_MAT_TERC,
s.VLR_BASE_ISS_RETIDO,
s.VLR_ISS_RETIDO,
s.VLR_DEDUCAO_ISS,
s.VLR_SUBEMPR_ISS,
s.COD_SITUACAO_PIS,
s.COD_SITUACAO_COFINS,
s.VLR_PIS_EXP,
s.VLR_PIS_TRIB,
s.VLR_PIS_N_TRIB,
s.VLR_COFINS_EXP,
s.VLR_COFINS_TRIB,
s.VLR_COFINS_N_TRIB
from
dwt_itens_merc m,
dwt_itens_serv s where 
data_fiscal  between p_dt_ini and p_dt_fim
and movto_e_s = tipo_movimento 
and cod_empresa = p_cod_emp 
and cod_estab = p_cod_estab 
--and num_docfis = nr_docto 
and m.IDENT_DOCTO_FISCAL = s.IDENT_DOCTO_FISCAL; 


end if; 


END Conciliacao;
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

Dá uma olhada no tópico abaixo, a respeito de cursor variable como retorno de procedures:
http://glufke.net/oracle/viewtopic.php?t=7090
jrromano23
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Sex, 12 Nov 2010 11:48 am
Localização: São Paulo, SP
Consultor
PMI Certified

Obrigado pela resposta.
É necessario a criação de uma package? Por tem que ser um procedure simples, pois um processo do SAP vai chamar a procedure e pegar os resultados do select.
Ou seja só preciso de uma rotina que realiza selects quando for chamada.

Você podeia me dar um exemplo?

Abraço
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, como foi te passado no link tu vai precisar de um ref_cursor pra retornar os resultados do select.

Existe também a possibilidade de tu montar uma função pipelined e fazer o select nela.

Ou ainda pode fazer inserção em uma temporária e buscar os dados por select também

Não sei o que ficaria melhor para sua situação, só você avaliando mesmo.

Segue um link com exemplo de como montar uma pipelined aí:
http://glufke.net/oracle/viewtopic.php? ... =pipelined

Se tiver algum problema em montar alguma coisa posta aí.
Responder
  • Informação
  • Quem está online

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