``++%TYPE++`` and ``++%ROWTYPE++`` seem like an easy way to make sure that a variable's type always matches the type of the relevant column in an existing table. If the column type changes, then the variable changes with it.
However, Oracle Forms compiled against a procedure using either of these two symbols won't get the benefit of that flexibility. Instead, at compile time, the relevant type is looked up from the underlying database and used in the form. If the column type changes later or the form is running against a database with different length semantics, attempting to use the form results in an "ORA-04062: Signature of package has been changed" error on the package in question. And the form needs to be recompiled on exactly the same database environment where it will run to avoid the error.
Note that ``++%TYPE++`` and ``++%ROWTYPE++`` can be used in a package's private procedures and functions, private package variables, and local variables without issue, but not in the package specification.