- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 10 anos, 5 meses atrás por rman.
-
AutorPosts
-
12 de junho de 2014 às 9:31 pm #106700Tadeu Rodrigues de OliveiraParticipante
Meus caros, boa tarde.
Sou novato aqui e também no ORACLE, sendo assim conto com a compreensão e colaboração dos colegas.É possível no ORACLE eu montar uma query onde no SELECT eu faça referência a uma STORE PROCEDURE como no exemplo abaixo?
SELECT * FROM
WHERE Segue abaixo o código da STORE PROCEDURE
Desde já agradeço a todos.
Atenciosamente,
Tadeu
CREATE OR REPLACE PROCEDURE MGCLI.P_GERA_REL_KARDEX(PRESULT IN OUT SYS_REFCURSOR,
PORG_COD INTEGER,
PFIL_COD INTEGER,
PDTA_INI STRING,
PDTA_FIM STRING,
PPRO_PAD INTEGER,
PPRO_COD INTEGER,
PPRO_FIM INTEGER,
PCRI_COD INTEGER,
PTPO_CUS INTEGER,
PALM_PAD INTEGER := NULL,
PALM_COD INTEGER := NULL,
PLOC_COD INTEGER := NULL,
PCOMP STRING,
PFISICOKARDEX VARCHAR2 := 'K',
PNAT_PAD INTEGER := NULL,
PNAT_COD STRING := NULL,
PRESERVAS VARCHAR2 DEFAULT 'S',
PTRANSFERENCIAS VARCHAR2 DEFAULT 'S') IS
VALM_PAD NUMBER;
VNAT_PAD NUMBER;
vpro_pad NUMBER;BEGIN
IF (PALM_COD IS NULL) OR (PALM_COD = 0) THEN
VALM_PAD := NULL;
ELSE
VALM_PAD := PALM_PAD;
END IF;IF (PNAT_COD IS NULL) OR (PNAT_COD = ' ') THEN
VNAT_PAD := NULL;
ELSE
VNAT_PAD := PNAT_PAD;
END IF;vpro_pad := mgglo.pck_mega.ACHAPADRAODATABELA(pfil_cod,100,trunc(sysdate));
MGADM.EST_PCK_KARDEX.GETKARDEX(PRESULT, PORG_COD,
pfil_cod, to_date(pdta_ini, 'dd/mm/rrrr'),
to_date(pdta_fim, 'dd/mm/rrrr'), vpro_pad,
ppro_cod, ppro_fim,
pcri_cod, ptpo_cus,
valm_pad, palm_cod,
ploc_cod, pcomp,
pfisicokardex, vnat_pad,
pnat_cod, preservas,
ptransferencias);OPEN PRESULT FOR
SELECT a.ORG_TAB_IN_CODIGO,
a.ORG_PAD_IN_CODIGO,
a.ORG_IN_CODIGO,
a.ORG_TAU_ST_CODIGO,
a.SER_TAB_IN_CODIGO,
a.SER_IN_SEQUENCIA,
a.FIL_IN_CODIGO,
a.MVT_IN_LANCAM,
a.MVT_ST_NUMDOC,
a.MVT_DT_MOVIMENTO || ' 00:00:00' MVT_DT_MOVIMENTO,
a.MVT_DT_DOCUMENTO || ' 00:00:00' MVT_DT_DOCUMENTO,
a.MVT_ST_ENTRSAIDA,
a.TPM_ST_DESCRICAO,
a.PRO_TAB_IN_CODIGO,
a.PRO_PAD_IN_CODIGO,
a.PRO_IN_CODIGO,
a.ALM_TAB_IN_CODIGO,
a.ALM_PAD_IN_CODIGO,
a.ALM_IN_CODIGO,
a.LOC_IN_CODIGO,
a.MVT_RE_QSDOANT,
DECODE(M.MVT_ST_ENTRSAIDA,'ED',DECODE(A.MVT_RE_QENT,0,A.MVT_RE_VENT,A.MVT_RE_VENT/A.MVT_RE_QENT),0) * DECODE(M.MVT_ST_ENTRSAIDA, 'ED', L.MVL_RE_QUANTIDADE, 0) MVT_RE_VENT,
DECODE(M.MVT_ST_ENTRSAIDA,'SD',DECODE(A.MVT_RE_QSAI,0,A.MVT_RE_VSAI,A.MVT_RE_VSAI/A.MVT_RE_QSAI),0) * DECODE(M.MVT_ST_ENTRSAIDA, 'SD', L.MVL_RE_QUANTIDADE, 0) MVT_RE_VSAI,
a.MVT_RE_QSDOATU,
a.MVT_RE_VSDOANT,
a.MVT_RE_VENT,
a.MVT_RE_VSAI,
a.MVT_RE_VSDOATU,
a.MVT_RE_VCUSTOUNIT,
a.MVT_CH_PENDENTE,
a.USUARIO,
a.MVT_RE_AQUISICAO,
a.TPK_IN_SEQ,
a.MVT_CH_ORIGEM,
a.AGN_TAB_IN_CODIGO,
a.AGN_PAD_IN_CODIGO,
a.AGN_IN_CODIGO,
a.AGN_ST_FANTASIA,
a.MVT_RE_VENTFISFIN,
a.MVT_RE_VSAIFISFIN,
a.UNI_ST_UNIDADE,
DECODE(M.MVT_ST_ENTRSAIDA, 'ED', L.MVL_RE_QUANTIDADE, 0) MVT_RE_QENT,
DECODE(M.MVT_ST_ENTRSAIDA, 'SD', L.MVL_RE_QUANTIDADE, 0) MVT_RE_QSAI,
DECODE(M.MVT_ST_ENTRSAIDA,'ED',DECODE(A.MVT_RE_QENT,0,A.MVT_RE_VENT,A.MVT_RE_VENT/A.MVT_RE_QENT),0) MVT_RE_VENT_UNITARIO,
DECODE(M.MVT_ST_ENTRSAIDA,'SD',DECODE(A.MVT_RE_QSAI,0,A.MVT_RE_VSAI,A.MVT_RE_VSAI/A.MVT_RE_QSAI),0) MVT_RE_VSAI_UNITARIO,
P.PRO_ST_DESCRICAO,
L.ALM_IN_CODIGO ALMOXARIFADO,
L.LOC_IN_CODIGO LOCALIZACAO,
T.TPM_ST_ATUALIZACUSTOS,Case When P.rfc_in_codigo = 2 Then
To_number(substr(L.Mvl_st_referencia,9,
(Instr(L.Mvl_st_referencia,';',1,1 ) - 9)))
End numero_do_fardoFROM TABLE(MGADM.EST_PCK_KARDEX.GETTABLE) A, MGADM.EST_PRODUTOS P,
MGADM.EST_LOTESMOVIMENTO L, MGADM.EST_MOVIMENTO M, MGADM.EST_TIPOMOVTO T
WHERE A.PRO_TAB_IN_CODIGO = P.PRO_TAB_IN_CODIGO
AND A.PRO_PAD_IN_CODIGO = P.PRO_PAD_IN_CODIGO
AND A.PRO_IN_CODIGO = P.PRO_IN_CODIGO
AND A.MVT_IN_LANCAM = L.MVT_IN_LANCAM(+)
AND A.ORG_TAB_IN_CODIGO = L.ORG_TAB_IN_CODIGO(+)
AND A.ORG_PAD_IN_CODIGO = L.ORG_PAD_IN_CODIGO(+)
AND A.ORG_IN_CODIGO = L.ORG_IN_CODIGO(+)
AND L.ORG_TAB_IN_CODIGO = M.ORG_TAB_IN_CODIGO(+)
AND L.ORG_PAD_IN_CODIGO = M.ORG_PAD_IN_CODIGO(+)
AND L.ORG_IN_CODIGO = M.ORG_IN_CODIGO(+)
AND L.ORG_TAU_ST_CODIGO = M.ORG_TAU_ST_CODIGO(+)
AND L.SER_TAB_IN_CODIGO = M.SER_TAB_IN_CODIGO(+)
AND L.SER_IN_SEQUENCIA = M.SER_IN_SEQUENCIA(+)
AND L.MVT_IN_LANCAM = M.MVT_IN_LANCAM(+)
AND M.TPM_TAB_IN_CODIGO = T.TPM_TAB_IN_CODIGO(+)
AND M.TPM_PAD_IN_CODIGO = T.TPM_PAD_IN_CODIGO(+)
AND M.TPM_IN_CODIGO = T.TPM_IN_CODIGO(+)
AND DECODE(NVL(palm_cod,0), 0, L.ALM_TAB_IN_CODIGO, 105) = L.ALM_TAB_IN_CODIGO
AND DECODE(NVL(valm_pad,0), 0, L.ALM_PAD_IN_CODIGO, valm_pad) = L.ALM_PAD_IN_CODIGO
AND DECODE(NVL(palm_cod,0), 0, L.ALM_IN_CODIGO, palm_cod) = L.ALM_IN_CODIGO
AND DECODE(NVL(ploc_cod,0), 0, L.LOC_IN_CODIGO, ploc_cod) = L.LOC_IN_CODIGO;END P_GERA_REL_KARDEX;
13 de junho de 2014 às 3:24 pm #106701rmanParticipante@Tadeu Rodrigues de Oliveira
No SELECT só é possível fazer o uso de FUNCTION que retorne 1 registro.
Mas dependendo da linguagem de programação esse artigo pode ajudar:
http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php
-
AutorPosts
- Você deve fazer login para responder a este tópico.