Oracle中巧用FORMS_DDL

本文介绍了在Oracle的前端工具FORM4.5中利用封装进程实现数据批量复制、周期性数据处理及用户自定义公式列的方法。通过具体案例展示了如何提高工作效率。


iTbulo.COM




  在ORACLE的前端工具FORM4.5中,封装进程资真相当厚实,且用处遍及。笔者在琐屑筹算中,借助个中的封装进程“FORMS_DDL”,经管了良多使用困难。以下就所完成部分成效作简要介绍。

  一、 完成数据的批量复制

  在使用琐屑中,常常存在需求成批量处置的数据,回收措施完成后,可以年夜年夜地行进任务苦守。如以电表电耗DHJL(电表柜号DBGH,电表号DBH,倍率BL,月份YF CHAR(6),上月表底数BS1,本月表底数BS2)为例,用户当月的任务是将上月数据再追加一次,然后将BS2值自动交换为本月(A1)的BS1值,而用户只需输出本月的BS2值。编程完成如下:

  ――凭据上月发作当月(A1〔的纪录的查询

  H1:='SELECT DBGH,DBH,BL,'||''''||A1||''''||'"YF",BS2,BS2 FROM NHJL

  WHERE YF=TO_CHAR(ADD_MONTHS(TO_DATE(A1,'YYYYMM'),-1),'YYYYMM');

  ――生成且自表DHJL1

  FORMS_DDL('CREATE TABLE DHJL1 AS '||H1);

  ――将且自表追加到DHJL中,但不克不及重复

  H1:='INSERT INTO NHJL SELECT * FROM DHJL1 WHERE (DBGH,DBH,BL,YF)

  NOT IN (SELECT DBGH,DBH,BL,YF NHJL)';

  FORMS_DDL(H1);

  ――删除且自表

  FORMS_DDL('DROP TABLE DHJL1');

  ――提交

  COMMIT_FORM;

  二、 经管按周期换算成效

  一样平常使用中,另有一类具有模范周期性的使用。如在配备经管中,配备的周期性维修调养方案WXJH(配备编号SBBH,调养部位WXBW,调养内容WXNR,维修周期WXZQ,动手脱手月份KSRQ CHAR(6)),用户在举办数据初始化之后,只需输出一个年份值(A1),就凭据维修周期和输出年份换算出当年配备维修调养方案(WXJH1)的内容。措施完成如下:

  A1:='01';――初始化

  ――发作出1月份的维修调养项方针查询语句的字符串,并初始化H1

  H1:='SELECT SBBH,WXBW,WXNR,'||''''||A1||A2||''''||'"YF" FROM WXJH

  WHERE MOD('||A1||A2||'-TO_NUMBER(KSRQ),WXZQ)=0 AND KSRQ<='||''''||A1||A2||'''';

  K1:=2;――初始化

  ――发作出2到12月份的维修调养项方针查询语句的字符串,并用UNION跟尾

  WHILE K1<13 LOOP

  A2:=TO_CHAR(K1);

  A2:=LPAD(A2,2,'0');――式子转换

   H1:=H1||' UNION '||'SELECT SBBH,WXBW,WXNR,'||''''||A1||A2||''''||'"YF" FROM

   WXJH WHERE MOD('||A1||A2||'-TO_NUMBER(KSRQ),WXZQ)=0

   AND KSRQ<='||''''||A1||A2||'''';

  K1:=K1 1;

  END LOOP;

  ――删除旧表并创立新表

  FORMS_DDL('DROP VIEW WXJH1');

  FORMS_DDL('CREATE VIEW WXJH1 AS '||H1);

  三、 完成用户自界说公式列

  关于使用琐屑来说,绝年夜部分的编程和维护任务是由报表的调整惹起的。用户会提出自己输出公式界说新列的要求。完成措施如下:

  1、界说基表

   T1(行枢纽字ROWKEY, 列枢纽字COLKEY char(2) ,值VALUE number );

  T2(行枢纽字ROWKEY,列1COL00 ,列2 COL01,。。。。。。,列nnCOLmn);

   T3(列编码COLKEY char(2), 公式FORMU varchar2(300));

   基表T1和基表T2中寄放要查询的基本数据,完成N:1的对应关连。在T1上创立完成这种关连的数据库触发子,完成自动维护中央表T2(细致完成不再赘叙)。成立基表T1的次要方针,是为了REPORT中回收“矩阵作风”输出报表。基表T3中寄放着悉数可维护的列编码和列的公式。

   2、细致完成

   DECLARE

   H1 VARCHAR2(3000),

   H VARCHAR2(3000),

   CURSOR ZB IS SELECT 'SELECT ROWKEY,'||''''||COLKEY||''''||

   '"COLKEY",'||FORMU||'"VALUE" FROM T2' FROM T3

   WHERE FORMU IS NOT NULL;――界说按公式发作的新纪录的游标

  BEGIN

   ――发作对基本T1的查询的字符串

   H1:='SELECT ROWKEY,COLKEY,VALUE FROM T1';

   ――将发作的新纪录查询的“UNION”到基本T1上

   OPEN ZB;

   FETCH ZB INTO H;

   WHILE ZB%FOUND LOOP

    H1:=H1||' UNION '||H;

    FETCH ZB INTO H;

   END LOOP;

   CLOSE ZB;

   ――删除旧视图并创立新视图V1

   FORMS_DDL('DROP VIEW V1');

   FORMS_DDL('CREATE VIEW V1 AS '||H1);

  END;





版权声明: 原创作品,容许转载,转载时请务必以超链接体式式子标明文章 原始理由 、作者信息和本声明。不然将清查规则责任。

转载于:https://www.cnblogs.com/zgqjymx/archive/2011/03/07/1975837.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值