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