在 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 将详细信息块阻塞到查询块。

  1. 将 LEAD_ID 项添加到 DISPLAY_COMM_DET 区块。可以隐藏(Visible=No)
  2. 将DISPLAY_COMM_DET设置为基于CUST_COMMtable
  3. 的数据库块
  4. 在具有关系 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 和提到的代码。