在 oracle 表单中使用游标填充数据
populating data using cursor in oracle forms
我创建了一个包含 4 个文本项的块,我必须使用光标填充这些文本项。
我在相同的块post中写了一个代码-查询触发器如下:
DECLARE
CURSOR D_COMM_DET IS
SELECT COMM_SRNO, COMM_SUB_SRNO, COMM_REASON
FROM CUST_COMM
WHERE LEAD_ID = :INQUIRY.INQ_ID; -- master block "INQUIRY"
BEGIN
GO_BLOCK('DISPLAY_DET');
CLEAR_BLOCK('NO_VALIDATE');
FIRST_RECORD;
FOR CUR IN D_COMM_DET
LOOP
:DISPLAY_COMM_DET.A_COMM_SRNO := CUR.COMM_SRNO;
:DISPLAY_COMM_DET.A_COMM_SUB_SRNO := CUR.COMM_SUB_SRNO;
:DISPLAY_COMM_DET.A_COMM_REASON := CUR.COMM_REASON;
NEXT_RECORD;
END LOOP;
FIRST_RECORD;
END;
但这并没有填充文本项中的数据,也没有显示任何错误。
任何人都可以提供帮助。
谢谢。
您不能在 POST-QUERY 触发器中使用 GO_BLOCK、CLEAR_BLOCK、NEXT_RECORD 等受限内置过程。
在您的情况下,DISPLAY_COMM_DET 将详细信息块阻塞到查询块。
- 将 LEAD_ID 项添加到 DISPLAY_COMM_DET 区块。可以隐藏(Visible=No)
- 将DISPLAY_COMM_DET设置为基于CUST_COMMtable
的数据库块
- 在具有关系 INQUIRY.INQ_ID=DISPLAY_COMM_DET.LEAD_ID 的 INQUIRY 块上创建关系。
删除 POST-QUERY 触发器,您不需要它。
我不确定我是否理解正确。如果您需要显示来自其他 table 的原因名称,那么 POST-QUERY 触发器是正确的,但是在 DISPLAY_COMM_DET 块上。
根据CUST_COMMtable将此块作为详细块。创建非数据库项目 NDB_COMM_REASON_VALUE。在 DISPLAY_COMM_DET 块上创建 POST-QUERY 触发器,如下所示:
declare
cursor c_reason is
select comm_value
from common_master
where comm_reason = :display_comm_det.comm_reason;
begin
open c_reason;
fetch c_reason into :display_comm_det.ndb_comm_reason_value;
close c_reason;
end;
您不能在 POST-QUERY 触发器中使用 GO_BLOCK、CLEAR_BLOCK、NEXT_RECORD 等受限内置过程。
在 When-Button-Pressed Trigger 中写入 Execute_Query 和提到的代码。
我创建了一个包含 4 个文本项的块,我必须使用光标填充这些文本项。
我在相同的块post中写了一个代码-查询触发器如下:
DECLARE
CURSOR D_COMM_DET IS
SELECT COMM_SRNO, COMM_SUB_SRNO, COMM_REASON
FROM CUST_COMM
WHERE LEAD_ID = :INQUIRY.INQ_ID; -- master block "INQUIRY"
BEGIN
GO_BLOCK('DISPLAY_DET');
CLEAR_BLOCK('NO_VALIDATE');
FIRST_RECORD;
FOR CUR IN D_COMM_DET
LOOP
:DISPLAY_COMM_DET.A_COMM_SRNO := CUR.COMM_SRNO;
:DISPLAY_COMM_DET.A_COMM_SUB_SRNO := CUR.COMM_SUB_SRNO;
:DISPLAY_COMM_DET.A_COMM_REASON := CUR.COMM_REASON;
NEXT_RECORD;
END LOOP;
FIRST_RECORD;
END;
但这并没有填充文本项中的数据,也没有显示任何错误。 任何人都可以提供帮助。
谢谢。
您不能在 POST-QUERY 触发器中使用 GO_BLOCK、CLEAR_BLOCK、NEXT_RECORD 等受限内置过程。
在您的情况下,DISPLAY_COMM_DET 将详细信息块阻塞到查询块。
- 将 LEAD_ID 项添加到 DISPLAY_COMM_DET 区块。可以隐藏(Visible=No)
- 将DISPLAY_COMM_DET设置为基于CUST_COMMtable 的数据库块
- 在具有关系 INQUIRY.INQ_ID=DISPLAY_COMM_DET.LEAD_ID 的 INQUIRY 块上创建关系。
删除 POST-QUERY 触发器,您不需要它。
我不确定我是否理解正确。如果您需要显示来自其他 table 的原因名称,那么 POST-QUERY 触发器是正确的,但是在 DISPLAY_COMM_DET 块上。
根据CUST_COMMtable将此块作为详细块。创建非数据库项目 NDB_COMM_REASON_VALUE。在 DISPLAY_COMM_DET 块上创建 POST-QUERY 触发器,如下所示:
declare
cursor c_reason is
select comm_value
from common_master
where comm_reason = :display_comm_det.comm_reason;
begin
open c_reason;
fetch c_reason into :display_comm_det.ndb_comm_reason_value;
close c_reason;
end;
您不能在 POST-QUERY 触发器中使用 GO_BLOCK、CLEAR_BLOCK、NEXT_RECORD 等受限内置过程。
在 When-Button-Pressed Trigger 中写入 Execute_Query 和提到的代码。