首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle form多条记录

oracle form多条记录
EN

Stack Overflow用户
提问于 2018-05-09 22:38:42
回答 2查看 521关注 0票数 0

我需要在主详细信息中返回表的所有记录,因为我使用了触发器WHEN-VALIDATE-ITEM,并且我正在使用以下代码

代码语言:javascript
复制
DECLARE 
    CURSOR N IS 
          SELECT B.CODIGO_BARRA, B.REFER, B.DESC_PROD, B.CANT, B.PRECIO
          FROM PS62 B
          WHERE B.NRODOCTO = :E.NRO_DOCTO_PEDIDO
          AND B.CODCIA = :E.CODCIA;

BEGIN 
      GO_BLOCK('D');
      FIRST_RECORD;
             FOR I IN N  LOOP
                      :D.CODIGO_BARRA := I.CODIGO_BARRA;
                      :D.REFER := I.REFER;
                      :D.DESC_PROD := I.DESC_PROD;
                      :D.CANT := I.CANT;
                      :D.COSTO := I.PRECIO;
        NEXT_RECORD;
    END LOOP;
    COMMIT;
END;

这只会返回一条记录。请帮帮我!

EN

回答 2

Stack Overflow用户

发布于 2018-05-10 04:24:21

这肯定不是一种在Oracle Forms中填充数据块的方法。即使您设法做到了这一点,表单也会将这些行视为新的,并且-如果您尝试保存它们-您将得到主键/唯一键冲突。

您应该已经使用了Data Block Wizard,它将引导您完成创建主块(通常在窗体布局中,显示单个记录)的过程。

然后再次运行向导以创建详图块(该详图块通常以表格布局显示,显示多条记录)。确保创建这两个块之间的关系。

如果正确创建了这些表(即具有主键和建立主-详细关系的外键),表单将自动提供应该联接的列。

一旦向导完成,该表单将在所有方面发挥作用-您不需要编写一行代码。因此,您可以

不需要在您自己的程序unit中编写任何循环,

  • query
    • query master将检索其详细信息

  • 输入新值,
  • 更新或删除现有值。

在您编写的代码中: Barbaros告诉您如何修复它,但它无论如何都不会在WHEN-VALIDATE-ITEM触发器中工作,因为您不能在其中使用受限过程(如GO_BLOCKFIRST_RECORD)。这真的无关紧要,因为你想要做的方式是完全错误的。

票数 3
EN

Stack Overflow用户

发布于 2018-05-09 23:28:13

为什么需要COMMIT来返回记录。

应始终清除目标块(执行此目标需要CLEAR_BLOCK(NO_VALIDATE),而不会出现任何弹出窗口),

再次使用FIRST_RECORD,将光标移到returning末尾的记录顶部。

因此,您可以使用以下内容:

代码语言:javascript
复制
DECLARE 
    CURSOR N IS 
          SELECT B.CODIGO_BARRA, B.REFER, B.DESC_PROD, B.CANT, B.PRECIO
          FROM PS62 B
          WHERE B.NRODOCTO = :E.NRO_DOCTO_PEDIDO
          AND B.CODCIA = :E.CODCIA;

BEGIN 
      GO_BLOCK('D');
      CLEAR_BLOCK(NO_VALIDATE);
      FIRST_RECORD;
             FOR I IN N  LOOP
                      :D.CODIGO_BARRA := I.CODIGO_BARRA;
                      :D.REFER := I.REFER;
                      :D.DESC_PROD := I.DESC_PROD;
                      :D.CANT := I.CANT;
                      :D.COSTO := I.PRECIO;
        NEXT_RECORD;
    END LOOP;
   FIRST_RECORD;
END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50256061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档