Pular para o conteúdo

Fóruns SQL e PL/SQL Problem Procedure Problem Procedure

#87406
Avatar photoRegis Araujo
Participante

    Salve Amigos.. boa noite..

    Desculpe me intrometer.. Mas vamos la..

    A dúvida que mais tenho sobre esta procedure.. O que a procedure ira fazer?

    1 – Somente utiliza INTO “PARAMETRO” quando for realizar um insert em algum lugar… ou para comparar alguma coisa..

    2 – Se vc precisar retornar estes valores para algum lugar.. tipo trazer o resultado para a tela.. vc precisa de um CURSOR conforme o DAVID falou..

    Se vc for trazer as informações para TELA… vc precisa fazer assim…

    CREATE OR REPLACE PROCEDURE REL_REEMBOLSO(dtINICIO IN DATE,
    dtFIM IN DATE,
    fORNEC IN NUMBER,
    cCursor OUT TYPE%TYPE_CURSOR) AS

    BEGIN

    CURSOR cCursor IS

    --CAMPO A SEREM BUSCADOS
    SELECT MOV.NUMNOTA       AS "NOTA FISCAL",
           NF.DTSAIDA        AS "DATA DE EMISSAO",
           NF.CONDVENDA      AS "COD VENDA",
           MOV.CODCLI        AS "COD CLIENTE",
           CLI.CLIENTE       AS "CLIENTE",
           MOV.CODFORNEC     AS "COD FORNECEDOR",
           FORNEC.FORNECEDOR AS "FORNECEDOR",
           MOV.CODSEC        AS "COD SEÇÃO",
           SEC.DESCRICAO     AS "DESCRIÇÃO SEÇÃO",
           MOV.CODPROD       AS "COD PRODUTO",
           PRO.DESCRICAO     AS "PRODUTO",
           MOV.QT            AS "QUANTIDADE VENDIDA",
           MOV.PTABELA       AS "PREÇO UNITARIO",
           RCA.CODUSUR       AS "CODIGO RCA",
           RCA.NOME          AS "RCA"
    
    --TABELAS COM ALIAS
    FROM   PCNFSAID NF,
           PCMOV    MOV,
           PCPRODUT PRO,
           PCCLIENT CLI,
           PCFORNEC FORNEC,
           PCSECAO  SEC,
           PCUSUARI RCA
    
    --"JOIN"
    WHERE  NF.NUMNOTA = MOV.NUMNOTA
    AND    MOV.CODPROD = PRO.CODPROD
    AND    MOV.CODCLI = CLI.CODCLI
    AND    FORNEC.CODFORNEC = MOV.CODFORNEC
    AND    SEC.CODSEC = MOV.CODSEC
    AND    RCA.CODUSUR = MOV.CODUSUR
    
          --CONDIÇOES
    AND    NF.DTSAIDA BETWEEN dtINICIO AND dtFIM
    AND    NF.CONDVENDA IN (1, 5)
    AND    MOV.CODFORNEC = fORNEC
    AND    MOV.CODCLI IN
    

    -- POR DESCARGO DE CONCIENCIA.. MUDANDO OS "ALIAS" DAS TABELAS...
    -- VERIFICAR A REAL NECESSIDADE DE REALIZAR O SELECT ABAIXO...
    -- AJUSTANDO PODE-SE OBTER O MESMO RESULTADO APENAS COM O SELECT ACIMA...

           (SELECT NF2.CODCLI
             FROM   PCNFSAID NF2,
                    PCMOV    MOV2,
                    PCPRODUT PRO2,
                    PCCLIENT CLI2
             WHERE  NF2.NUMNOTA    = MOV2.NUMNOTA
             AND    MOV2.CODPROD   = PRO2.CODPROD
             AND    MOV2.CODCLI    = CLI2.CODCLI
             AND    NF2.CONDVENDA||MOV.CODFORNEC = 51 -- AJUSTANDO PARA MELHORAR SEU SELECT...
    

    -- AND NF2.CONDVENDA = 5
    -- AND MOV2.CODFORNEC = 1
    AND NF2.DTSAIDA BETWEEN dtINICIO AND dtFIM)

    ORDER  BY MOV.CODCLI;
    

    END REL_REEMBOLSO;

    E o erro é que vc não pode declarar um TYPE apenas com o ALIAS da tabela do select abaixo…

    Assim…


    FORMA ERRADA

    CREATE OR REPLACE PROCEDURE REL_REEMBOLSO(dtINICIO IN DATE,
    dtFIM IN DATE,
    fORNEC IN NUMBER) AS
    v_NUMNOTA MOV.NUMNOTA%TYPE;
    v_DTSAIDA NF.DTSAIDA%TYPE;
    v_CONDVENDA NF.CONDVENDA%TYPE;
    v_CODCLI MOV.CODCLI%TYPE;
    v_CLIENTE CLI.CLIENTE%TYPE;
    v_CODFORNEC MOV.CODFORNEC%TYPE;
    v_FORNECEDOR FORNEC.FORNECEDOR%TYPE;
    v_CODSEC MOV.CODSEC%TYPE;
    v_DESCRICAO SEC.DESCRICAO%TYPE;
    v_CODPROD MOV.CODPROD%TYPE;
    v_DESCRICAO PRO.DESCRICAO%TYPE;
    v_QT MOV.QT%TYPE;
    v_PTABELA MOV.PTABELA%TYPE;
    v_CODUSUR RCA.CODUSUR%TYPE;
    v_NOME RCA.NOME%TYPE;

    FORMA CORRETA

    CREATE OR REPLACE PROCEDURE REL_REEMBOLSO(dtINICIO IN DATE,
    dtFIM IN DATE,
    fORNEC IN NUMBER) AS
    v_NUMNOTA OWNER.NOMETABELA.NUMNOTA%TYPE;
    v_DTSAIDA OWNER.NOMETABELA.DTSAIDA%TYPE;
    v_CONDVENDA OWNER.NOMETABELA.CONDVENDA%TYPE;
    v_CODCLI OWNER.NOMETABELA.CODCLI%TYPE;
    v_CLIENTE OWNER.NOMETABELA.CLIENTE%TYPE;
    v_CODFORNEC OWNER.NOMETABELA.CODFORNEC%TYPE;
    v_FORNECEDOR OWNER.NOMETABELA.FORNECEDOR%TYPE;
    v_CODSEC OWNER.NOMETABELA.CODSEC%TYPE;
    v_DESCRICAO OWNER.NOMETABELA.DESCRICAO%TYPE;
    v_CODPROD OWNER.NOMETABELA.CODPROD%TYPE;
    v_DESCRICAO OWNER.NOMETABELA.DESCRICAO%TYPE;
    v_QT OWNER.NOMETABELA.QT%TYPE;
    v_PTABELA OWNER.NOMETABELA.PTABELA%TYPE;
    v_CODUSUR OWNER.NOMETABELA.CODUSUR%TYPE;
    v_NOME OWNER.NOMETABELA.NOME%TYPE;

    Qualquer coisa.. Posta como vc precisa da procedure que lhe ajudamos…

    Bom.. Espero ter ajudado..

    Ps.: David.. Muito bom seu Avatar… Muito bom mesmo…

    Abraços..