如果验证通过,则在保存后刷新IG

问题描述 投票:0回答:1

我有一个带有一些数据的交互式网格,当用户添加一个它没有显示的新行时(发现这是因为我编写了一个自定义程序来保存而我不返回PK)。

所以我在Save [Interactive Grid]上设置了一个动态操作,其中包含服务器端条件类型:未显示内联验证错误,具有刷新区域的真实操作。

但条件似乎有效。当添加通过验证的行时,它会刷新就好了,但是当添加验证失败的行时,会出现验证错误并出现一个弹出窗口,询问我是否确定要进行更改(尝试刷新) 。

我已经尝试将条件更改为显示的内联验证错误,但是这样做了。我已经尝试将事件范围更改为动态(我甚至不知道它的作用),但这没有帮助。

我还将IG主键从我的表中的默认PK更改为ROWID,如果这可能有助于自定义保存过程。

我宁愿修复这个没有编辑保存程序,好像我必须要修复很多保存程序。但如果我不能解决它们。但我不确定如何。我的保存程序格式如下:

PROCEDURE save_table (s_variable1 IN table.variable1%TYPE
              , s_variable2 IN table.variable2%TYPE
              , row_status IN VARCHAR2)IS          
BEGIN
  CASE row_status
    WHEN 'C' THEN
      INSERT INTO table(variable1, variable2)
      VALUES (variable1_seq.nextval, s_variable2);

    WHEN 'U' THEN
      UPDATE table
         SET variable2= s_variable2
       WHERE variable1= s_variable1;

    WHEN 'D' THEN
      DELETE FROM table
       WHERE variable1= s_variable1;
  END CASE;

END save_table;

如果有人能告诉我最简单的方法来修复它以返回PK(variable1)或ROWID,以便IG更新那一行,所以我甚至不需要动态操作。

编辑:发现最简单的方法是更改​​程序,并找出如何:

PROCEDURE save_table (s_variable1 IN OUT table.variable1%TYPE
              , s_variable2 IN table.variable2%TYPE
              , row_status IN VARCHAR2)IS
a_variable1 table.variable1%TYPE;          
BEGIN
  CASE row_status
    WHEN 'C' THEN
      a_variable1 := variable1_seq.nextval;
      INSERT INTO table(variable1, variable2)
      VALUES (a_variable1, s_variable2)
      RETURNING a_variable1 INTO s_variable1;

只发布了我更改的部分。

oracle-apex
1个回答
0
投票

RETURNING INTO子句允许我们返回受DML语句影响的行的列值。您可以在过程中使用它来返回列值,如下所示。

 DECLARE
  l_id t1.id%TYPE;
BEGIN
  INSERT INTO t1 VALUES (t1_seq.nextval, 'FOUR')
  RETURNING id INTO l_id;
  COMMIT;

  DBMS_OUTPUT.put_line('ID=' || l_id);
END;

For more details on Returning into see this link

© www.soinside.com 2019 - 2024. All rights reserved.