Pular para o conteúdo
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #106700
    Avatar de Tadeu Rodrigues de OliveiraTadeu Rodrigues de Oliveira
    Participante

      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_fardo

      FROM 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;

      #106701
      Avatar de rmanrman
      Participante

        @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

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.
      plugins premium WordPress