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

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

Oracle中巧用FORMS_DDL

2024-08-29 13:34:54
字體:
供稿:網(wǎng)友
  在Oracle的前端工具FORM4.5中,封裝過程資源相當(dāng)豐富,且用途廣泛。筆者在系統(tǒng)設(shè)計(jì)中,借助其中的封裝過程“FORMS_DDL”,解決了許多應(yīng)用難題。以下就所實(shí)現(xià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;

  二、 解決按周期換算問題

  日常應(yīng)用中,還有一類具有典型周期性的應(yīng)用。如在設(shè)備治理中,設(shè)備的周期性維修保養(yǎng)計(jì)劃WXJH(設(shè)備編號(hào)SBBH,保養(yǎng)部位WXBW,保養(yǎng)內(nèi)容WXNR,維修周期WXZQ,開始月份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)目的查詢語句的字符串,并初始化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)目的查詢語句的字符串,并用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)用戶自定義公式列

  對于應(yīng)用系統(tǒng)來說,絕大部分的編程和維護(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的對應(yīng)關(guān)系。在T1上創(chuàng)建實(shí)現(xiàn)這種關(guān)系的數(shù)據(jù)庫觸發(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)生對基本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ā)表
主站蜘蛛池模板: 威宁| 河西区| 巴彦淖尔市| 罗江县| 新安县| 南部县| 曲麻莱县| 岳池县| 泰顺县| 徐汇区| 瑞金市| 双城市| 从化市| 湄潭县| 剑河县| 上虞市| 霍林郭勒市| 洪泽县| 渭南市| 鄂伦春自治旗| 晋宁县| 赤壁市| 高邮市| 游戏| 腾冲县| 台东市| 上栗县| 怀宁县| 阜宁县| 淮南市| 永修县| 循化| 泰和县| 竹溪县| 邓州市| 南投县| 涿鹿县| 墨竹工卡县| 宁蒗| 静安区| 监利县|