Pular para o conteúdo
  • Este tópico contém 27 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 8 meses atrás por Avatar photoRegis Araujo.
Visualizando 15 posts - 1 até 15 (de 28 do total)
  • Autor
    Posts
  • #87363
    Itimura
    Participante

      pessoal,

      quando compilo a procedure o oracle diz que eu preciso declarar:

      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;

      BEGIN

      --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"

      INTO v_NUMNOTA,
      v_DTSAIDA,
      v_CONDVEND,
      A.v_CODCLI,
      v_CLIENTE,
      v_CODFORNEC,
      v_FORNECEDOR,
      v_CODSEC,
      v_DESCRICAO,
      v_CODPROD,
      v_DESCRICAO,
      v_QT,
      v_PTABELA,
      v_CODUSUR,
      v_NOME

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

      (SELECT NF.CODCLI
      FROM PCNFSAID NF,
      PCMOV MOV,
      PCPRODUT PRO,
      PCCLIENT CLI
      WHERE NF.NUMNOTA = MOV.NUMNOTA
      AND MOV.CODPROD = PRO.CODPROD
      AND MOV.CODCLI = CLI.CODCLI
      AND NF.CONDVENDA = 5
      AND MOV.CODFORNEC = 1
      AND NF.DTSAIDA BETWEEN dtINICIO AND dtFIM)

      ORDER BY MOV.CODCLI;

      END REL_REEMBOLSO;
      [/code]

      #87364
      Manoel872
      Participante

        Acho que erro vai estar nesse código seu no select into:
        INTO
        .
        .
        .

        A.v_CODCLI, –v_CODCLI — retire esse A.

        Att,

        Manoel Jr

        #87365
        Marcio68Almeida
        Participante

          É bom sempre postar a mensagem de erro.
          Pode ser também a linha em branco, às vezes isso acontece.

          #87375
          Itimura
          Participante

            a menssagem de erro:

            Erro(5,18): PLS-00201: o identificador ‘MOV.NUMNOTA’ deve ser declarado
            Erro(5,18): PL/SQL: Item ignored

            Erro(6,18): PLS-00201: o identificador ‘NF.DTSAIDA’ deve ser declarado
            Erro(6,18): PL/SQL: Item ignored

            Erro(7,18): PLS-00201: o identificador ‘NF.CONDVENDA’ deve ser declarado
            Erro(7,18): PL/SQL: Item ignored

            Erro(8,18): PLS-00201: o identificador ‘MOV.CODCLI’ deve ser declarado
            Erro(8,18): PL/SQL: Item ignored

            Erro(9,18): PLS-00201: o identificador ‘CLI.CLIENTE’ deve ser declarado
            Erro(9,18): PL/SQL: Item ignored

            Erro(10,18): PLS-00201: o identificador ‘MOV.CODFORNEC’ deve ser declarado
            Erro(10,18): PL/SQL: Item ignored

            Erro(11,18): PLS-00487: Referência inválida para a variável ‘FORNEC’
            Erro(11,18): PL/SQL: Item ignored

            Erro(12,18): PLS-00201: o identificador ‘MOV.CODSEC’ deve ser declarado
            Erro(12,18): PL/SQL: Item ignored

            Erro(13,18): PLS-00201: o identificador ‘SEC.DESCRICAO’ deve ser declarado
            Erro(13,18): PL/SQL: Item ignored

            Erro(14,18): PLS-00201: o identificador ‘MOV.CODPROD’ deve ser declarado
            Erro(14,18): PL/SQL: Item ignored

            Advertência(1,1): Somente os primeiros 20 problemas foram reportados
            [/img]

            #87376
            Itimura
            Participante

              a menssagem de erro:

              Erro(5,18): PLS-00201: o identificador ‘MOV.NUMNOTA’ deve ser declarado
              Erro(5,18): PL/SQL: Item ignored

              Erro(6,18): PLS-00201: o identificador ‘NF.DTSAIDA’ deve ser declarado
              Erro(6,18): PL/SQL: Item ignored

              Erro(7,18): PLS-00201: o identificador ‘NF.CONDVENDA’ deve ser declarado
              Erro(7,18): PL/SQL: Item ignored

              Erro(8,18): PLS-00201: o identificador ‘MOV.CODCLI’ deve ser declarado
              Erro(8,18): PL/SQL: Item ignored

              Erro(9,18): PLS-00201: o identificador ‘CLI.CLIENTE’ deve ser declarado
              Erro(9,18): PL/SQL: Item ignored

              Erro(10,18): PLS-00201: o identificador ‘MOV.CODFORNEC’ deve ser declarado
              Erro(10,18): PL/SQL: Item ignored

              Erro(11,18): PLS-00487: Referência inválida para a variável ‘FORNEC’
              Erro(11,18): PL/SQL: Item ignored

              Erro(12,18): PLS-00201: o identificador ‘MOV.CODSEC’ deve ser declarado
              Erro(12,18): PL/SQL: Item ignored

              Erro(13,18): PLS-00201: o identificador ‘SEC.DESCRICAO’ deve ser declarado
              Erro(13,18): PL/SQL: Item ignored

              Erro(14,18): PLS-00201: o identificador ‘MOV.CODPROD’ deve ser declarado
              Erro(14,18): PL/SQL: Item ignored

              Advertência(1,1): Somente os primeiros 20 problemas foram reportados
              [/img][/quote]

              #87377
              Itimura
              Participante

                e eu ja tirei o

                A.v_CODCLI,

                #87380
                Marcio68Almeida
                Participante

                  fORNEC IN NUMBER) AS
                  v_NUMNOTA MOV.NUMNOTA%TYPE;

                  não é AS é IS
                  fORNEC IN NUMBER) IS
                  v_NUMNOTA MOV.NUMNOTA%TYPE;

                  #87392
                  Itimura
                  Participante

                    mesmo mudando o erro continua como o descrito acima….

                    🙁

                    #87393
                    David Siqueira
                    Participante

                      Itmura eu não manjo muito de PL/SQL , mas acho que todas essas variaveis abaixo devem estar antes da palavra “IS” :

                      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;

                      IS

                      Depois você dá sequencia aos procedimentos normais, pois o erro é porque as váriaveis estão perdidas em um bloco não identificado dentro dessa instrução PL/SQL.

                      Abraço.

                      #87402
                      Itimura
                      Participante

                        Drbs

                        não não, ta no local certo…

                        o problema listado acima ainda persiste,….

                        sem resultados….

                        ja troquei o AS pelo IS e vice versa o mesmo erro….

                        o ruim é que vim de SQL Server 2000 e procedures eram tão mais fáceis de se fazer…

                        #87405
                        David Siqueira
                        Participante

                          Cara eu estava olhando aqui em algumas Proc’s que tenho no banco, acho que essa sua intrução SQL deveria estar dentro de um Cursor, pelo menos é o que me parece pelos exemplos que tenho aqui mais próximos dessa sua Proc.

                          Abraço.

                          David

                          #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..

                            #87407
                            Avatar photoRegis Araujo
                            Participante

                              Ahh..

                              Só corrigindo o AS…


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

                              Abraços..

                              #87408
                              David Siqueira
                              Participante

                                Excelente explanação parceiro….

                                Abraço!!

                                P.S.: Valeu…o anime tá sensacional, a pancadaria voltou a reinar..kkkk.

                                #87414
                                Itimura
                                Participante

                                  seguint galera, até então muito obrigado e valeu pela paciência

                                  vamos do começar do inicio…

                                  eu tenho a seguinte query:


                                  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"

                                    FROM 
                                        PCNFSAID NF, 
                                        PCMOV MOV, 
                                        PCPRODUT PRO, 
                                        PCCLIENT CLI, 
                                        PCFORNEC FORNEC, 
                                        PCSECAO SEC, 
                                        PCUSUARI RCA
                                  
                                    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
                                  
                                  --AQUI TEMOS OS SEGUINTES CAMPOS QUE SERÃO PARAMETROS DE ENTRADA:
                                  --DTINICIO E DTFIM REFERENTE AO CAMPO NF.DTSAIDA
                                  
                                  --OUTRO CAMPO DE ENTRADA É O MOV.CODFORNEC 
                                  --QUE É ONDE O USUARIO INFORMARA O CÓDIGO DO FORNECEDOR
                                  AND NF.DTSAIDA BETWEEN '17062009' AND '17062009' 
                                  AND NF.CONDVENDA IN (1, 5)
                                  AND MOV.CODFORNEC = 1
                                  
                                  --EU PRECISO FAZER UM SELECT NAS NOTAS FISCAIS QUE REPRESENTAM O TIPO DE VENDA 5
                                  -- OS PARAMETROS DE ENTRADA SERÃO OS MESMOS
                                  AND MOV.CODCLI IN 
                                  (
                                  SELECT NF.CODCLI
                                    FROM 
                                      PCNFSAID NF, PCMOV MOV, PCPRODUT PRO, PCCLIENT CLI
                                    WHERE NF.NUMNOTA = MOV.NUMNOTA AND MOV.CODPROD = PRO.CODPROD AND MOV.CODCLI = CLI.CODCLI
                                      AND NF.CONDVENDA = 5
                                      AND MOV.CODFORNEC = 1
                                      AND NF.DTSAIDA BETWEEN '17062009' AND '17062009'
                                  )
                                  

                                  ORDER BY MOV.CODCLI

                                  Esta query eu pretendo colocar como um relatório no Crystal Reports,

                                  Problema:

                                  Eu tenho os conceitos de criação de procedures em SQL Server 2000 que é muito mais simples que no Oracle

                                  Não estou discutindo sobre as formas de se escrever se é dificil ou não,

                                  só estou precisando de uma ajuda inicial e entender mais o conceito

                                  Ajudem

                                  Please![/code]

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