在ORACLE的前端工具FORM
一
在應用系統中
根據上月產生當月(A
H
WHERE YF=TO_CHAR(ADD_MONTHS(TO_DATE
(A
生成臨時表DHJL
FORMS_DDL(
將臨時表追加到DHJL中
H
DHJL
NOT IN (SELECT DBGH
FORMS_DDL(H
刪除臨時表
FORMS_DDL(
提交
COMMIT_FORM;
二
日常應用中
A
產生出
H
WHERE MOD(
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);
三、 實現用戶自定義公式列
對於應用系統來說,絕大部分的編程和維護工作是由報表的調整引起的。Tw.wiNGWit.Com用戶會提出自己輸入公式定義新列的要求。實現方法如下:
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;
From:http://tw.wingwit.com/Article/program/Oracle/201311/16643.html