在oracle表单中使用游标填充数据

时间:2015-10-29 12:19:55

标签: oracleforms

我创建了一个包含4个文本项的块,我必须使用游标填充它。

我在查询后触发器的相同块中编写了一个代码,如下所示:

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;

但这并没有填充文本项中的数据,也没有显示任何错误。 任何人都可以提供同样的帮助。

三江源。

3 个答案:

答案 0 :(得分:1)

你不能在POST-QUERY触发器中使用受限制的内置程序,如GO_BLOCK,CLEAR_BLOCK,NEXT_RECORD。

在你的情况下,让DISPLAY_COMM_DET阻止一个细节块到INQUIRY块。

  1. 将LEAD_ID项添加到DISPLAY_COMM_DET块。它可以隐藏(可见=否)
  2. 将DISPLAY_COMM_DET设置为基于CUST_COMM表的数据库块
  3. 使用关系INQUIRY.INQ_ID = DISPLAY_COMM_DET.LEAD_ID在INQUIRY块上创建关系。
  4. 删除POST-QUERY触发器,您不需要它。

答案 1 :(得分:0)

我不确定我是否理解你。如果需要显示其他表中的原因名称,则POST-QUERY触发器是正确的,但是在DISPLAY_COMM_DET块上。

将此块作为基于CUST_COMM表的详细块。创建非数据库项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;

答案 2 :(得分:-1)

你不能在POST-QUERY触发器中使用受限制的内置程序,如GO_BLOCK,CLEAR_BLOCK,NEXT_RECORD。

在When-Button-Pressed Trigger中写入Execute_Query和提到的代码。