- Este tópico contém 27 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 8 meses atrás por
Regis Araujo.
-
AutorPosts
-
19 de junho de 2009 às 6:37 pm #87363
Itimura
Participantepessoal,
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]19 de junho de 2009 às 6:57 pm #87364Manoel872
ParticipanteAcho que erro vai estar nesse código seu no select into:
INTO
.
.
.A.v_CODCLI, –v_CODCLI — retire esse A.
Att,
Manoel Jr
19 de junho de 2009 às 7:00 pm #87365Marcio68Almeida
ParticipanteÉ bom sempre postar a mensagem de erro.
Pode ser também a linha em branco, às vezes isso acontece.19 de junho de 2009 às 9:43 pm #87375Itimura
Participantea menssagem de erro:
Erro(5,18): PLS-00201: o identificador ‘MOV.NUMNOTA’ deve ser declarado
Erro(5,18): PL/SQL: Item ignoredErro(6,18): PLS-00201: o identificador ‘NF.DTSAIDA’ deve ser declarado
Erro(6,18): PL/SQL: Item ignoredErro(7,18): PLS-00201: o identificador ‘NF.CONDVENDA’ deve ser declarado
Erro(7,18): PL/SQL: Item ignoredErro(8,18): PLS-00201: o identificador ‘MOV.CODCLI’ deve ser declarado
Erro(8,18): PL/SQL: Item ignoredErro(9,18): PLS-00201: o identificador ‘CLI.CLIENTE’ deve ser declarado
Erro(9,18): PL/SQL: Item ignoredErro(10,18): PLS-00201: o identificador ‘MOV.CODFORNEC’ deve ser declarado
Erro(10,18): PL/SQL: Item ignoredErro(11,18): PLS-00487: Referência inválida para a variável ‘FORNEC’
Erro(11,18): PL/SQL: Item ignoredErro(12,18): PLS-00201: o identificador ‘MOV.CODSEC’ deve ser declarado
Erro(12,18): PL/SQL: Item ignoredErro(13,18): PLS-00201: o identificador ‘SEC.DESCRICAO’ deve ser declarado
Erro(13,18): PL/SQL: Item ignoredErro(14,18): PLS-00201: o identificador ‘MOV.CODPROD’ deve ser declarado
Erro(14,18): PL/SQL: Item ignoredAdvertência(1,1): Somente os primeiros 20 problemas foram reportados
[/img]19 de junho de 2009 às 9:45 pm #87376Itimura
Participantea menssagem de erro:
Erro(5,18): PLS-00201: o identificador ‘MOV.NUMNOTA’ deve ser declarado
Erro(5,18): PL/SQL: Item ignoredErro(6,18): PLS-00201: o identificador ‘NF.DTSAIDA’ deve ser declarado
Erro(6,18): PL/SQL: Item ignoredErro(7,18): PLS-00201: o identificador ‘NF.CONDVENDA’ deve ser declarado
Erro(7,18): PL/SQL: Item ignoredErro(8,18): PLS-00201: o identificador ‘MOV.CODCLI’ deve ser declarado
Erro(8,18): PL/SQL: Item ignoredErro(9,18): PLS-00201: o identificador ‘CLI.CLIENTE’ deve ser declarado
Erro(9,18): PL/SQL: Item ignoredErro(10,18): PLS-00201: o identificador ‘MOV.CODFORNEC’ deve ser declarado
Erro(10,18): PL/SQL: Item ignoredErro(11,18): PLS-00487: Referência inválida para a variável ‘FORNEC’
Erro(11,18): PL/SQL: Item ignoredErro(12,18): PLS-00201: o identificador ‘MOV.CODSEC’ deve ser declarado
Erro(12,18): PL/SQL: Item ignoredErro(13,18): PLS-00201: o identificador ‘SEC.DESCRICAO’ deve ser declarado
Erro(13,18): PL/SQL: Item ignoredErro(14,18): PLS-00201: o identificador ‘MOV.CODPROD’ deve ser declarado
Erro(14,18): PL/SQL: Item ignoredAdvertência(1,1): Somente os primeiros 20 problemas foram reportados
[/img][/quote]19 de junho de 2009 às 9:46 pm #87377Itimura
Participantee eu ja tirei o
A.v_CODCLI,
19 de junho de 2009 às 9:59 pm #87380Marcio68Almeida
ParticipantefORNEC IN NUMBER) AS
v_NUMNOTA MOV.NUMNOTA%TYPE;
não é AS é IS
fORNEC IN NUMBER) IS
v_NUMNOTA MOV.NUMNOTA%TYPE;19 de junho de 2009 às 10:45 pm #87392Itimura
Participantemesmo mudando o erro continua como o descrito acima….
🙁
19 de junho de 2009 às 11:15 pm #87393David Siqueira
ParticipanteItmura 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.
20 de junho de 2009 às 12:56 am #87402Itimura
ParticipanteDrbs
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…
20 de junho de 2009 às 4:20 am #87405David Siqueira
ParticipanteCara 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
20 de junho de 2009 às 6:14 am #87406Regis Araujo
ParticipanteSalve 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) ASBEGIN
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 ERRADACREATE 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..
20 de junho de 2009 às 6:20 am #87407Regis Araujo
ParticipanteAhh..
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..
20 de junho de 2009 às 8:37 pm #87408David Siqueira
ParticipanteExcelente explanação parceiro….
Abraço!!
P.S.: Valeu…o anime tá sensacional, a pancadaria voltou a reinar..kkkk.
22 de junho de 2009 às 4:36 pm #87414Itimura
Participanteseguint 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]
-
AutorPosts
- Você deve fazer login para responder a este tópico.