自动行号功能实现不同方法研究



方法一、

只需要将序号定义成公式,并将公式设置为:get_block_property('block_name',current_record)就可以实现了,或者把这行语句放到“When-Create-Record”触发器中。

缺点:增改删时,行号不能自动刷新。




方法二、


block的三个触发器中添加相应的代码:


Key-Crerec:
DECLARE
LINE NUMBER;
BEGIN
LINE := :SYSTEM.CURSOR_RECORD;
LOOP
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN 
EXIT; 
ELSE
NEXT_RECORD; 
:blk.ID := :SYSTEM.CURSOR_RECORD + 1; 
END IF; 
END LOOP;
GO_RECORD(LINE);
CREATE_RECORD;
:blk.ID := :SYSTEM.CURSOR_RECORD;
END;
Key - Delrec:
DECLARE
LINE NUMBER;
BEGIN
DELETE_RECORD;
LINE := :SYSTEM.CURSOR_RECORD;
LOOP 
:blk.ID := :SYSTEM.CURSOR_RECORD; 
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN 
EXIT; 
ELSE 
NEXT_RECORD; 
END IF; 
END LOOP;
GO_RECORD(LINE);
END;
When - Create - Record:
:blk.ID := :SYSTEM.TRIGGER_RECORD;

缺点:对于记录数很少的table适用,当table中的记录很多时,由于使用了循环操作,所以会影响效率。


 

为了防止按F11时也生成序号,影响查询,可以在生成前加入以下条件:


IF (:SYSTEM.MODE != ‘ENTER-QUERY’) THEN 


方法三


Step1创建3个参数和一个非数据库字段


Parametername                                                 type       InitialValue


P_BOLCKNAME_MAX_LINE_NUMBER    number


P_BOLCKNAME_VALIDATE_FLAG            char


P_BOLCKNAME_RESET_LINE_NUMBER  char        N


在使用line_number功能的Block中添加一个非数据库Item


Columnname                          type       InitialValue


VAL_REC_FIRED_FLAG      char       N


 


Step2block-leveltrigger中添加以下代码


(1) pre_query


 BOLCKNAME.line_num('PRE-QUERY');


(2) post_query


 BOLCKNAME.line_num('POST-QUERY');


(3) when_create_record


 IF :PARAMETER. P_BOLCKNAME_RESET_LINE_NUMBER = 'Y' THEN


     copy('1',:PARAMETER.P_BOLCKNAME_MAX_LINE_NUMBER);


     :PARAMETER.P_BOLCKNAME_RESET_LINE_NUMBER:= 'N';


END IF;


BOLCKNAME.line_num('INIT');


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值