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

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

ORACLE數(shù)據(jù)庫開發(fā)經(jīng)驗

2024-08-29 13:39:40
字體:
供稿:網(wǎng)友

  Oracle數(shù)據(jù)庫作為大型數(shù)據(jù)庫治理系統(tǒng),近年來一直占有世界上高端數(shù)據(jù)庫的最大份額,其強大而完善的數(shù)據(jù)庫治理功能,以及ORACLE公司推陳出新的不斷努力,一直成為IT業(yè)界矚目的焦點。 嶺澳核電站的數(shù)據(jù)庫平臺采用了ORACLE7.3作為后端平臺,前端選擇了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作為開發(fā)工具,采用了目前流行的CLIENT/SERVER模式。本人在ORACLE系統(tǒng)的開發(fā)中,就ORACLE的整套開發(fā)工具提出一些自己的體會,供同行參考。
  
  ---- 一. ORACLE SQL PLUS 使用技巧:
  
  ---- ①查找重復記錄:
  
  SELECT DRAWING,DSNO FROM EM5_PipE_PREFAB
  WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
  _PIPE_PREFAB D
  WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
  EM5_PIPE_PREFAB.DSNO=D.DSNO);
  ---- 執(zhí)行上述SQL語句后就可以顯示所有DRAWING和DSNO相同且重復的記錄。
  ---- 刪除重復記錄:
  
  DELETE FROM EM5_PIPE_PREFAB
  WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
  _PIPE_PREFAB D
  WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
  EM5_PIPE_PREFAB.DSNO=D.DSNO);
  ---- 執(zhí)行上述SQL語句后就可以刪除所有DRAWING和DSNO相同且重復的記錄。
  ---- ② 快速編譯所有視圖
  
  ---- 當在把數(shù)據(jù)庫倒入到新的服務器上后(數(shù)據(jù)庫重建),需要將視圖重新編譯一遍,因為該表空間視圖到其它表空間的表的連接會出現(xiàn)問題,可以利用PL/SQL的語言特性,快速編譯。
  
  SQL >SPOOL ON.SQL
  SQL >SELECT ‘ALTER VIEW ‘TNAME’
  COMPILE;’ FROM TAB;
  SQL >SPOOL OFF
  然后執(zhí)行ON.SQL即可。
  SQL >@ON.SQL
  當然,授權和創(chuàng)建同義詞也可以快速進行,如:
  SQL >SELECT ‘GRANT SELECT ON ’
  TNAME’ TO USERNAME;’ FROM TAB;
  SQL >SELECT ‘CREATE SYNONYM
  ‘TNAME’ FOR USERNAME.’TNAME’;’ FROM TAB;
  
  ③ 用外聯(lián)接提高表連接的查詢速度
  在作表連接(常用于視圖)時,常使用以下方法來查詢數(shù)據(jù):
  SELECT PAY_NO, PROJECT_NAME
  FROM A
  WHERE A.PAY_NO NOT IN (SELECT PAY_
  NO FROM B WHERE VALUE >=120000);
  ---- 但是若表A有10000條記錄,表B有10000條記錄,則要用掉30分鐘才能查完,主要因為NOT IN要進行一條一條的比較,共需要10000*10000次比較后,才能得到結果。該用外聯(lián)接后,可以縮短到1分左右的時間:
  SELECT PAY_NO,PROJECT_NAME
  FROM A,B
  WHERE A.PAY_NO=B.PAY_NO(+)
  AND B.PAY_NO IS NULL
  AND B.VALUE >=12000;
  ---- ④ 怎樣讀寫文本型操作系統(tǒng)文件
  ---- 在PL/SQL 3.3以上的版本中,UTL_FILE包答應用戶通過PL/SQL讀寫操作系統(tǒng)文件。如下:
  
  DECALRE
  FILE_HANDLE UTL_FILE.FILE_TYPE;
  BEGIN
  FILE_HANDLE:=UTL_FILE.FOPEN(
  ‘C:/’,’TEST.TXT’,’A’);
  UTL_FILE.PUT_LINE(FILE_HANDLE,’
  HELLO,IT’S A TEST TXT FILE’);
  UTL_FILE.FCLOSE(FILE_HANDLE);
  END;
  ---- 相關UTL_FILE數(shù)據(jù)庫包具體信息可以參見相關資料。
  
  ⑤ 怎樣在數(shù)據(jù)庫觸發(fā)器中使用列的新值與舊值
  
  ---- 在數(shù)據(jù)庫觸發(fā)器中幾乎總是要使用觸發(fā)器基表的列值,假如某條語句需要某列修改前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。
  
  ---- 二.ORACLE DEVELOPER 2000使用技巧:
  
  ---- ① 改變FORM(FMX模塊)運行時的Runform4.5的題頭:
  
  ---- DEVELOPER2000中FMX默認題頭為:Developer/2000 Forms Runtime for Windows 95 / NT 你可以改為自己定義的標題,
  
  ---- 1. 在Form級觸發(fā)器中添加觸發(fā)WHEN-NEW-FORM-INSTANCE
  
  ---- 2. 在此觸發(fā)器中寫如下代碼:
  
  set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT
  SYSTEM 歡迎使用');
  ---- ② 如何隱藏菜單中的window選項:
  ---- 在創(chuàng)建自己的菜單時,最后選項總有window項,下面介紹如何去掉它,
  
  ---- 1. 創(chuàng)建一個Menu
  
  ---- 2. 在Menu中建立一個Item,命名為WINDOW。

  
  ---- 3. 設置該Item屬性如下:
  
  ----
  
  Menu Item Type:Magic
  Command Type:Null
  Magic Item:Window
  Lable:為空
  
  ---- ③ 怎樣創(chuàng)建動態(tài)下拉列表List
  ---- Developer 2000 中的列表是通過設置相關屬性而完成數(shù)據(jù)項的列表設置的,但那只是靜態(tài)的,有時你想讓某項成為動態(tài)的列表,隨輸入數(shù)據(jù)的改變而改變,就需要動手去編個小程序。下面具體介紹怎樣去做:
  
  ---- 有塊EBOP_CABLE_ACCOUNT,下有SPECIFICATION數(shù)據(jù)項,當一進入該模塊時,就將SPECIFICATION項在數(shù)據(jù)庫中存儲的值動態(tài)顯示出來,先在Form4.5中建立一個PRCEDURE,命名為DYN_LIST:
  
  PROCEDURE DYN_LIST IS
  CURSOR C1 IS
  SELECT DISTINCT(SPECIFICATION)
  FROM EBOP_CABLE_ACCOUNT;
  CNT NUMBER;
  i NUMBER;
  TNAME EBOP_CABLE_
  ACCOUNT.SPECIFICATION%TYPE;
  BEGIN
  CLEAR_LIST('EBOP_CABLE_
  ACCOUNT.SPECIFICATION');
  SELECT COUNT(DISTINCT
  (SPECIFICATION)) INTO CNT FROM EBOP
  _CABLE_ACCOUNT;
  open C1;
  FOR i IN 1..CNT LOOP
  FETCH C1 INTO TNAME;
  EXIT WHEN C1%NOTFOUND
  OR C1%NOTFOUND IS NULL;
  ADD_LIST_ELEMENT
  ('EBOP_CABLE_ACCOUNT
  .SPECIFICATION',i,TNAME,TNAME);
  END LOOP;
  DELETE_LIST_ELEMENT
  ('EBOP_CABLE_ACCOUNT.SPECIFICATION',CNT+1);
  CLOSE C1;
  END;
  然后在FORM的WHEN-NEW
  -FORM-INSTANCE觸發(fā)子中加入一行:
  DYN_LIST;
  ---- 這樣一進入該FMX,就會動態(tài)刷新該列表。除此之外,SPECIFICATION數(shù)據(jù)項改為列表項。
  ---- ④ 當顯示多條記錄且數(shù)據(jù)項非凡多時,如何組織錄入及顯示界面:
  
  ---- 如上圖所示,PRN代碼及設備代碼在畫布1(CONTENT型)上,其它數(shù)據(jù)項在畫布2(STACK型)上,所有數(shù)據(jù)項為一個表的列或一個塊的數(shù)據(jù)項。在拉動水平滾動條時或用TAB或敲回車鍵時,將看到全部數(shù)據(jù)項。這種排布方法適用于數(shù)據(jù)項非凡多又想顯示多條記錄時用。主要制作順序為:先建立兩個畫布,畫布1(CONTENT型),畫布2(STACK型),然后建立塊,選畫布時用畫布1,這樣所有項都顯示在畫布1上,然后選中除PRN代碼及設備代碼之外的所有數(shù)據(jù)項,選TOOLS菜單下的PROPERTIES選項,將這些數(shù)據(jù)項的CANVAS屬性選為畫布2(STACK型),然后調(diào)整整體位置就可以了。
  
  ---- ⑤ 如何在FORM的受限觸發(fā)子中提交保存數(shù)據(jù)
  
  ---- 在FORM中很多觸發(fā)子是不能用COMMIT WORK語句的,當你在該觸發(fā)子中使用了UPDATE,DELETE等操作并想立即存盤時,就需要COMMIT WORK語句了。首先在服務器端建立DB_SQL_COMMIT這個過程(采用ORACLE7.3數(shù)據(jù)庫),
  
  PROCEDURE DB_SQL_COMMIT IS
  source_cursor integer;
  ignore integer;
  V7 NUMBER :=2;
  BEGIN
  source_cursor:=dbms_sql.open_cursor;
  dbms_sql.parse(source_cursor,'COMMIT WORK',V7);
  ignore:=dbms_sql.execute(source_cursor);
  DBMS_SQL.CLOSE_CURSOR(source_cursor);
  END;
  ---- 然后在FORM中該觸發(fā)子中調(diào)用過程DB_SQL_COMMIT;就可以了,當然你可以根據(jù)自己需要將該過程加入?yún)?shù),這樣通過參數(shù)可以得到執(zhí)行DML語句的權限。
  
  ⑥ 如何在FORM中實現(xiàn)某數(shù)據(jù)項自動按記錄序號加一操作
  
  ---- 設塊名為VO,要操作的數(shù)據(jù)項為VO_ID,在該塊中建立塊級觸發(fā)子WHEN-CREATE- RECORD,加入如下代碼:
  
  :VO_ID:=:System.Trigger_Record;
  ---- 這樣每當生成新記錄時VO_ID就會自動加一了。
  ---- ⑦ 如何在一個FORM中調(diào)用另一個FORM,或在一個塊中調(diào)用另一個塊時顯示特定的記錄有時用戶會要求在調(diào)用另一個FORM時,只顯示相關的記錄,舉例如下,在一個FORM的塊中有一個按鈕,在按鈕觸發(fā)子中加入如下代碼:
  
  DECLARE
  PM
  PARAMLIST;
  BEGIN
  PM:=GET_PARAMETER_LIST('PM');
  IF NOT ID_NULL(PM) THEN
  DESTROY_PARAMETER_LIST('PM');
  END IF;
  PM:=CREATE_PARAMETER_LIST('PM');
  ......................
  ADD_PARAMETER(PM,'THE_WHERE',
  TEXT_PARAMETER,'EM_NAME=''EM4''
  AND EM_PROJECT_NAME=''支架預制''');
  OPEN_FORM('PAYMENT',ACTIVATE,session,PM);
  END;
  ---- 其中EM_NAME,EM_PROJECT_NAME為本FORM某塊的數(shù)據(jù)項,PAYMENT為要調(diào)用的FORM模塊。
這樣通過傳遞參數(shù)列表就可以得到想要的結果。在FORM PAYMENT.FMB中,建立一參數(shù)THE_WHERE,CHAR型,長1000,然后在PAYMENT.FMB中建立FORM級觸發(fā)子WHEN-NEW-FORM-INSTANCE,在該觸發(fā)子中加入以下語句:
  IF :PARAMETER.THE_WHERE IS NOT NULL THEN
  SET_BLOCK_PROPERTY('PAYMENT',
  DEFAULT_WHERE,:PARAMETER.THE_WHERE);
  END IF;
  ---- 其中PAYMENT為要顯示的塊,這樣通過參數(shù)傳遞就得到想要的某些特定條件的數(shù)據(jù)了。
  ---- ⑧ 在

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 柏乡县| 尤溪县| 敖汉旗| 昭平县| 天峻县| 电白县| 嘉善县| 天气| 武山县| 辛集市| 广昌县| 襄樊市| 新平| 淮南市| 泸州市| 和平区| 祁连县| 花垣县| 延吉市| 潮州市| 库伦旗| 郴州市| 闻喜县| 九寨沟县| 钟祥市| 皋兰县| 平度市| 资溪县| 镇巴县| 开原市| 迁西县| 开封县| 陵川县| 凌海市| 托克托县| 黄龙县| 正安县| 肥西县| 关岭| 大方县| 明星|