Weak ``++REF CURSOR++`` types are harder to work with than ones with a return type. Indeed, the compiler's type-checker is unable to make some verifications, which are then delayed till runtime.


When the use of weak ``++REF CURSOR++`` is required, it is best to use the ``++SYS_REFCURSOR++`` built-in type instead of defining a new one.

This rule's sysRefCursorAllowed parameter can be used to control whether or not the usage of ``++SYS_REFCURSOR++`` is allowed.


== Noncompliant Code Example

----
DECLARE
  TYPE dualCursorType IS REF CURSOR;                      -- Noncompliant
  dualCursor dualCursorType;

  otherCursor SYS_REFCURSOR;                              -- Compliant or non-compliant, depending on the "sysRefCursorAllowed" parameter
BEGIN
  otherCursor := dualCursor;                              -- Works
END;
/
----


== Compliant Solution

----
DECLARE
  TYPE dualCursorType IS REF CURSOR RETURN DUAL%ROWTYPE;
  dualCursor dualCursorType;

  TYPE otherCursorType IS REF CURSOR RETURN a%ROWTYPE;
  otherCursor otherCursorType;
BEGIN
  otherCursor := dualCursor;                              -- raises PLS-00382: expression is of wrong type, which makes debugging easier
END;
/
----

