2011-02-05

O que é SYS_REFCURSOR?

Um leitor perguntou-me por mail: o que é uma variavel SYS_REFCURSOR?

SYS_REFCURSOR é declarado no pacote STANDARD (um dos dois pacotes "default" do PL/SQL) e é uma declaração de um weekly typed cursor (cursor com tipo fraco). i.e. IS REF CURSOR



Ou seja evita teres de definir o tipo nos teus pacotes.
Isto é lc_cursor1 ou lc_cursor2 do codigo abaixo são do mesmo tipo.
DECLARE
lc_cursor1 SYS_REFCURSOR;

TYPE weak_cursor IS REF CURSOR;
lc_cursor2 weak_cursor;
...


Um strongly typed cursor (cursor com tipo forte) é um cursor que define na sua definição o tipo de estrutura de saída (ou seja o compilador sabe qual o tipo de output na compilação). A diferença na definição é usar RETURN com o tipo de record.
Por exemplo: 
TYPE emp_c IS REF CURSOR RETURN emp%ROWTYPE;
lc_emp emp_c;


A vantagem dos weak typed cursors é que a estrutura de ouput pode variar de chamada para chamada (para o uso de dynamic sql) mas contrariamente ao strong typed cursors o compilador não sabe qual o tipo de output (e por isso é mais dado a ocorrer erros em runtime).
Os strongly typed cursor possibilitam ao compilador a análise de concordância de tipos de variáveis.
Em termos de velocidade são muito semelhantes.

A vantagens de usar os REF CURSORS é poderem ser passados como output de funções (ou parâmetros OUT de procedimentos ).

No comments:

Post a Comment

Os comentários são moderados.
The comments are moderated.