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.