- Este tópico contém 11 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 11 meses atrás por
Girino.
-
AutorPosts
-
12 de dezembro de 2009 às 3:39 am #91516
Girino
ParticipanteOlá..!! 8)
Porque quando executo a Procedure Abaixo ela não me retorna nenhum rsultado na tela, apenas que foi executada com sucesso??? 🙄
Como fazer para Mostrar o resultado??? 💡CREATE OR REPLACE PROCEDURE TESTANDO AS
REGISTRO FUNCIONARIOS%Rowtype;
CURSOR CURSORREGISTRO ISSELECT *FROM FUNCIONARIOS;
BEGIN
OPEN CURSORREGISTRO;
LOOP
FETCH CURSORREGISTRO INTO REGISTRO;
EXIT WHEN CURSORREGISTRO%NOTFOUND;
END LOOP;CLOSE CURSORREGISTRO;
END;
Muito Obrigado..!! 😀
Renato 😉
12 de dezembro de 2009 às 4:53 am #91518fsitja
ParticipanteUma stored procedure, ou qualquer bloco de código PL/SQL, é um programa que roda no servidor, não é um componente de frontend, que exiba resultados na tela.
O que você pode usar, eventualmente, para testes e validação, é a package DBMS_OUTPUT com a procedure DBMS_OUTPUT.PUT_LINE e exibir uma saída no console do cliente.
SQL> set serveroutput on
SQL>
SQL> declare
2 cursor cur_versao is
3 select banner from v$version;
4 rec_versao cur_versao%rowtype;
5 begin
6 open cur_versao;
7 fetch cur_versao
8 into rec_versao;
9 while cur_versao%found
10 loop
11 dbms_output.put_line(rec_versao.banner);
12 fetch cur_versao
13 into rec_versao;
14 end loop;
15 close cur_versao;
16 end;
17 /Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 64-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - ProductionPL/SQL procedure successfully completed
SQL>
12 de dezembro de 2009 às 3:14 pm #91523Girino
ParticipanteOlá..!! 8)
Como colocar o meu select no código que vc passou. 💡
Tentei adaptar mais não consegui..!! 😥
Muito Obrigado..!!
Renato
12 de dezembro de 2009 às 3:19 pm #91524Girino
Participantetentei de duas formas, Veja:
CREATE OR REPLACE PROCEDURE TESTANDO AS
cursor cur_versao is
select EMPRESA,CODIGO FROM FUNCIONARIOS;
rec_versao cur_versao%rowtype;
begin
open cur_versao;
fetch cur_versao
into rec_versao;
while cur_versao%found
loop
dbms_output.put_line(rec_versao.EMPRESA, rec_versao.CODIGO);
fetch cur_versao
into rec_versao;
end loop;
close cur_versao;
end;
CREATE OR REPLACE PROCEDURE TESTANDO AS
cursor cur_versao is
select *FROM FUNCIONARIOS;
rec_versao cur_versao%rowtype;
begin
open cur_versao;
fetch cur_versao
into rec_versao;
while cur_versao%found
loop
dbms_output.put_line(rec_versao);
fetch cur_versao
into rec_versao;
end loop;
close cur_versao;
end;O que estou fazendo de errado??? 🙄
Valeu..!! 😉
12 de dezembro de 2009 às 7:19 pm #91530burga
ParticipanteTanto no primeiro quanto no segundo código você está errando no DBMS_OUTPUT.PUT_LINE.
Nesta função você deve passar como parâmetro UMA cadeia de caracteres. No primeiro exemplo o Oracle entende que você está passando dois parâmetros de entrada e no segundo um rowtype, o correto seria transformar o que você deseja imprimir em uma única cadeia de caracteres…
Ex:
dbms_output.put_line(rec_versao.EMPRESA || ', ' || rec_versao.CODIGO);14 de dezembro de 2009 às 6:14 pm #91571Girino
ParticipanteOK..!! 8)
Muito Obrigado..!! 😀
Renato
18 de dezembro de 2009 às 4:41 pm #91639Girino
ParticipanteOlá..!!
Engraçado, quando eu tento executar esta procedure no Crystal Reports não gera nenhum erro, porém ele não me retorna nada..!! 😥
Por que será??? 🙄
abraços..!! 😀
Renato
30 de dezembro de 2009 às 5:55 pm #91807Girino
ParticipanteOlá..!! 😀
Estou fazendo da seguinte forma: 😉
create or replace PROCEDURE RT AS
P_EMPRESA VARCHAR2(2);
P_CENTRO VARCHAR2(8);
CURSOR CR IS
SELECT EMPRESA,CENTRO FROM FUNCIONARIOS;
BEGIN
OPEN CR;
LOOP
FETCH CR INTO P_EMPRESA,P_CENTRO;
EXIT WHEN CR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE (‘CODIGO DA EMPRESA: ‘ || P_EMPRESA || ‘ ‘ || ‘CENTRO DE CUSTO: ‘ || P_CENTRO);
END LOOP;
CLOSE CR;
END;No prompt de linha de comando do ORACLE funciona perfeitamente.
O Problema é quando eu executo a procedure no crystal não aparecem os campos EMPRESA e CENTRO no relatório. Na verdade não dá nenhum erro, porém também não retorna nenhum campo. 😥Se tiver alguma solução..!! Talvez criar uma tabela para inserir os dados da procedure, sei lá..!!
abraços e muito obrigado.. 😀
Renato
30 de dezembro de 2009 às 8:22 pm #91813fsitja
ParticipanteVocê não tem que usar procedure para isso. O DBMS_OUTPUT não quer dizer nada para quem chama a procedure.
Não uso Crystal Report, mas penso que você deveria colocar o SQL diretamente na ferramenta, apenas o SELECT, ainda mais considerando que é algo bastante simples.
30 de dezembro de 2009 às 8:42 pm #91816Girino
ParticipanteOlá..!! 8)
Concordo com você que o exemplo que eu passei é bem simples mesmo.
A intenção é de pegar a idéia de como fazer e trabalhar em casos complexos já que Tabelas, Tabelas Temporárias e Views são um pouco limitadas ao contrario das procedures e funções onde você pode trabalhar com muito mais recursos as informações..!! 😀Valeu..!! Se tiver alguma idéia, posta ai blz..!! 😉
abraço,
Renato 8)
30 de dezembro de 2009 às 9:37 pm #91820fsitja
ParticipanteBlza, você estava testando a possibilidade de usar algo mais complexo, entendi agora 😉
De qualquer forma, SQL é muito rico e consegue atender a quase todas as perguntas que você possa fazer, com desempenho melhor do que usando PL/SQL. Porém, se você não conseguir de forma nenhuma fazer algo com SQL puro, dê uma olhada em table functions. Usando table functions em views, setando contexts dá para fazer muita coisa bisonha 😈
http://www.oracle.com/pls/db112/to_URL? … 23LNPLS915
Feliz Ano-Novo,
Francisco.30 de dezembro de 2009 às 9:46 pm #91822Girino
ParticipanteOlá Francisco..!! 8)
Vou dar uma olhada na dica que vc postou. 😀
Um feliz ano novo pra vc tb..!! 😉
Renato
-
AutorPosts
- Você deve fazer login para responder a este tópico.