- Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 4 meses atrás por fabioanascimento.
-
AutorPosts
-
22 de setembro de 2006 às 4:31 pm #76582fabioanascimentoParticipante
Pessoal,
Boa tarde, primeiramente gostaria de salientar q sou novato em banco de dados, estou aprendendo bastante e pra variar me apaixonando.
Não possuo experiencia suficiente para decifrar as mensagens de erros emitidas pelo oracle, dessa forma solicito a ajuda dos companheitos.
Obs: Acredito que meu erro se resuma a Begins e Ends da vida, mas ainda apanho no que diz respeito a inicio e fim de bloco de execução.
Segue abaixo minha procedure + erro relatado.
CREATE OR REPLACE PROCEDURE SP_REL_TAREFA4( P_DATA IN DATE )AS
CURSOR ENTRADA_RECLAMACAO ( P_DATA IN DATE ) IS
-- Fila de reclamacao
SELECT IDENTIFICACAO, DESCRICAO, COD_DESCRICAO, QUANTIDADE
FROM
(
SELECT '1' IDENTIFICACAO,
RTRIM(TTR.VARDSCTIPORECLAMACAO) DESCRICAO,
TTR.NUMIDTIPORECLAMACAO,
COUNT (TP.NUMIDPROCESSO) QUANTIDADE
FROM TBPROCESSOS TP,
TBPROCESSOSRECLAMACAO TPR,
TBTIPORECLAMACAO TTR
WHERE TP.NUMIDPROCESSO = TPR.NUMIDPROCESSO
AND TPR.NUMIDTIPORECLAMACAO = TTR.NUMIDTIPORECLAMACAO
AND TP.FLGTIPOPROCESSO = 'R'
AND TP.DATABERTURA >= TO_DATE( TO_CHAR((TRUNC(FU_RECUPERA_PERIODO(P_DATA, 1))),'DD/MM/YYYY')||' 00:00:00','DD/MM/YYYY HH24:MI:SS')
AND TP.DATABERTURA <= TO_DATE( TO_CHAR((TRUNC(FU_RECUPERA_PERIODO(P_DATA, 2))),'DD/MM/YYYY')||' 23:59:59','DD/MM/YYYY HH24:MI:SS') GROUP BY TTR.VARDSCTIPORECLAMACAO ); E ENTRADA_RECLAMACAO%ROWTYPE; P_PROCESSOS_DESCRICAO VARCHAR2(200); P_PROCESSOS_DESCRICAO_COD NUMBER; P_PROCESSOS_TOT NUMBER; P_IDENTIFICACAO VARCHAR2(1); --P_PROCESSOS_PRODUTO VARCHAR2(200); --P_PROCESSOS_PRODUTOQTD NUMBER; FILE_PATH VARCHAR2(100) := '/spa/relatorios'; FILE_HANDLE UTL_FILE.FILE_TYPE; W_LINHA VARCHAR2(300); W_TRACO0 VARCHAR2(170) := LPAD ( ' ', 170, ' ' ); W_TRACO1 VARCHAR2(170) := LPAD ( ' ', 170, '-' ); W_TRACO2 VARCHAR2(170) := LPAD ( ' ', 170, '=' ); W_CONTACARACTER NUMBER; BEGIN W_CONTACARACTER :=0; FILE_HANDLE := UTL_FILE.FOPEN ( FILE_PATH, 'REL_TAREFA4.TXT', 'w' ); W_LINHA := 'Relatorio consolidado por fila de reclamacao '||LPAD ( ' ', 80, ' ' )|| to_char(sysdate,'DD/MM/YYYY HH24:MI:SS'); UTL_FILE.PUT_LINE ( FILE_HANDLE, W_LINHA ); UTL_FILE.PUT_LINE ( FILE_HANDLE, W_TRACO2 ); UTL_FILE.PUT_LINE(FILE_HANDLE, ''); W_LINHA := 'Fila de reclamacao '||LPAD ( ' ', 80, ' ' )|| 'Produto' ||LPAD ( ' ', 25, ' ' )||'Core'||LPAD ( ' ', 10, ' ' )||'Total por reclamacao'; UTL_FILE.PUT_LINE ( FILE_HANDLE, W_LINHA ); UTL_FILE.PUT_LINE ( FILE_HANDLE, W_TRACO1 ); --UTL_FILE.PUT_LINE(FILE_HANDLE, ''); P_PROCESSOS_TOT :=0; FOR E IN ENTRADA_RECLAMACAO (P_DATA) LOOP P_PROCESSOS_DESCRICAO := E.DESCRICAO; P_PROCESSOS_TOT := E.QUANTIDADE; P_IDENTIFICACAO := E.IDENTIFICACAO; P_PROCESSOS_DESCRICAO_COD := E.COD_DESCRICAO; W_CONTACARACTER := 155 - LENGTH(P_PROCESSOS_DESCRICAO); W_LINHA := P_PROCESSOS_DESCRICAO ||LPAD ( ' ', W_CONTACARACTER, ' ' )||P_PROCESSOS_TOT; UTL_FILE.PUT_LINE ( FILE_HANDLE, W_LINHA ); --Colocar aqui uma nova busca filtrando produto por reclamacao --inicia Cursor para os produtos por reclamacao CURSOR RECLAMACAO_PRODUTO ( P_PROCESSOS_DESCRICAO_COD IN NUMBER ) IS -- Fila de reclamacao SELECT IDENTIFICACAO, DESCRICAO, QUANTIDADE FROM ( SELECT '2' IDENTIFICACAO, RTRIM(TPR.VARDSCPRODUTO) DESCRICAO, COUNT(TP.NUMIDPRODUTO) QUANTIDADE FROM TBPROCESSOS TP, TBPRODUTOS TPR, TBPROCESSOSRECLAMACAO TPROCR, TBTIPORECLAMACAO TTR WHERE TP.NUMIDPRODUTO = TPR.NUMIDPRODUTO AND TP.NUMIDPROCESSO = TPROCR.NUMIDPROCESSO AND TPROCR.NUMIDTIPORECLAMACAO = TTR.NUMIDTIPORECLAMACAO AND TTR.NUMIDTIPORECLAMACAO = P_PROCESSOS_DESCRICAO_COD AND TP.DATABERTURA >= TO_DATE( TO_CHAR((TRUNC(FU_RECUPERA_PERIODO(P_DATA, 1))),'DD/MM/YYYY')||' 00:00:00','DD/MM/YYYY HH24:MI:SS')
AND TP.DATABERTURA <= TO_DATE( TO_CHAR((TRUNC(FU_RECUPERA_PERIODO(P_DATA, 2))),'DD/MM/YYYY')||' 23:59:59','DD/MM/YYYY HH24:MI:SS') GROUP BY TPR.VARDSCPRODUTO ); R RECLAMACAO_PRODUTO%ROWTYPE; W_CONTACARACTER :=0; --P_PROCESSOS_TOT :=0; FOR R IN RECLAMACAO_PRODUTO (P_PROCESSOS_DESCRICAO_COD) LOOP P_PROCESSOS_DESCRICAO := R.DESCRICAO; P_PROCESSOS_TOT := R.QUANTIDADE; P_IDENTIFICACAO := R.IDENTIFICACAO; --Impressao W_CONTACARACTER := 155 - LENGTH(P_PROCESSOS_DESCRICAO); W_LINHA := P_PROCESSOS_DESCRICAO ||LPAD ( ' ', W_CONTACARACTER, ' ' )||P_PROCESSOS_TOT; UTL_FILE.PUT_LINE ( FILE_HANDLE, W_LINHA ); P_PROCESSOS_TOT := 0; END LOOP; P_PROCESSOS_TOT := 0; END LOOP; UTL_FILE.FCLOSE ( FILE_HANDLE ); END SP_REL_TAREFA4;Erro emitido pelo oracle.
Type PROCEDURE
Owner SPATST
Name SP_REL_TAREFA4
Line Error text
81 PLS-00103: Encountered the symbol "RECLAMACAO_PRODUTO" when expecting one of the following::= . ( @ % ;
The symbol ":=" was substituted for "RECLAMACAO_PRODUTO" to continue.81 PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
. ( * % & = - + ; < / > in mod not rem an exponent (**)
<> or != or ~= >= <= <> and or like between is null is not ||106 PLS-00103: Encountered the symbol "=" when expecting one of the following:
constant exception
table LONG_ double
Desde já agradeço qq dica, as vezes dar o peixe não é o foco deste fórum dessa forma quero realmente aprender ou seja quero pescar.
Valeu pelas dicas.
Fabio Nascimento
25 de setembro de 2006 às 8:31 pm #76624drumondParticipantefabio,
A sintaxe do cursor esta equivocada, quando vc declara um cursor, depois vc tem que usar os seguintes commandos !!
Open NOME_CURSOR; — Abrindo o cursor
Fetch NOME_CURSOR into VARIAVEIS — retornaa linha do ponteiro do cursor nas variaveis que vc definir, depois vc deve utilizar um loop ou For, ou While como queira …O que reparei tambem, eh que vc nao declara as variareis antes de comecar o Begin, vc as estah declarando somente depois !!!
Isto pode te trazer problemas, para identificar erros !!!
Tem um tutorial de boas praticas de Pl/SQL aqui no site mesmo !!!Vale a pena perder um tempinho lendo ele, pois lah deixa muito claro a declaracao de variaveis e identacao do codigo !!
Abracos e boa Sorte !!
25 de setembro de 2006 às 8:33 pm #76626fabioanascimentoParticipanteObrigado Drumond,. realmente não estou seguinte boas praticas nao, devido ao fato de ser novato.
Mas com certeza vou ler as boas praticas e tentar segui-las ao máximo.
Muito obrigado.
Fabio Nascimento
-
AutorPosts
- Você deve fazer login para responder a este tópico.