代码之家  ›  专栏  ›  技术社区  ›  Coding Duchess

Oracle APEX无法将值保存到会话中

  •  2
  • Coding Duchess  · 技术社区  · 6 年前

    P2_ITEM_TYPE_ID

    BEGIN
       select ITEM_TYPE_ID INTO :P2_ITEM_TYPE_ID from TABLE1 where ITEM_ID = :P2_ITEM_ID;
       exception
          when no_data_found then
            :P2_ITEM_TYPE_ID := null;
    END;
    

    当前,表1中不存在该项的记录,因此引发异常NO_DATA_FOUND,并且最初将该项的类型设置为null。

    现在,我想通过单击页面上的一张卡,抓取其ID并将页面项目P2\U项目\U类型\U ID设置为该ID来设置项目\U类型\U ID。

    var $item_type_id = this.data;
    console.log($item_type_id); //prints out correect ID
    apex.item("P2_ITEM_TYPE_ID").setValue($item_type_id);
     console.log(apex.item("P2_ITEM_TYPE_ID").getValue()); //prints out correct value
    
    //set session state of P2_ITEM_TYPE_ID
    apex.server.process ( "SAVE_HIDDEN_VALUE_IN_SESSION_STATE", 
    {
         x01: $item_type_id,
         pageItems: "#P2_ITEM_TYPE_ID"
    }, 
    {dataType: 'text'} );
    

    我知道当正确的值被打印到控制台时,代码是有效的,但是当我检查页面的会话时,P2_ITEM_TYPE_ID在会话中为空。有什么问题吗?

    这几乎就好像有什么东西在阻止th值的改变。 我在另一个页面上有相同的设置,但有一点不同-预呈现中的代码不包括异常部分,因为表1中始终有该项的记录\u ID:

    BEGIN
       select ITEM_TYPE_ID INTO :P3_ITEM_TYPE_ID from TABLE1 where ITEM_ID = :P3_ITEM_ID;
    END;
    

    2 回复  |  直到 6 年前
        1
  •  4
  •   Jeffrey Kemp    6 年前

    你不需要 apex.server.process 为此,您可以使用 执行PL/SQL代码 P2_ITEM_TYPE_ID )在 属性(集合) PL/SQL代码 null; ).

        2
  •  1
  •   Littlefoot    6 年前

    如果这些页面上的所有内容都相同,除了 EXCEPTION 还有一个变通方法:使用聚合函数,例如。

    select max(ITEM_TYPE_ID) INTO :P2_ITEM_TYPE_ID from TABLE1 where ITEM_ID = :P2_ITEM_ID;
    

    它将阻止查询返回 NO_DATA_FOUND 如果没有价值的话 :P2_ITEM_ID NULL 进入 :P2_ITEM_TYPE_ID