You can reference items indirectly with the NAME_IN and COPY built-in subprograms.The NAME_IN function returns the contents of an indicated variable or item. Use the NAME_IN function to get the value of an item without referring to the item directly.
The following statements are equivalent:
IF :emp.ename = \'smith\' -- direct reference
IF NAME_IN(\'emp.ename\') = \'smith\' -- indirect reference
The return value is always a character string. To use NAME_IN for a DATE or NUMBER item, convert the string to the desired data type with the appropriate conversion function:
date_var := TO_DATE(Name_In(\'order.date_item\'));
num_var := TO_NUMBER(Name_In(\'order.number_item\'));
Notes on NAME_IN:
*The NAME_IN function cannot return the contents of a global or local variable.
*In PL/SQL triggers that will be executed in enter-query mode, you must use NAME_IN rather than normalbind-variable notation to access values in the data-block. (This is because the end-user might type relational operators into the item, producing a value which is not in a form that can be processed by PL/SQL.)
The COPY Procedure The COPY procedure assigns an indicated value to an indicated variable or item. Unlike standard PL/SQL assignment, however, using the COPY procedure allows you to indirectly reference the item whose value is being set:
:emp.ename := \'smith\'; -- direct reference
Copy(\'smith\',\'emp.ename\'); -- indirect reference
COPY can be used with the NAME_IN function to assign a value to an item whose name is stored in a reference variable or item:
/* put value \'smith\' in item whose name is stored in ref_item */
Copy(\'smith\',Name_In(\'control.ref_item\'));
Why Use Indirect Reference Referencing items indirectly allows you to write more generic, reusable code. By using variables in place of actual item names, you can write a subprogram that can operate on any item whose name has been assigned to the indicated variable.
Also, using indirect reference is mandatory when you refer to the value of a form bind variable (item, parameter, global variable) in PL/SQL that you write in a library or a menu module.Because libraries, menus, and forms are separate application modules, you cannot refer directly to the value of a form item in a menu-item command or library procedure.
library is not saved within form. but in different file, so there is no where to find :frm1.txt1
for example, if you have a procedure in library:
procedure p1( v_one varchar2)
name_in(v_one) to get the value inside v_one, that is :frm1.txt1, so:
copy(\'value\', name_in(v_one)) ==> to copy value to the txt field txt1 in form frm1.
you can\'t use:
copy(\'value\', :frm1.txt1), nor you can:
copy(\'value\', v_one).
<!-- Baidu Button BEGIN -->