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

Oracle DP2000 應用技巧

2013-11-13 22:16:36  來源: Oracle 

  Oracle 公 司 作 為 全 球 最 大 的 數 據 庫 廠 商 之 一 其 數 據 庫 系 統 是 優 秀 的 數 據 庫 管 理 系 統 在 大 型 系 統 象 保 險 金 融 等 部 門 的 廣 泛 應 用 是 眾 所 周 知 的 但 其 數 據 庫 前 端 開 發 工 具DEVEPER/ 在 業 界 中 介 紹 的 卻 相 對 較 少 其 實 其 開 發 工 具Developer/ 也 是 一 功 能 強 大 的 方 便 靈 活 的 開 發 工 具Developer/ 在 構 建 企 業 管 理 信 息 系 統 上 其 編 程 簡 便 開 發 周 期 短 維 護 方 便 等 優 勢 更 是 軟 件 開 發 商 所 中 意 之 處 筆 者 所 在 公 司 在 開 發 社 保 系 統 中 就 采 用Developer/ 在 遼 寧 省 的 應 用 中 取 得 良 好 效 果 下 面 就 本 人 在Developer/ 開 發 社 保 系 統 中 所 遇 問 題 與 各 位 進 行 交 流
   Developer/ FROMS 中 的 代 換
  
   在 早 期FOXPRO 數 據 庫 編 程 中 經 常 用 到 宏 代 換 功 能 但 在FORMS 中 卻 沒 有 此 功 能&* 等 在 編 程 中 經 常 用 到 的 在FORMS 中 只 得 一 行 一 行 代 碼 的 寫 但 後 來 發 現FORMS 中 也 有 類 似 功 能 用NAME_IN()COPY() 可 以 實 現 類 似 的 功 能Name_in() 用 於 取 出 參 數 名 代 表 的 對 象 了 數 值 而COPY() 把 一 個 參 數 值 傳 遞 給 另 一 參 數 值 表 示 的 對 象 的 如 下 例
  
  FORM 結 構
  塊B
  項 LLLLLL
  在 作 錄 入 程 序 時 要 對LL 項 清 零
  DELCATE
  strItemName varchar();
  BEGIN
  for I in loop
  strItemName:=:bl||to_char(i);
  copy(nullstrItemNmae);
  end loop;
  END;
   對 於NAME_IN 的 應 用 可 能 更 多 一 些 筆 者 在 做 社 保 軟 件 時 作 保 險 繳 費 錄 入 時 曾 用 它 少 寫 了 許 多 代 碼 當 然 代 碼 的 減 少 就 義 意 味 維 護 工 作 量 的 減 少
  
  
  
  FORM結構
  養老
  塊YLYJ(養老應繳)
  項DWJTC(單位繳統籌)DWJZH(單位繳帳戶)GRJF(個人繳費)
  塊YLSJ (養老實繳)
  項DWJTC(單位繳統籌)DWJZH(單位繳帳戶)GRJF(個人繳費)
  工傷
  塊GSYJ(工傷應繳)
  項DWJTC(單位繳統籌)DWJZH(單位繳帳戶)GRJF(個人繳費)
  塊GSSJ (工傷實繳)
  項DWJTC(單位繳統籌)DWJZH(單位繳帳戶)GRJF(個人繳費)
  醫療
  塊YILYJ(醫療應繳)
  項DWJTC(單位繳統籌)DWJZH(單位繳帳戶)GRJF(個人繳費)
  塊YILSJ (醫療實繳)
  項DWJTC(單位繳統籌)DWJZH(單位繳帳戶)GRJF(個人繳費)
   三 個 塊 的 結 構 相 同 只 是 塊 名 稱 不 同 繳 費 時 時 行 的 操 作 也 一 樣 實 繳 名 項 不 能 大 於 應 繳 不 用NAME_IN 時 只 能 寫 三 段 程 序 但 用 了NAME_IN 後 只 用 一 段 寫 一 個 函 數 就 能 達 到 目 的 如 下
  
  FUNCTION FUN_JF (PRE_BLOCK_NAME
  IN VARCHAR) RETURN BOOLEAN IS
  BEGIN
  if name_in(pre_block_name||sjdwjtc)
  >name_in(pre_block_name||yjdwjtc) or
  name_in(pre_block_name||sjdwjzh)
  >name_in(pre_block_name||yjdwjzh) or
  name_in(pre_block_name||sjgrjf)
  >name_in(pre_block_name||yjgrjf) then
  message( 實 繳 大 於 應 繳);
  return false;
  end if;
  return true;
  END;
   從 上 面 的 兩 個 例 子 來 看NAME_IN 和COPY 的 應 用 能 起 到 其 它 編 程 語 言 的 代 換 功 能 代 碼 的 優 化 方 面 確 實 能 起 不 少 的 作 用 減 少 了 程 序 源 代 碼 的 維 護 工 作
  
   用FORMS 實 現ORACLE 數 據 庫 與 其 它 數 據 源 數 據 的 交 換
  
   Developer/ 不 能 實 現 同 時 多 數 據 源 的 同 時 連 接 在 多 系 統 和 異 種 數 據 源 的 操 作 中 功 能 確 實 大 打 折 扣 雖 然 可 以 用GL 加ODBC 作 一DLL 應 用 能 實 現 但 一 般 的 應 用 中 又 有 點 沒 用 必 要 作 的 那 麼 復 雜 實 際 上Developer/ 內 嵌 包TEXT_IO 為 我 們 提 供 了 一 個 更 簡 單 的 方 法 幾 乎 所 有 的 數 據 庫 或 數 據 庫 前 端 開 發 工 具 都 提 供 文 本 文 件 的 操 作 這 樣 我 們 完 全 可 以 用 文 本 文 件 作 為 數 據 交 換 的 通 用 格 式 下 例 是 在 保 險 業 中 的 一 應 用( 要 用 到dkwfiledll 應 用)
  
  DECLARE
  filename varchar():=null;
  filenum text_iofile_type;
  linebuf varchar();
  r_temp temp%rowtype;
  BEGIN
  filename:=dk_file_dialogshow
  (請選擇繳費工資台帳原文件c:\源文件(*txt)|*txt|);
  if filename is null then
  raise form_trigger_failure; end if;
  filenum:=text_iofopen(filenamer);
  loop
  BEGIN
  text_ioget_line(filenumlinebuf);
  TEXT_IOPUT(linebuf);TEXT_IONEW_LINE;
  exception when no_data_found then
  exit;
  END;
  BEGIN
  v_templ=substr(linebuf);
  v_templ:= to_number(substr(linebuf));
  insert into temp(ll) values (v_templv_templ);
  exception when others then
  END;
  < < end_loop > >
  null;
  end loop;
  END;
   FORMS 實 現 的 列 表 查 詢 多 行 錄 入 中 的 實 現 行 累 計
  
   在PB 和VB 中 都 用 類 似 的 求 和 或 者 說 累 計 列 但 在 早 期 的FORMS 中 沒 有 此 功 能 對 於 多 條 記 錄 的 錄 入 中 需 要 進 行 求 和 時 很 不 方 便 其 實 利 用FORM 的 觸 發 子 很 容 易 實 現 如 下 例
  
  塊bllll
  塊bllll
  塊b是B的求和塊
  在塊B中的PRE_TEXT_ITEM中代碼
  IF SUBSTR(:SYSTEMCURRENT_ITEM) IN (L) THEN
  :GLOBALITEM_PREVALUES:=NAME_IN
  (B||:SYSTEMCURRENT_ITEM);
  END IF;
  在塊 B中的POST_TEXT_ITEM中代碼
  DECLARE
  num_cz number; 數據項在錄入或修改前後的差值
  num_hz number; 數據項在修改後的求合
  BEGIN
  if substr(:systemcurrent_item) in (l) then
  :em_nextvalues:=name_in
  (b||:systemcurrent_item);
  num_cz:=nvl(to_number(:em_nextvalues))
  nvl(to_number(:em_prevalues));
  新的和值
  num_hz:=nvl(to_number(name_in(b_sum
  ||:systemcurrent_item)))+num_cz;
  copy(to_char(num_hz)b||:systemcurrent_item);
  end if;
  END;
   通 過 前 後 兩 值 的 比 較 很 容 易 的 實 現 一 個 較 通 用 的 求 和 算 法 另 外 又 一 次 用 到NAME_IN 和 COPY 減 少 了 代 碼 量 在 塊 上 實 現 觸 發 子 也 減 少 了 代 碼 維 護 工 作 量
  
   REPORT 中 實 現 的 動 態 報 表( 一 張 表 利 用 多 個QUERY 語 句 生 成 一 樣 格 式 的 多 張 報 表
  
   在 做 報 表 時 經 常 要 遇 到 類 似 的 報 表 有 多 張 的 情 況 雖 然 通 過 簡 單 的 拷 貝 可 以 減 少 編 程 的 工 作 量 但 在 後 期 的 維 護 中 卻 增 加 了 難 度 一 張 表 改 完 後 又 改 另 一 張 表 進 行 大 量 的 重 復 勞 動 不 是 每 個 程 序 員 想 做 的 工 作 其 實 在REPORT 中 有 一 很 好 的 功 能 可 能 完 成 這 樣 的 工 作 就 是REPORT 的 代 換 如 下 例
  
  兩個表tab_temp (a numberb numberc number)
  tab_temp (d numbere numberf number)
   作 兩 張 報 表 表 頭 一 樣 但 查 詢 不 一 樣 分 別 取 自 兩 個 表
  
  建 一 用 戶 參 數(user parameters) p_ 類 型 CHAR 長 度 缺 省 值 是 SELECT ABC FROM TAB_TEMP
  
  建 一 查 詢(QUERIES) 在 查 詢 語 句 中 輸 入&P_
  
  生 成 布 局 可 按 要 求 畫 出 報 表
   因 在 查 定 義 中 用 的 是&p_ 定 義 所 以 可 以 在 運 行 時 動 態 的 給P_ 傳 遞 能 數 只 要 能 滿 足 其 列 名 定 義 即 可 例 可 用 如 下 語 句 代 入P_
  
  SELECT D AE BF C FROM TAB_TEMP
   這 樣 就 生 成 了 一 個 多 功 能 報 表 把 編 寫REPROT 工 作 從 簡 單 的 布 局 編 輯 中 解 脫 出 來 而 投 入 到 實 質 性 的 工 作SQL 語 句 的 生 成 上 去
  
  
  
  
  
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/18657.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.