Declarações de cursores podem ser separadas em duas partes: especificação e corpo. Ao declarar um cursor em uma especificação de pacote, a especificação do pacote deveria conter apenas a especificação do cursor e o corpo do cursor deve ser incluído no corpo do pacote.
Em versões mais novas do Oracle Forms, o uso de cursores declarados com corpo em especificação de pacote também causa o erro de compilação "internal error [Unexpected fragile external reference.]".
create or replace package pkg is
cursor cur is
select dummy from dual;
end;
create or replace package pkg is
type cur_type is record(dummy varchar2(1));
cursor cur return cur_type;
end;
/
create or replace package body pkg is
cursor cur return cur_type is
select dummy from dual;
end;
/