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

Mensagemem Qua, 20 Dez 2017 8:25 am

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.

Código: Selecionar todos
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;
dricoosz

Mensagemem Qui, 21 Dez 2017 12:20 pm

Cara, você pode fazer uma function com retorno "pipelined" !!!
tiago_pimenta
Localização: Barretos / SP

Mensagemem Qui, 21 Dez 2017 1:08 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
dricoosz

Mensagemem Sex, 22 Dez 2017 8:22 am

Esqueci desse detalhe.... :roll:
tiago_pimenta
Localização: Barretos / SP

Mensagemem Qui, 04 Jan 2018 10:37 am

Eu tava pensando em algo assim:
https://livesql.oracle.com/apex/livesql ... ZN91R.html
Código: Selecionar todos
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
dr_gori
Localização: Seattle, WA, USA

Thomas F. G



Voltar para DBA Geral

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes