如何使用循环迭代循环遍历Oracle Page Items不同的项名称

时间:2015-11-16 02:57:44

标签: oracle-apex

我有一个包含四个页面项目的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;

如何循环遍历仅由循环迭代次数区分的页面项? 非常感谢您对此的看法。 菲尔

1 个答案:

答案 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;