【问题标题】:post-text-item can't accept commitpost-text-item 不能接受提交
【发布时间】:2017-09-22 15:20:40
【问题描述】:

谁能推荐一个我可以在文本框中使用的好触发器。我打算在文本框中使用的操作是当用户更改文本框中的值时,我调用一个过程,该过程通过提交更新数据库表中的值。但是,因此当用户更改值并按下回车键时,它应该转到下一个项目,在此之前它会更新数据库。它在 KEY-NEXT-ITEM 触发器中工作正常。但是,一个问题是说用户更改了 fld 中的值,但没有按 tab 或 enter,而是直接 F10 提交。我在文本框中的触发器(即 KEY-NEXT-ITEM)没有触发。我尝试了 POST-TEXT-ITEM ,但它不允许我使用 ,COMMIT 或 NEXT_ITEM 内置插件。我希望触发器在用户退出项目时触发,并且它应该转到表单中的下一个项目

【问题讨论】:

    标签: oracle oracle11g oracle-sqldeveloper oracleforms


    【解决方案1】:

    使用 WHEN-VALIDATE-ITEM 触发器。此触发器主要用于验证用户输入的值。每次当表单决定时触发,用户完成字段值 - 当用户离开字段时,当用户按下提交时,等等。

    很遗憾,您无法在此触发器中使用 COMMIT_FORM。表单建议仅在事务触发器中直接更改数据库。要通过提交实现数据库更改,请让您的数据库过程在自治事务中运行:

    CREATE OR REPLACE PROCEDURE do_somethning (some_id NUMBER, some_value VARCHAR2) AS
      PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
      UPDATE some_table SET some_column = some_value
        WHERE table_id = some_id;
      COMMIT;
    END do_somethning;
    

    你的WHEN-VALIDATE-ITEM触发器可以是这样的

    BEGIN
       -- probably do some validations
       ...
       -- call your procedure
       do_something(:some_block.id, :some_block.your_field);
    END;
    

    【讨论】:

    • 这是个好主意......非常感谢注意:当我使用“PRAGMA AUTONOMOUS_TRANSACTION;”时它给了我检测到 ORA-00060 死锁,但是当我删除它时它运行良好..再次感谢您
    • 您可能正在更改与在表单中选择的相同的数据库记录。这是期望的行为吗?
    • 块中有更多的数据库字段吗?您如何更改这些项目?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2014-12-02
    • 2018-10-22
    • 2023-02-07
    • 1970-01-01
    • 2016-11-06
    相关资源
    最近更新 更多