熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle 中巧用FORMS

2013-11-13 15:24:22  來源: Oracle 

  在ORACLE的前端工具FORM封裝過程資源相當豐富且用途廣泛筆者在系統設計中借助其中的封裝過程FORMS_DDL解決了許多應用難題以下就所實現部分功能作簡要介紹
  一 實現數據的批量復制
   在應用系統中經常存在需要成批量處理的數據采用程序實現後可以大大地提高工作效率如以電表電耗DHJL(電表櫃號DBGH電表號DBH倍率BL月份YF CHAR()上月表底數BS本月表底數BS)為例用戶當月的工作是將上月數據再追加一次然後將BS值自動替換為本月(A)的BS而用戶只需輸入本月的BS編程實現如下
   根據上月產生當月(A〔的記錄的查詢
  H:=SELECT DBGHDBHBL||||A||
  ||YFBSBS FROM NHJL
  WHERE YF=TO_CHAR(ADD_MONTHS(TO_DATE
  (AYYYYMM))YYYYMM);
   生成臨時表DHJL
  FORMS_DDL(CREATE TABLE DHJL AS ||H);
   將臨時表追加到DHJL中但不能重復
  H:=INSERT INTO NHJL SELECT * FROM
  DHJL WHERE (DBGHDBHBLYF)
  NOT IN (SELECT DBGHDBHBLYF NHJL);
  FORMS_DDL(H);
   刪除臨時表
  FORMS_DDL(DROP TABLE DHJL);
   提交
  COMMIT_FORM;
   二 解決按周期換算問題
  日常應用中還有一類具有典型周期性的應用如在設備管理中設備的周期性維修保養計劃WXJH(設備編號SBBH保養部位WXBW保養內容WXNR維修周期WXZQ開始月份KSRQ CHAR())用戶在進行數據初始化之後只要輸入一個年份值(A就根據維修周期和輸入年份換算出當年設備維修保養計劃(WXJH)的內容程序實現如下
  A:=; 初始化
  產生出月份的維修保養項目的查詢語句的字符串並初始化H
  H:=SELECT SBBHWXBWWXNR
   ||||A||A||||YF FROM WXJH
  WHERE MOD(||A||A||TO_NUMBER(KSRQ)WXZQ)= 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);
  三、 實現用戶自定義公式列
  對於應用系統來說,絕大部分的編程和維護工作是由報表的調整引起的。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
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.