Utilizando função Oracle com refcursor no reporting services


Abaixo vou demonstrar como utilizar uma função Oracle que retorna um refcursor no reporting services.

1) Montar uma função no banco Oracle que retorne um ref cursor, abaixo segue um exemplo simples de retornar uma lista de empregados e o parâmetro informado será a quantidade de linhas:

create or replace function fteste(p_qtde_registro in number) return sys_refcursor is
    rc sys_refcursor;
begin
open rc for select id,nome from emp where rownum <= p_qtde_registro;
    return rc;
end;

2) Compilado a função Fteste no banco de dados conforme o item anterior, dentro do reporting services criar um dataset do tipo stored procedure e coloque o nome da função criada que no caso é Fteste;

Figura 2: Tela do report data para criar um novo data set com botão direito do mouse

Figura 3: Tela de propriedades do dataset onde informa o nome do dataset, data source e da função

3) Como a função Fteste tem parâmetro automaticamente o reporting services criará esse mesmo parâmetro com o mesmo nome no relatório e os campos mencionados também virão que no caso é id e nome;

Figura 4: Tela do Report data exibindo os parâmetros

4) Arrastar o objeto table no relatório e vincular ao dataset criado;

Figura 5: Tela do relatório com o objeto table

5) Para vincular a table ao dataset basta entrar nas propriedades e colocar no nome do dataset no item Datasetname conforme abaixo;

Figura 6: Tela de propriedades do objeto table

6) Para executar o relatório basta clicar na aba Preview e pedirá para informar o valor do parâmetro conforme a figura abaixo;

Figura 7: Tela de preview do relatório exibindo o campo de parâmetro

7) Ao colocar o valor 5 por exemplo e clicar em View Report, abaixo segue o resultado do relatório:

Figura 8: Resultado do relatório exibindo 5 linhas conforme informado no parâmetro

Artigo publicado por: Marcius Yukio Nishida - formado em ciências da computação em 2000, é analista de sistemas na Scania Latin America Ltda, focado em sistemas de produção no Brasil e na Europa. Trabalha na área de TI desde 1995 e, atualmente, está cursando o MBA em Business Intelligence na IBTA.


José Carlos Macoratti