在oracle表单中插入Record

时间:2012-10-18 16:44:49

标签: sql oracle plsql oracleforms

我正在使用Oracle Forms Builder,我有一个包含多个记录的块。代码看起来有点像

first_record;
IF NAME_IN('SYSTEM.LAST_RECORD') != 'TRUE' THEN                                 
  LOOP                  
    IF name_in('QOTLNDET_LINES.SERIAL_NUMBER') IS NOT NULL THEN                         
      QOTLNDET_LINES_REMOVE.Delete_Row;
      clear_record;     
    ELSE                    
      next_record;
    END IF;
    EXIT WHEN NAME_IN('SYSTEM.LAST_RECORD') = 'TRUE';

  END LOOP;
  execute_query;
  COMMIT;
  go_block('QOTHDDET_MAIN');
END IF; 

在next_record之前,在ELSE段内,我需要删除当前记录并重新插入它。问题不在于删除记录,而是重新插入记录。有任何想法吗?提前致谢。

2 个答案:

答案 0 :(得分:2)

我同意APC,而不是重新插入记录,这意味着删除然后再次插入,更简单的方法是更新DB(或非DB)块中的字段。像 -

这样的东西
Go_Block('Block_B1');
Last_Record;
L_num_records := :system.cursor_record;
FOR i in 1..L_num_records
LOOP    
     Go_Block('Block_B1');
     Go_Record(i);
     --update the fields in the row
     :Block_B1.item1 := 'Set your value';
     :Block_B1.item2 := 'Set your value';
     ...
     ...
     Next_Record;
END LOOP;
First_Record;

答案 1 :(得分:0)

我同意APC和Annjawn认为更新似乎是正确的方法。在查看代码时,您似乎将代码放在pll库中。当您使用name_in()而不是直接引用该项时。如果这是真的,则意味着在将值分配给项目时,您自然无法使用直接引用。相反,你必须使用copy()。这是因为我使用了name_in()和copy(),但这样的事情应该有效:

IF NAME_IN('SYSTEM.LAST_RECORD') != 'TRUE' THEN                                 
  LOOP                  
    IF name_in('QOTLNDET_LINES.SERIAL_NUMBER') IS NOT NULL THEN                         
      QOTLNDET_LINES_REMOVE.Delete_Row;
      clear_record;     
    ELSE        
      Copy('new value', 'QOTLNDET_LINES.INVENTORY_ITEM');

      next_record;
    END IF;
    EXIT WHEN NAME_IN('SYSTEM.LAST_RECORD') = 'TRUE';

  END LOOP;
  execute_query;
  COMMIT;
  go_block('QOTHDDET_MAIN');
END IF;