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:
The ORDER_LINE
block uses the ORDER.ORDER_ID
item as an argument to query its 开发者_Go百科records:
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:
- The datatype of the argument corresponding to the given value in the procedure argument list of the specified procedure.
- The value of the argument in the procedure argument list of the specified procedure.
Neither of these recommendations work:
- The data type of the argument in the form (
NUMBER
) is identical to the data type of the procedure's parameter (NUMBER
). - The value of the argument (
ORDER.ORDER_ID
) is also of typeNUMBER
(see first screen shot)
How do I resolve this error?
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!
精彩评论