<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    konhon

    忘掉過去,展望未來。找回自我,超越自我。
    逃避不一定躲的過, 面對不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因為某個理由而傷心難過, 但我卻能找個理由讓自己快樂.

    Google

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks
    ---- 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 使用技巧:

    ---- ①查找重復(fù)記錄:

    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相同且重復(fù)的記錄。
    ---- 刪除重復(fù)記錄:

    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相同且重復(fù)的記錄。
    ---- ② 快速編譯所有視圖

    ---- 當(dāng)在把數(shù)據(jù)庫倒入到新的服務(wù)器上后(數(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
    當(dāng)然,授權(quán)和創(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次比較后,才能得到結(jié)果。該用外聯(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;
    ---- 相關(guān)UTL_FILE數(shù)據(jù)庫包詳細信息可以參見相關(guān)資料。

    ---- ⑤ 怎樣在數(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. 設(shè)置該Item屬性如下:

    ----

    Menu Item Type:Magic
    Command Type:Null
    Magic Item:Window
    Lable:為空

    ---- ③ 怎樣創(chuàng)建動態(tài)下拉列表List
    ---- Developer 2000 中的列表是通過設(shè)置相關(guān)屬性而完成數(shù)據(jù)項的列表設(shè)置的,但那只是靜態(tài)的,有時你想讓某項成為動態(tài)的列表,隨輸入數(shù)據(jù)的改變而改變,就需要動手去編個小程序。下面詳細介紹怎樣去做:

    ---- 有塊EBOP_CABLE_ACCOUNT,下有SPECIFICATION數(shù)據(jù)項,當(dāng)一進入該模塊時,就將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ù)項改為列表項。
    ---- ④ 當(dāng)顯示多條記錄且數(shù)據(jù)項特別多時,如何組織錄入及顯示界面:

    ---- 如上圖所示,PRN代碼及設(shè)備代碼在畫布1(CONTENT型)上,其它數(shù)據(jù)項在畫布2(STACK型)上,所有數(shù)據(jù)項為一個表的列或一個塊的數(shù)據(jù)項。在拉動水平滾動條時或用TAB或敲回車鍵時,將看到全部數(shù)據(jù)項。這種排布方法適用于數(shù)據(jù)項特別多又想顯示多條記錄時用。主要制作順序為:先建立兩個畫布,畫布1(CONTENT型),畫布2(STACK型),然后建立塊,選畫布時用畫布1,這樣所有項都顯示在畫布1上,然后選中除PRN代碼及設(shè)備代碼之外的所有數(shù)據(jù)項,選TOOLS菜單下的PROPERTIES選項,將這些數(shù)據(jù)項的CANVAS屬性選為畫布2(STACK型),然后調(diào)整整體位置就可以了。

    ---- ⑤ 如何在FORM的受限觸發(fā)子中提交保存數(shù)據(jù)

    ---- 在FORM中很多觸發(fā)子是不能用COMMIT WORK語句的,當(dāng)你在該觸發(fā)子中使用了UPDATE,DELETE等操作并想立即存盤時,就需要COMMIT WORK語句了。首先在服務(wù)器端建立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;就可以了,當(dāng)然你可以根據(jù)自己需要將該過程加入?yún)?shù),這樣通過參數(shù)可以得到執(zhí)行DML語句的權(quán)限。

    - ⑥ 如何在FORM中實現(xiàn)某數(shù)據(jù)項自動按記錄序號加一操作

    ---- 設(shè)塊名為VO,要操作的數(shù)據(jù)項為VO_ID,在該塊中建立塊級觸發(fā)子WHEN-CREATE- RECORD,加入如下代碼:

    :VO_ID:=:System.Trigger_Record;
    ---- 這樣每當(dāng)生成新記錄時VO_ID就會自動加一了。
    ---- ⑦ 如何在一個FORM中調(diào)用另一個FORM,或在一個塊中調(diào)用另一個塊時顯示特定的記錄有時用戶會要求在調(diào)用另一個FORM時,只顯示相關(guān)的記錄,舉例如下,在一個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=''支架預(yù)制''');
    OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);
    END;
    ---- 其中EM_NAME,EM_PROJECT_NAME為本FORM某塊的數(shù)據(jù)項,PAYMENT為要調(diào)用的FORM模塊。這樣通過傳遞參數(shù)列表就可以得到想要的結(jié)果。在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ù)了。
    ---- ⑧ 在FORM中當(dāng)有主從塊時,連續(xù)輸入記錄如何避免被不斷的提示保存:

    ---- 每輸入一條主記錄和若干條該主記錄的從記錄后,此時再導(dǎo)航到主塊輸下一條記錄,F(xiàn)ORM就會提示你是否要保存記錄,而你并不希望FORM提示,讓它自動保存,此時你可以到Program Units中找到過程PROCEDURE Clear_All_Master_Details,然后在這個過程中找到語句

    Clear_Block(ASK_COMMIT);
    ---- 將其改為Clear_Block(DO_COMMIT);就可以了。
    ---- ⑨ 在Report開始時選擇排序項:

    ---- 在報表開始的Parameter Form中選擇報表按哪個數(shù)據(jù)項排序,

    ---- 1. 先在USER PARAMETER 中創(chuàng)建SORT參數(shù),為字符型,長20。

    ---- 2. 初始值選’責(zé)任方’,然后將這四個值輸入到DATA SELECTION中,形成列表。

    ---- 3. 然后處理QUERY中的SQL語句:

    select CHARGER,FCO_NO,EM_NAME,FCO
    _NO,DESCRIPTION, FCR_POINT
    from FCR_MAIN
    ORDER BY DECODE(:SORT,'責(zé)任方',CHARGER,'FCO號',
    FCO_NO,'FCR號',FCR_NO,'FCR號',EM_NAME)

    ---- ⑩ 在Developer 2000中如何讀寫操作系統(tǒng)文件
    ---- 在用Developer 2000的開發(fā)工具開發(fā)應(yīng)用程序時,經(jīng)常碰到需要讀寫外部文件的問題,可以用ORACLE 帶的包TEXT_IO來完成這項需求。例如:

    DECLARE
    IN_FILE TEXT_IO.FILE_TYPE;
    OUT_FILE TEXT_IO.FILE_TYPE;
    LINE_BUFER VARCHAR2(80);
    /*若不用IN_FILE,可以將各字段聯(lián)接在一起賦值給此變量*/
    BEGIN
    IN_FILE:=TEXT_IO.FOPEN
    (‘C:\TEMP\TEST1.TXT’,’r’);
    OUT_FILE:=TEXT_IO.FOPEN
    (‘C:\TEMP\TEST2.TXT’,’w+’);
    LOOP
    TEXT_IO.GET_LINE(IN_FILE,LINE_BUFER);
    TEXT_IO.PUT(LINE_BUFER);
    TEXT_IO.NEW_LINE;
    TEXT_IO.PUT_LINE(OUT_FILE,LINE_BUFER);
    END LOOP;
    EXCEPTION
    WHEN no_data_found THEN
    TEXT_IO.PUT_LINE(‘CLOSING THE FILE ,PLEASE WAITING....’);
    TEXT_IO.FCLOSE(IN_FILE);
    TEXT_IO.FCLOSE(OUT_FILE);
    END;
    ---- 三.數(shù)據(jù)庫管理

    ---- ① 在刪除一個表中的全部數(shù)據(jù)時,須使用TRUNCATE TABLE 表名;因為用DROP TABLE,DELETE * FROM 表名時,TABLESPACE表空間該表的占用空間并未釋放,反復(fù)幾次DROP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。

    ---- ② 數(shù)據(jù)庫文件的移動方法

    ---- 當(dāng)想將數(shù)據(jù)庫文件移動到另外一個目錄下時,可以用ALTER DATABASE命令來移動(比ALTER TABLESPACE適用性強):

    ---- 1. 使用SERVER MANAGER關(guān)閉實例.

    SVRMGR > connect internal;
    SVRMGR > shutdown;
    SVRMGR >exit;
    ---- 2. 使用操作系統(tǒng)命令來移動數(shù)據(jù)庫文件位置(假設(shè)這里操作系統(tǒng)為SOLARIS 2.6). 在UNIX中用 mv命令可以把文件移動到新的位置,

    #mv /ora13/orarun/document.dbf /ora12/orarun
    ---- 3. 裝載數(shù)據(jù)庫并用alter database命令來改變數(shù)據(jù)庫中的文件名.
    SVRMGR > connect internal;
    SVRMGR > startup mount RUN73;
    SVRMGR > alter database rename file
    > ‘/ ora13/orarun/document.dbf’
    > ‘/ ora12/orarun/document.dbf’;
    ---- 4. 啟動實例.

    SVRMGR > alter database open;

    posted on 2005-10-17 05:58 konhon 優(yōu)華 閱讀(325) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 亚洲精品乱码久久久久久蜜桃图片 | 曰皮全部过程视频免费国产30分钟| 国产亚洲精品欧洲在线观看| 成年网站免费视频A在线双飞| 亚洲白色白色在线播放| 特级毛片免费观看视频| 2020因为爱你带字幕免费观看全集 | 亚洲精品乱码久久久久久久久久久久| 亚州**色毛片免费观看| 国内精品99亚洲免费高清| 99re6在线视频精品免费| 亚洲gv猛男gv无码男同短文| 99xxoo视频在线永久免费观看| 亚洲精品白色在线发布| 国产电影午夜成年免费视频 | 好爽…又高潮了毛片免费看| 色久悠悠婷婷综合在线亚洲| 精品无码一级毛片免费视频观看| 亚洲国产另类久久久精品黑人 | 青青在线久青草免费观看| 亚洲一本一道一区二区三区| 青青青国产手机频在线免费观看 | 99re在线视频免费观看| 亚洲AV色吊丝无码| 全部免费毛片在线| 国产成人无码区免费内射一片色欲| 亚洲一二成人精品区| 毛片免费全部免费观看| 亚洲一区二区三区高清| 久久久久国色AV免费看图片| 亚洲欧洲自拍拍偷午夜色| 四虎影院在线免费播放| 国产免费久久精品丫丫| 亚洲伊人色一综合网| 在线a免费观看最新网站| 亚洲乱码国产乱码精华| 日本视频一区在线观看免费| 亚洲日韩精品无码专区加勒比☆| 国产91精品一区二区麻豆亚洲| 亚洲另类无码专区首页| 亚洲色婷婷一区二区三区|