我需要返回主详细信息中表的所有记录,因为我使用触发器WHEN-VALIDATE-ITEM并且我正在使用此代码
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;
这只是给我一条记录。请帮帮我!
答案 0 :(得分:3)
这当然不是在Oracle Forms中填充数据块的方法。即使您设法这样做,表单也会考虑 new 这些行,并且 - 如果您尝试保存它们 - 您将获得主要/唯一密钥违规。
您应该使用数据块向导来指导您完成创建主块的过程(通常采用表单布局,显示单个记录)。
然后再次运行向导以创建详细信息块(通常以表格布局显示,显示多个记录)。确保创建这两个块之间的关系。
如果正确创建了这些表(即具有主键以及建立主 - 详细信息关系的外键),表单将自动提供应加入哪些列。
完成向导后,该表单将以各种方式运行 - 您不必编写一行代码。所以,你可以
截至您编写的代码:Barbaros告诉您如何修复它,但它仍无法在WHEN-VALIDATE-ITEM
触发器中工作,因为您无法使用受限制的程序(例如{{1其中包含{}或GO_BLOCK
}。这并不重要,因为你想做的方式是完全错误的。
答案 1 :(得分:0)
为什么需要COMMIT
来返回记录。
目标区块应该被清除(CLEAR_BLOCK(NO_VALIDATE)
需要FIRST_RECORD
才能在没有任何弹出窗口的情况下执行此目标,
再次使用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;
,将光标移到返回结尾的记录顶部。
因此,您可以使用以下内容:
import {generateDeps} from './depsGenerator'
//...
generateDeps().then(() => {
//...
})