当前位置: 首页 > 知识库问答 >
问题:

Oracle forms 10g,多重插入和更新不起作用

贺博厚
2023-03-14

我有一个表格形式(显示4条记录)和一个数据块(基于视图)。

查询后,表单无法更新所有记录,但只有第一个记录值可以从LOV中选择。

我在插入和更新时调用了一个过程。

查询是这样的:

PACKAGE BODY MAPPING IS

PROCEDURE INSERT_ROW(EVENT_NAME IN VARCHAR2)
IS
BEGIN
IF (EVENT_NAME = 'ON-INSERT') THEN


INSERT INTO XX_REC_MAPPING
(BRANCH_CODE,COLLECTION_ID,PAY_MODE_ID,RECEIPT_METHOD,CREATED_BY,
CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,LAST_UPDATE_LOGIN)
VALUES
( :XX_REC_MAPPING.OFFICE_CODE,
:XX_REC_MAPPING.COLLECTION_ID,
:XX_REC_MAPPING.PAY_MODE_ID,
:XX_REC_MAPPING.RECEIPT_METHOD,
:XX_REC_MAPPING.CREATED_BY,
:XX_REC_MAPPING.CREATION_DATE,
:XX_REC_MAPPING.LAST_UPDATED_BY,
:XX_REC_MAPPING.LAST_UPDATE_DATE,
:XX_REC_MAPPING.LAST_UPDATE_LOGIN); 

ELSIF (EVENT_NAME = 'ON-UPDATE') THEN 

UPDATE XX_REC_MAPPING
SET BRANCH_CODE=:XX_REC_MAPPING.OFFICE_CODE,
COLLECTION_ID=:XX_REC_MAPPING.COLLECTION_ID,
PAY_MODE_ID=:XX_REC_MAPPING.PAY_MODE_ID,
RECEIPT_METHOD=:XX_REC_MAPPING.RECEIPT_METHOD,
LAST_UPDATED_BY=:XX_REC_MAPPING.LAST_UPDATED_BY,
LAST_UPDATE_DATE=:XX_REC_MAPPING.LAST_UPDATE_DATE,
LAST_UPDATE_LOGIN=:XX_REC_MAPPING.LAST_UPDATE_LOGIN
WHERE ROWID=:XX_REC_MAPPING.ROW_ID;

END IF;


END INSERT_ROW;

END MAPPING;

是否查看表,或者我应该使用其他触发器或循环?

请有人可以建议我如何编辑此查询以进行多次更新吗?

谢啦

星期六33

共有1个答案

袁鸿达
2023-03-14

托尼是对的。

您的块基于视图,其行为就像块基于表一样。编辑此块上的记录时,会发生几件事。:system.form_status将从查询变为更改。每个更改的记录都将:system.record_status设置为更改。

因此,当表单提交时 - Oracle表单自动知道它必须做一些工作,因为form_status已更改。然后,它开始处理块中的记录,循环遍历记录并处理每个记录,这些记录具有record_status已更改。

如果因为您的块是基于视图而忽略了ON-INSERT和ON-UPDATE(看起来确实如此),那么您需要做的就是将语句INSERT剪切并粘贴到XX_REC_MAPPING中.....到块级的ON-INSERT触发器中。这有效地覆盖了表单可能会触发的插入。

你也应该对你的更新做同样的事情——只在块级别将该语句剪切并粘贴到更新触发器中。

FRM: 40654记录已被另一个用户请求更改以查看更改

发生此错误是因为表单中的锁定机制触发。该块试图使用ROWID锁定记录。如果块基于视图,将没有可用的ROWID。

将块上的键模式设置为不可更新应该可以解决此问题。

我还建议阅读KEY MODE属性,因为这对于基于JOINS和VIEWS的块至关重要。

 类似资料:
  • 问题内容: INSERT INTO EMP_1 (EMP_NUM, EMP_LNAME, EMP_FNAME, EMP_INITIAL, EMP_HIREDATE, JOB_CODE) VALUES (‘101’, ‘News’, ‘John’, ‘G’, ‘08-Nov-00’, ‘502’), (‘102’, ‘Senior’, ‘David’, ‘H’, ‘12-Jul-89’, ‘501’

  • 前一段时间,我的查询对于单行更新很有效。现在我必须修改这个查询来更新多行。查询是本机的,使用postgresql和postgis。 老问题是: 在新的查询中,我在中添加了一些参数,如下所述: 但可悲的是,这种改变没有任何效果。(如果我午餐从postgresql查询它运行完美)。我该怎么解决? 编辑:我添加了查询,但它适用于postgresql。唯一的区别是旧版本:目标是一行,新的以多行为目标。id

  • 这个插件是关于杀死黑客的,但由于某些原因,它不会通过命令重新加载配置,我尝试了所有方法,但什么都没有,当我更改配置时,我必须重新加载服务器,而不是通过命令。 在其他类上,配置设置为true/false,当我转到config时,配置不会保存

  • 问题内容: 我有一张桌子,就是PK。当我插入行时,将有重复的键,并且我需要总结三个统计信息。我在Java中对PreparedStatement使用以下查询: 是否有更简洁的查询来实现?因为我简化了查询,所以那里有十多个统计信息。 问题答案:

  • 第一个命令从最后一个git提交中删除第一个单词,第二个命令尝试对apiendpoint进行调用,将该变量作为调用的一部分,第三个命令只打印该变量,以确保其正常工作。请参见下面的代码 当我运行那个bash脚本时,我从服务得到一个响应,说XML中的“Item没有正确设置”,但是它确实正确地回显了正确的变量。所以我知道第一线起作用了。如果我复制curl命令并将其粘贴到bash中,用实际值替换$somet

  • 我很难让Hibernate在MySQL上执行大容量插入。 我有要排序的主键生成类型,下面是我的dao.xml 这使得每次都可以执行单个查询。我也相应地刷新和清除实体管理器。 技术堆栈:Spring 4,Hibernate 5.2。 编辑1:我也浏览了下面的链接,但没有运气 https://vladmihalcea.com/how-to-batch-insert-and-update-stateme