我有一个包含四个页面项目的Apex 4.2页面:
:P236_Author1_last_name
:P236_Author2_last_name
:P236_Author3_last_name
:P236_Author4_last_name
同样,我的表有以下字段: AUTHOR1_LAST_NAME AUTHOR2_LAST_NAME AUTHOR3_LAST_NAME AUTHOR4_LAST_NAME
我想创建一个页面进程来引用循环中的项目。类似的东西:
Declare
l_author_last_name varchar2(512);
l_column_name varchar2(512);
l_prim_key number;
Begin
For i In 1..4
Loop
l_author_last_name := ':P236_AUTHOR' || i || '_LAST_NAME';
l_column_name := 'AUTHOR' || i || 'LAST_NAME';
--Processing to determine the value of l_prim_key
Update my_table
Set l_column_name = l_author_last_name
Where my_table.prim_key = l_prim_key;
-- More processing here referencing l_author_last_name
End Loop;
End;
如何循环遍历仅由循环迭代次数区分的页面项? 非常感谢您对此的看法。 菲尔
答案 0 :(得分:2)
如何将项目的值存储在集合中然后循环遍历该集合?如果您通过变量引用列名或表名,请考虑使用EXECUTE IMMEDIATE
。这是您的代码的修订版:
Declare
type my_collection is table of varchar2(512);
collection_of_lastname my_collection := my_collection(:P236_Author1_last_name,:P236_Author2_last_name,:P236_Author3_last_name,:P236_Author4_last_name);
l_author_last_name varchar2(512);
l_column_name varchar2(512);
l_prim_key number;
Begin
For i In 1..collection_of_lastname.count
Loop
l_author_last_name := collection_of_lastname(i);
l_column_name := 'AUTHOR' || i || 'LAST_NAME';
--Processing to determine the value of l_prim_key
EXECUTE IMMEDIATE 'Update my_table
Set ' || l_column_name || '=''' || l_author_last_name ||
''' Where my_table.prim_key = ' || l_prim_key;
-- More processing here referencing l_author_last_name
End Loop;
End;