Oracle Apex - 循环项目

Posted

技术标签:

【中文标题】Oracle Apex - 循环项目【英文标题】:Oracle Apex - Loop Items 【发布时间】:2022-01-17 00:34:51 【问题描述】:

我有一个表单,用户可以在其中为客户添加记录,问题是,每个客户可以有多个产品。 我的插入(记录)过程基本上检查是否在产品项目上添加了信息并循环必要的次数,例如: 用户添加客户 ABCDE 并选择 2 个产品,客户 ABCDE 的 2 条记录将与 2 个新产品一起插入。 问题是我无法让 Apex 插入这两种产品。我有这样的事情:

LOOP
    V_COUNTER := V_COUNTER + 1;
    EXIT WHEN V_COUNTER > V_AMOUNT_OF_PRODUCTS_COUNTER;
        INSERT INTO MY_TABLE (CUSTOMER,                   PRODUCT)
        VALUES               (:P2_MY_TEXT_CUSTOMER_ITEM, :P2_PRODUCT_||V_COUNTER);
END LOOP;

如果用户添加了 3 个产品: 结果:3行具有相同(第一项)产品名称的同一客户 期望的结果:3 行相同的产品,产品分别为 :P2_PRODUCT_1、:P2_PRODUCT_2 和 :P2_PRODUCT_3。

谢谢

【问题讨论】:

【参考方案1】:

绑定变量不能在 pl/sql 代码块中以声明方式命名,但您可以将它们作为参数传递给函数 APEX_UTIL.GET_SESSION_STATELPAD 将“1”转换为“01”。

所以你的代码将是(未经测试的):


LOOP
    V_COUNTER := V_COUNTER + 1;
    EXIT WHEN V_COUNTER > V_AMOUNT_OF_PRODUCTS_COUNTER;
        INSERT INTO MY_TABLE (
          CUSTOMER,
          PRODUCT)
        VALUES (
          :P2_MY_TEXT_CUSTOMER_ITEM
          ,apex_util.get_session_state (p_item => 'P2_PRODUCT'||'_'||LPAD(V_COUNTER,2,'0')));
END LOOP;

或使用 for 循环:


FOR r IN 1 .. V_AMOUNT_OF_PRODUCTS_COUNTER LOOP
  INSERT INTO MY_TABLE (
    CUSTOMER,
    PRODUCT)
  VALUES (
    :P2_MY_TEXT_CUSTOMER_ITEM
    ,apex_util.get_session_state (p_item => 'P2_PRODUCT'||'_'||LPAD(r,2,'0')));
END LOOP;

【讨论】:

谢谢!以前从未听说过,谢谢! 很高兴为您提供帮助

以上是关于Oracle Apex - 循环项目的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE apex - 使用 PL/SQL 循环通过复选框项目

如何在 Oracle Apex 中循环 G_FXX,其中 XX = (01,02..n)?

仅显示项目的 Oracle APEX 格式掩码

根据 Oracle APEX 项目值更新和插入

Oracle Apex:在另一个项目更改时刷新项目

Oracle Apex 18 穿梭项目在右侧显示最后选择的值