【问题标题】:Oracle Apex - Loop ItemsOracle Apex - 循环项目
【发布时间】: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。

谢谢

【问题讨论】:

    标签: oracle oracle-apex


    【解决方案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;
    
    

    【讨论】:

    • 谢谢!以前从未听说过,谢谢!
    • 很高兴为您提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多