oracle-databaseplsqloracleforms

How do I resolve an "FRM-30408: Invalid value" error in Oracle Forms?


My form has a master block (ORDER) and a detail block (ORDER_LINE). The ORDER block has an ORDER_ID item (it's primary key) defined as follows:

A screen shot of the ORDER_ID item's property palette

The ORDER_LINE block uses the ORDER.ORDER_ID item as an argument to query its records:

A screen shot of the ORDER_LINE block's property palette

A screen shot of the ORDER_ID argument's property palette

The ORDERING_PACKAGE.QUERY_ORDER_LINES procedure is declared as follows:

PROCEDURE
  query_order_lines
  (
    order_lines   IN OUT ORDER_LINE_CURSOR_TYPE,
    order_id      NUMBER,
    line_number   VARCHAR2,
    bin           VARCHAR2,
    plu           VARCHAR2,
    description   VARCHAR2
  );

When I attempt to compile my Oracle Form (Ctrl + T), I receive an error like this:

FRM-30408: Invalid value.
Reference: ORDER.ORDER_ID
Block: ORDER_LINE
Procedure: ORDERING_PACKAGE.QUERY_ORDER_LINES
Form: ORDER_FORM
FRM-30085: Unable to adjust form for output.

According to the documentation, the recommended solution is:

Cause: The value entered for the specified datatype is invalid.

Action: Correct one or more of the following:

  1. The datatype of the argument corresponding to the given value in the procedure argument list of the specified procedure.
  2. The value of the argument in the procedure argument list of the specified procedure.

Neither of these recommendations work:

  1. The data type of the argument in the form (NUMBER) is identical to the data type of the procedure's parameter (NUMBER).
  2. The value of the argument (ORDER.ORDER_ID) is also of type NUMBER (see first screen shot)

How do I resolve this error?


Solution

  • Ah yes, the very helpful help file in Oracle Forms. "Your parameter is wrong, change it, you donkey."

    Not so much help in this case, as the error is a bit more subtle.

    The value you are specifying for the argument ORDER.ORDER_ID would not be referencable in this case. You need to pre-pend it with the good ole :, to identify it as a bind variable. ":ORDER.ORDER_ID" is how it should read in the Value field for the argument.

    Essentially, the value column must be an actual value that your form could reference in a PL/SQL block (in the form).

    Hope this helps!