Função para retornar tabela com sql dynamic

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
dricoosz
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Sex, 06 Out 2017 1:23 pm

Galera, uma ajudinha, quero criar um meio de busca, função ou procedure, do qual eu passe uma query de um select qualquer, exemplo, "select * from funcionarios", ou, "select cargo, salario from diretores", e ele me entregue o resultado da pesquisa, atualmente eu uso um cursor, mas ele me retorna tudo em uma linha, e eu queria isso de forma que eu pudesse apresentar em alguma aplicação, em forma de tabela, basicamente como faz a "Classic Report (based on function)" do apex.

Aqui o código que atualmente eu utilizado.

Selecionar tudo

create or replace function test_cursor(p_query in varchar2)
return sys_refcursor

is
    c_result sys_refcursor;
begin
    open c_result for p_query;
    return c_result;
end;
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Cara, você pode fazer uma function com retorno "pipelined" !!!
dricoosz
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Sex, 06 Out 2017 1:23 pm

tiago_pimenta escreveu:Cara, você pode fazer uma function com retorno "pipelined" !!!
Mas pra fazer uma pipelined eu tenho que declarar as colunas de retorno, não? No meu caso, eu não teria certo as colunas, pois cada select me retornaria uma quantidade diferente, como eu faço isso com pipelined, teria um exemplo? Grato
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Esqueci desse detalhe.... :roll:
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Eu tava pensando em algo assim:
https://livesql.oracle.com/apex/livesql ... ZN91R.html

Selecionar tudo

DECLARE 
   my_cursor SYS_REFCURSOR; 
 
   TYPE employee_ntt IS TABLE OF employees%ROWTYPE; 
 
   l_employees employee_ntt; 
BEGIN 
   OPEN my_cursor FOR 'SELECT * FROM employees'; 
 
   FETCH my_cursor 
   BULK COLLECT INTO l_employees; 
 
   DBMS_OUTPUT.put_line (l_employees.COUNT); 
 
   CLOSE my_cursor; 
END allrows_by; 
Mas o problema é que pra isso é necessário criar um TYPE com a estrutura.
Então essa solução não adianta. :-(

Daí eu encontrei esse link do TOM KYTE:
https://asktom.oracle.com/pls/apex/f?p= ... 0346702591
https://asktom.oracle.com/pls/apex/f?p= ... 0346741460

Talvez ajude
Responder
  • Informação