国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

Oracle 中巧用FORMS_DDL

2024-08-29 13:39:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  在Oracle的前端工具FORM4.5中,封裝過(guò)程資源相當(dāng)豐富,且用途廣泛。筆者在系統(tǒng)設(shè)計(jì)中,借助其中的封裝過(guò)程“FORMS_DDL”,解決了許多應(yīng)用難題。以下就所實(shí)現(xiàn)部分功能作簡(jiǎn)要介紹。
  一、 實(shí)現(xiàn)數(shù)據(jù)的批量復(fù)制
   在應(yīng)用系統(tǒng)中,經(jīng)常存在需要成批量處理的數(shù)據(jù),采用程序?qū)崿F(xiàn)后,可以大大地提高工作效率。如以電表電耗DHJL(電表柜號(hào)DBGH,電表號(hào)DBH,倍率BL,月份YF CHAR(6),上月表底數(shù)BS1,本月表底數(shù)BS2)為例,用戶當(dāng)月的工作是將上月數(shù)據(jù)再追加一次,然后將BS2值自動(dòng)替換為本月(A1)的BS1值,而用戶只需輸入本月的BS2值。編程實(shí)現(xiàn)如下:
   根據(jù)上月產(chǎn)生當(dāng)月(A1〔的記錄的查詢
  H1:='SELECT DBGH,DBH,BL,'''''A1
  '''''"YF",BS2,BS2 FROM NHJL
  WHERE YF=TO_CHAR(ADD_MONTHS(TO_DATE
  (A1,'YYYYMM'),-1),'YYYYMM');
   生成臨時(shí)表DHJL1
  FORMS_DDL('CREATE TABLE DHJL1 AS 'H1);
   將臨時(shí)表追加到DHJL中,但不能重復(fù)
  H1:='INSERT INTO NHJL SELECT * FROM
  DHJL1 WHERE (DBGH,DBH,BL,YF)
  NOT IN (SELECT DBGH,DBH,BL,YF NHJL)';
  FORMS_DDL(H1);
   刪除臨時(shí)表
  FORMS_DDL('DROP TABLE DHJL1');
   提交
  COMMIT_FORM;
   二、 解決按周期換算問(wèn)題
  日常應(yīng)用中,還有一類具有典型周期性的應(yīng)用。如在設(shè)備治理中,設(shè)備的周期性維修保養(yǎng)計(jì)劃WXJH(設(shè)備編號(hào)SBBH,保養(yǎng)部位WXBW,保養(yǎng)內(nèi)容WXNR,維修周期WXZQ,開(kāi)始月份KSRQ CHAR(6)),用戶在進(jìn)行數(shù)據(jù)初始化之后,只要輸入一個(gè)年份值(A1),就根據(jù)維修周期和輸入年份換算出當(dāng)年設(shè)備維修保養(yǎng)計(jì)劃(WXJH1)的內(nèi)容。程序?qū)崿F(xiàn)如下:
  A1:='01'; 初始化
  產(chǎn)生出1月份的維修保養(yǎng)項(xiàng)目的查詢語(yǔ)句的字符串,并初始化H1
  H1:='SELECT SBBH,WXBW,WXNR,
   '''''A1A2'''''"YF" FROM WXJH
  WHERE MOD('A1A2'-TO_NUMBER(KSRQ),WXZQ)=0 AND
   KSRQ< ='''''A1A2'''';
  K1:=2; 初始化
  產(chǎn)生出2到12月份的維修保養(yǎng)項(xiàng)目的查詢語(yǔ)句的字符串,并用UNION連接
  WHILE K1< 13 LOOP
   A2:=TO_CHAR(K1);
   A2:=LPAD(A2,2,'0'); 格式轉(zhuǎn)換
   H1:=H1' UNION ''SELECT SBBH,WXBW,WXNR,
   '''''A1A2'''''"YF" FROM
   WXJH WHERE MOD('A1A2'-TO_NUMBER(KSRQ),WXZQ)=0
   AND KSRQ< ='''''A1A2'''';
   K1:=K1+1;
  END LOOP;
   刪除舊表并創(chuàng)建新表
  FORMS_DDL('DROP VIEW WXJH1');
  FORMS_DDL('CREATE VIEW WXJH1 AS 'H1);
  三、 實(shí)現(xiàn)用戶自定義公式列
  對(duì)于應(yīng)用系統(tǒng)來(lái)說(shuō),絕大部分的編程和維護(hù)工作是由報(bào)表的調(diào)整引起的。用戶會(huì)提出自己輸入公式定義新列的要求。實(shí)現(xiàn)方法如下:
  1、定義基表
  T1(行要害字ROWKEY, 列要害字COLKEY char(2) ,值VALUE number );
   T2(行要害字ROWKEY,列1COL00 ,列2 COL01,。。。。。。,列nnCOLmn);
  T3(列編碼COLKEY char(2), 公式FORMU varchar2(300));
  基表T1和基表T2中存放要查詢的基本數(shù)據(jù),實(shí)現(xiàn)N:1的對(duì)應(yīng)關(guān)系。在T1上創(chuàng)建實(shí)現(xiàn)這種關(guān)系的數(shù)據(jù)庫(kù)觸發(fā)子,實(shí)現(xiàn)自動(dòng)維護(hù)中間表T2(具體實(shí)現(xiàn)不再贅敘)。建立基表T1的主要目的,是為了REPORT中采用“矩陣風(fēng)格”輸出報(bào)表。基表T3中存放著所有可維護(hù)的列編碼和列的公式。
  2、具體實(shí)現(xiàn)
  
   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; 定義按公式產(chǎn)生的新記錄的游標(biāo)
   BEGIN
   產(chǎn)生對(duì)基本T1的查詢的字符串
   H1:='SELECT ROWKEY,COLKEY,VALUE FROM T1';
  將產(chǎn)生的新記錄查詢的“UNION”到基本T1上
   OPEN ZB;
   FETCH ZB INTO H;

   WHILE ZB%FOUND LOOP
   H1:=H1' UNION 'H;
   FETCH ZB INTO H;
   END LOOP;
   CLOSE ZB;
   刪除舊視圖并創(chuàng)建新視圖V1
   FORMS_DDL('DROP VIEW V1');
   FORMS_DDL('CREATE VIEW V1 AS 'H1);
   END;

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 牟定县| 吴忠市| 三明市| 临西县| 苏尼特右旗| 郑州市| 武汉市| 克拉玛依市| 盱眙县| 天柱县| 台北市| 仙桃市| 郓城县| 夏津县| 遂川县| 建平县| 山西省| 弥渡县| 西盟| 朝阳县| 铜川市| 芜湖县| 隆昌县| 高清| 安福县| 东莞市| 江油市| 岢岚县| 晋江市| 大方县| 香港 | 木兰县| 防城港市| 河间市| 杨浦区| 靖宇县| 宕昌县| 平泉县| 莱西市| 光山县| 札达县|