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

时间:2019-03-27 10:38:57

标签: oracle-apex

我有一个包含一些数据的交互式网格,当用户添加新行时,它没有显示(发现这是因为我编写了一个自定义过程来保存并且没有返回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;

仅发布我更改的部分。

1 个答案:

答案 0 :(得分: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