Skip to Main Content

Oracle Forms

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Forms 12c: Unexpected fragile external reference -- PL/SQL Error 801

Steve CosnerOct 31 2016 — edited Jun 21 2017

Is this a known bug?  I can't find any mention of it.

I have a cursor defined in a package specification in my form.

I access the cursor from a procedure in the form.

The Forms 12c compiler fails to compile the procedure, giving this error:

PL/SQL ERROR 801 at line 0, column 0

internal error [Unexpected fragile external reference.]

This form compiles (AND runs) in Forms 6, Forms 10, and Forms 11.

I've created the simplest form to demonstrate.  My actual form is far more complex, and it has a single cursor in the package specification that is used in several program units.  As in the hundreds of forms here, we have a package specification used to hold all common variables and values that are used throughout the form by their dozens of processing procedures and triggers.  The package spec often does not have an associated package body.  Up until now, this has been a solid and reliable method of writing the most efficient code.

My test form FRM801.fmb is contained within the attached FRM801.zip file (11.2 KB)

I would like to know if others encounter the same compiler error.

Here are the three program units.

Package spec:

PACKAGE P0 IS

  Dual_found  Boolean;

  Cursor Dual_cursor is

    Select 'ABC' as Col_1,

           dummy from dual;

  Dual_row Dual_cursor%rowtype;

END;

Procedure using the package cursor:

PROCEDURE P1_Dual(Dual_rec out P0.Dual_cursor%rowtype) IS

BEGIN

  For R in P0.Dual_cursor Loop

    Dual_rec    := R;

    P0.Dual_Row := R;

    exit; -- quit after retrieving the first row.

  End loop;

END;

Pushbutton - When-button-pressed trigger to run the procedure and use values within the local record as well as the row in the package spec.

Declare

  Dual_Rec   P0.Dual_cursor%rowtype;

Begin

  P1_Dual(Dual_Rec);

  Message('Values from local Dual_rec are:  Col_1='||Dual_Rec.Col_1

          ||'  Dummy='||Dual_Rec.dummy);

  Message('Values from Pkg P0.Dual_row are:  Col_1='||P0.Dual_row.Col_1

          ||'  Dummy='||P0.Dual_row.dummy);

  Message(' ',no_acknowledge); --forces prior message to popup

End;

This post has been answered by dkampf on Mar 9 2017
Jump to Answer

Comments

Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Apr 6 2017
Added on Oct 31 2016
8 comments
6,977 views