Cursor com parâmetros em PL/SQL
View this post in English
Aqui vou mostrar outra técnica para trabalhar com cursores em PL/SQL. Eu tive que fazer um trabalho recentemente onde isso foi muito útil: Cursores que aceitam argumentos.
As maiores vantagem de usar queries parametrizadas no banco de dados é que o servidor não precisa fazer o parse e traçar um plano de execução (ele só faz isso na primeira vez que a query é executada) e ela fica certa em tempo de compilação (ao contrário das queries em string que nós só sabemos se há um erro de sintaxe em tempo de execução).
Dito isso vamos a um exemplo:
cursor ProdutoCursor(pnome in varchar2) is select * from produto where nome like pnome;
Legal, não? A sintaxe fica muito parecida com uma procedure. E o método de abrir o cursor também é legal:
open ProdutoCursor('A%');
Aqui vai abrir o cursor trazendo todos os produtos onde o nome começa com a letra 'A'.
Podemos ainda criar um rowtype a partir deste cursor:
prod ProdutoCursor%rowtype;
Agora vou criar um script para juntar tudo:
declare -- Cursor cursor ProdutoCursor(pnome in varchar2) is select * from produto where nome like pnome; -- Para loop simples prod ProdutoCursor%rowtype; -- Para loop com bulk collect type Tprods is table of ProdutoCursor%rowtype; prods Tprods; i integer; begin -- Loop simples open ProdutoCursor('A%'); loop fetch ProdutoCursor into prod; exit when ProdutoCursor%notfound; -- comandos a serem executados com o registro prod DBMS_OUTPUT.put_line(prod.nome); end loop; close ProdutoCursor; -- Loop com bulk collect open ProdutoCursor('A%'); fetch ProdutoCursor bulk collect into prods; for i in prods.first .. prods.last loop -- comandos a serem executaos com o registro prods(i) DBMS_OUTPUT.put_line(prods(i).nome); end loop; close ProdutoCursor; end;
Muito legal, né? Até a próxima.
Nenhum comentário:
Postar um comentário