ORACLE數據庫開發(fā)經驗總結
ORACLE數據庫開發(fā)經驗總結
----ORACLE數據庫作為大型數據庫管理系統,近年來一直占有世界上高端數據庫的最大份額,其強大而完善的數據庫管理功能,以及ORACLE公司推陳出新的不斷努力,一直成為IT業(yè)界矚目的焦點。嶺澳核電站的數據庫平臺采用了ORACLE7.3作為后端平臺,前端選擇了ORACLE公司的DEVELOPER201*及DESIGNER201*作為開發(fā)工具,采用了目前流行的
CLIENT/SERVER模式。本人在ORACLE系統的開發(fā)中,就ORACLE的整套開發(fā)工具提出一些自
己的體會,供同行參考。
----一.ORACLESQLPLUS使用技巧:----①查找重復記錄:
SELECTDRAWING,DSNOFROMEM5_PIPE_PREFABWHEREROWID!=(SELECTMAX(ROWID)FROMEM5_PIPE_PREFABD
WHEREEM5_PIPE_PREFAB.DRAWING=D.DRAWINGANDEM5_PIPE_PREFAB.DSNO=D.DSNO);
----執(zhí)行上述SQL語句后就可以顯示所有DRAWING和DSNO相同且重復的記錄。----刪除重復記錄:
DELETEFROMEM5_PIPE_PREFAB
WHEREROWID!=(SELECTMAX(ROWID)FROMEM5_PIPE_PREFABD
WHEREEM5_PIPE_PREFAB.DRAWING=D.DRAWINGANDEM5_PIPE_PREFAB.DSNO=D.DSNO);
----執(zhí)行上述SQL語句后就可以除所有DRAWING和DSNO相同且重復的記錄。----②快速編譯所有視圖
----當在把數據庫倒入到新的服務器上后(數據庫重建),需要將視圖重新編譯一遍,因為該表空間視圖到其它表空間的表的連接會出現問題,可以利用PL/SQL的語言特性,快速編譯。
SQL>SPOOLON.SQL
SQL>SELECT‘ALTERVIEW‘||TNAME||’COMPILE;’FROMTAB;SQL>SPOOLOFF然后執(zhí)行ON.SQL即可。SQL>@ON.SQL
當然,授權和創(chuàng)建同義詞也可以快速進行,如:SQL>SELECT‘GRANTSELECTON’||TNAME||’TOUSERNAME;’FROMTAB;SQL>SELECT‘CREATESYNONYM
‘||TNAME||’FORUSERNAME.’||TNAME||’;’FROMTAB;③用外聯接提高表連接的查詢速度
在作表連接(常用于視圖)時,常使用以下方法來查詢數據:SELECTPAY_NO,PROJECT_NAMEFROMA
WHEREA.PAY_NONOTIN(SELECTPAY_NOFROMBWHEREVALUE>=1201*0);
----但是若表A有10000條記錄,表B有10000條記錄,則要用掉30分鐘才能查完,主要因為NOTIN要進行一條一條的比較,共需要10000*10000次比較后,才能得到結果。該用外
聯接后,可以縮短到1分左右的時間:SELECTPAY_NO,PROJECT_NAMEFROMA,B
WHEREA.PAY_NO=B.PAY_NO(+)ANDB.PAY_NOISNULLANDB.VALUE>=1201*;
----④怎樣讀寫文本型操作系統文件
----在PL/SQL3.3以上的版本中,UTL_FILE包允許用戶通過PL/SQL讀寫操作系統文件。如下:DECALRE
FILE_HANDLEUTL_FILE.FILE_TYPE;BEGIN
FILE_HANDLE:=UTL_FILE.FOPEN(‘C:\\’,’TEST.TXT’,’A’);
UTL_FILE.PUT_LINE(FILE_HANDLE,’HELLO,IT’SATESTTXTFILE’);UTL_FILE.FCLOSE(FILE_HANDLE);END;
----相關UTL_FILE數據庫包詳細信息可以參見相關資料。----⑤怎樣在數據庫觸發(fā)器中使用列的新值與舊值
----在數據庫觸發(fā)器中幾乎總是要使用觸發(fā)器基表的列值,如果某條語句需要某列修改前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。
----二.ORACLEDEVELOPER201*使用技巧:
----①改變FORM(FMX模塊)運行時的Runform4.5的題頭:
----DEVELOPER201*中FMX默認題頭為:Developer/201*FormsRuntimeforWindows
95/NT你可以改為自己定義的標題,
----1.在Form級觸發(fā)器中添加觸發(fā)WHEN-NEW-FORM-INSTANCE----2.在此觸發(fā)器中寫如下代碼:
set_window_property(FORMS_MDI_WINDOW,TITLE,"POINTSYSTEM歡迎使用");
----②如何隱藏菜單中的window選項:
----在創(chuàng)建自己的菜單時,最后選項總有window項,下面介紹如何去掉它,----1.創(chuàng)建一個Menu
----2.在Menu中建立一個Item,命名為WINDOW。----3.設置該Item屬性如下:----
MenuItemType:MagicCommandType:NullMagicItem:WindowLable:為空
----③怎樣創(chuàng)建動態(tài)下拉列表List
----Developer201*中的列表是通過設置相關屬性而完成數據項的列表設置的,但那
只是靜態(tài)的,有時你想讓某項成為動態(tài)的列表,隨輸入數據的改變而改變,就需要動手去編個小程序。下面詳細介紹怎樣去做:
----有塊EBOP_CABLE_ACCOUNT,下有SPECIFICATION數據項,當一進入該模塊時,就將
SPECIFICATION項在數據庫中存儲的值動態(tài)顯示出來,先在Form4.5中建立一個PRCEDURE
,命名為DYN_LIST:
PROCEDUREDYN_LISTISCURSORC1IS
SELECTDISTINCT(SPECIFICATION)FROMEBOP_CABLE_ACCOUNT;CNTNUMBER;iNUMBER;TNAMEEBOP_CABLE_
ACCOUNT.SPECIFICATION%TYPE;BEGIN
CLEAR_LIST("EBOP_CABLE_ACCOUNT.SPECIFICATION");SELECTCOUNT(DISTINCT
(SPECIFICATION))INTOCNTFROMEBOP_CABLE_ACCOUNT;openC1;
FORiIN1..CNTLOOP
FETCHC1INTOTNAME;EXITWHENC1%NOTFOUNDORC1%NOTFOUNDISNULL;
ADD_LIST_ELEMENT("EBOP_CABLE_ACCOUNT
.SPECIFICATION",i,TNAME,TNAME);ENDLOOP;
DELETE_LIST_ELEMENT
("EBOP_CABLE_ACCOUNT.SPECIFICATION",CNT+1);CLOSEC1;END;
然后在FORM的WHEN-NEW
-FORM-INSTANCE觸發(fā)子中加入一行:DYN_LIST;
----這樣一進入該FMX,就會動態(tài)刷新該列表。除此之外,SPECIFICATION數據項改為列表項。
----④當顯示多條記錄且數據項特別多時,如何組織錄入及顯示界面:----如上圖所示,PRN代碼及設備代碼在畫布1(CONTENT型)上,其它數據項在畫布2(STACK型)上,所有數據項為一個表的列或一個塊的數據項。在拉動水平滾動條時或用TAB或敲回車鍵時,將看到全部數據項。這種排布方法適用于數據項特別多又想顯示多條記錄時用。主要制作順序為:先建立兩個畫布,畫布1(CONTENT型),畫布2(STACK型),然后
建立塊,選畫布時用畫布1,這樣所有項都顯示在畫布1上,然后選中除PRN代碼及設備代碼之外的所有數據項,選TOOLS菜單下的PROPERTIES選項,將這些數據項的CANVAS屬性選
為畫布2(STACK型),然后調整整體位置就可以了。----⑤如何在FORM的受限觸發(fā)子中提交保存數據
----在FORM中很多觸發(fā)子是不能用COMMITWORK語句的,當你在該觸發(fā)子中使用了UPDA
TE,DELETE等操作并想立即存盤時,就需要COMMITWORK語句了。首先在服務器端建立D
B_SQL_COMMIT這個過程(采用ORACLE7.3數據庫),PROCEDUREDB_SQL_COMMITISsource_cursorinteger;ignoreinteger;V7NUMBER:=2;BEGIN
source_cursor:=dbms_sql.open_cursor;
dbms_sql.parse(source_cursor,"COMMITWORK",V7);ignore:=dbms_sql.execute(source_cursor);DBMS_SQL.CLOSE_CURSOR(source_cursor);END;
----然后在FORM中該觸發(fā)子中調用過程DB_SQL_COMMIT;就可以了,當然你可以根據自己
需要將該過程加入參數,這樣通過參數可以得到執(zhí)行DML語句的權限。----⑥如何在FORM中實現某數據項自動按記錄序號加一操作
----設塊名為VO,要操作的數據項為VO_ID,在該塊中建立塊級觸發(fā)子WHEN-CREATE-REC
ORD,加入如下代碼:
:VO_ID:=:System.Trigger_Record;
----這樣每當生成新記錄時VO_ID就會自動加一了。
----⑦如何在一個FORM中調用另一個FORM,或在一個塊中調用另一個塊時顯示特定的記錄有時用戶會要求在調用另一個FORM時,只顯示相關的記錄,舉例如下,在一個FORM的塊中有一個按鈕,在按鈕觸發(fā)子中加入如下代碼:DECLAREPMPARAMLIST;BEGIN
PM:=GET_PARAMETER_LIST("PM");IFNOTID_NULL(PM)THEN
DESTROY_PARAMETER_LIST("PM");ENDIF;
PM:=CREATE_PARAMETER_LIST("PM");......................
ADD_PARAMETER(PM,"THE_WHERE",TEXT_PARAMETER,"EM_NAME=""EM4""ANDEM_PROJECT_NAME=""支架預制""");
OPEN_FORM("PAYMENT",ACTIVATE,SESSION,PM);END;
----其中EM_NAME,EM_PROJECT_NAME為本FORM某塊的數據項,PAYMENT為要調用的FORM模塊。這樣通過傳遞參數列表就可以得到想要的結果。在FORMPAYMENT.FMB中,建立一參數THE_WHERE,CHAR型,長1000,然后在PAYMENT.FMB中建立FORM級觸發(fā)子WHEN-NEW-F
ORM-INSTANCE,在該觸發(fā)子中加入以下語句:
IF:PARAMETER.THE_WHEREISNOTNULLTHENSET_BLOCK_PROPERTY("PAYMENT",
DEFAULT_WHERE,:PARAMETER.THE_WHERE);ENDIF;
----其中PAYMENT為要顯示的塊,這樣通過參數傳遞就得到想要的某些特定條件的數據了。
----⑧在FORM中當有主從塊時,連續(xù)輸入記錄如何避免被不斷的提示保存:
----每輸入一條主記錄和若干條該主記錄的從記錄后,此時再導航到主塊輸下一條記錄,FORM就會提示你是否要保存記錄,而你并不希望FORM提示,讓它自動保存,此時你可以到ProgramUnits中找到過程PROCEDUREClear_All_Master_Details,然后在這個過程中找到語句
Clear_Block(ASK_COMMIT);
----將其改為Clear_Block(DO_COMMIT);就可以了。----⑨在Report開始時選擇排序項:
----在報表開始的ParameterForm中選擇報表按哪個數據項排序,----1.先在USERPARAMETER中創(chuàng)建SORT參數,為字符型,長20。
----2.初始值選’責任方’,然后將這四個值輸入到DATASELECTION中,形成列表。----3.然后處理QUERY中的SQL語句:selectCHARGER,FCO_NO,EM_NAME,FCO_NO,DESCRIPTION,FCR_POINTfromFCR_MAIN
ORDERBYDECODE(:SORT,"責任方",CHARGER,"FCO號",FCO_NO,"FCR號",FCR_NO,"FCR號",EM_NAME)
----⑩在Developer201*中如何讀寫操作系統文件
----在用Developer201*的開發(fā)工具開發(fā)應用程序時,經常碰到需要讀寫外部文件的問
題,可以用ORACLE帶的包TEXT_IO來完成這項需求。例如:DECLARE
IN_FILETEXT_IO.FILE_TYPE;OUT_FILETEXT_IO.FILE_TYPE;LINE_BUFERVARCHAR2(80);
/*若不用IN_FILE,可以將各字段聯接在一起賦值給此變量*/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);ENDLOOP;EXCEPTION
WHENno_data_foundTHEN
TEXT_IO.PUT_LINE(‘CLOSINGTHEFILE,PLEASEWAITING....’);TEXT_IO.FCLOSE(IN_FILE);TEXT_IO.FCLOSE(OUT_FILE);END;
----三.數據庫管理
----①在刪除一個表中的全部數據時,須使用TRUNCATETABLE表名;因為用DROPTAB
LE,DELETE*FROM表名時,TABLESPACE表空間該表的占用空間并未釋放,反復幾次DR
OP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。----②數據庫文件的移動方法
----當想將數據庫文件移動到另外一個目錄下時,可以用ALTERDATABASE命令來移動(
比ALTERTABLESPACE適用性強):
----1.使用SERVERMANAGER關閉實例.SVRMGR>connectinternal;SVRMGR>shutdown;SVRMGR>exit;
----2.使用操作系統命令來移動數據庫文件位置(假設這里操作系統為SOLARIS2.6).
在UNIX中用mv命令可以把文件移動到新的位置,
#mv/ora13/orarun/document.dbf/ora12/orarun
----3.裝載數據庫并用alterdatabase命令來改變數據庫中的文件名.SVRMGR>connectinternal;SVRMGR>startupmountRUN73;
SVRMGR>alterdatabaserenamefile>‘/ora13/orarun/document.dbf’>‘/ora12/orarun/document.dbf’;----4.啟動實例.
SVRMGR>alterdatabaseopen;----ORACLE數據庫開發(fā)經驗總結
擴展閱讀:ORACLE數據庫開發(fā)經驗總結
ORACLE數據庫開發(fā)經驗總結嶺澳核電有限公司黃福同
----ORACLE數據庫作為大型數據庫管理系統,近年來一直占有世界上高端數據庫的最大
份額,其強大而完善的數據庫管理功能,以及ORACLE公司推陳出新的不斷努力,一直成
為IT業(yè)界矚目的焦點。嶺澳核電站的數據庫平臺采用了ORACLE7.3作為后端平臺,前端選
擇了ORACLE公司的DEVELOPER201*及DESIGNER201*作為開發(fā)工具,采用了目前流行的
CLIENT/SERVER模式。本人在ORACLE系統的開發(fā)中,就ORACLE的整套開發(fā)工具提出一些自己的體會,供同行參考。
----一.ORACLESQLPLUS使用技巧:----①查找重復記錄:
SELECTDRAWING,DSNOFROMEM5_PIPE_PREFABWHEREROWID!=(SELECTMAX(ROWID)FROMEM5_PIPE_PREFABD
WHEREEM5_PIPE_PREFAB.DRAWING=D.DRAWINGANDEM5_PIPE_PREFAB.DSNO=D.DSNO);
----執(zhí)行上述SQL語句后就可以顯示所有DRAWING和DSNO相同
且重復的記錄。----刪除重復記錄:
DELETEFROMEM5_PIPE_PREFAB
WHEREROWID!=(SELECTMAX(ROWID)FROMEM5_PIPE_PREFABD
WHEREEM5_PIPE_PREFAB.DRAWING=D.DRAWINGANDEM5_PIPE_PREFAB.DSNO=D.DSNO);
----執(zhí)行上述SQL語句后就可以除所有DRAWING和DSNO相同且重復的記錄。
----②快速編譯所有視圖
----當在把數據庫倒入到新的服務器上后(數據庫重建),需要將視圖重新編譯一遍,因
為該表空間視圖到其它表空間的表的連接會出現問題,可以利用PL/SQL的語言特性,快速編譯。
SQL>SPOOLON.SQL
SQL>SELECT‘ALTERVIEW‘||TNAME||’COMPILE;’FROMTAB;SQL>SPOOLOFF然后執(zhí)行ON.SQL即可。SQL>@ON.SQL
當然,授權和創(chuàng)建同義詞也可以快速進行,如:
SQL>SELECT‘GRANTSELECTON’||TNAME||’TOUSERNAME;’FROMTAB;SQL>SELECT‘CREATESYNONYM
‘||TNAME||’FORUSERNAME.’||TNAME||’;’FROMTAB;③用外聯接提高表連接的查詢速度
在作表連接(常用于視圖)時,常使用以下方法來查詢數據:SELECTPAY_NO,PROJECT_NAMEFROMA
WHEREA.PAY_NONOTIN(SELECTPAY_NOFROMBWHEREVALUE>=1201*0);
----但是若表A有10000條記錄,表B有10000條記錄,則要用掉30分鐘才能查完,主要因
為NOTIN要進行一條一條的比較,共需要10000*10000次比較后,才能得到結果。該用外
聯接后,可以縮短到1分左右的時間:SELECTPAY_NO,PROJECT_NAMEFROMA,B
WHEREA.PAY_NO=B.PAY_NO(+)ANDB.PAY_NOISNULLANDB.VALUE>=1201*;
----④怎樣讀寫文本型操作系統文件
----在PL/SQL3.3以上的版本中,UTL_FILE包允許用戶通過PL/SQL
讀寫操作系統文件。如下:DECALRE
FILE_HANDLEUTL_FILE.FILE_TYPE;BEGIN
FILE_HANDLE:=UTL_FILE.FOPEN(‘C:\\’,’TEST.TXT’,’A’);
UTL_FILE.PUT_LINE(FILE_HANDLE,’HELLO,IT’SATESTTXTFILE’);UTL_FILE.FCLOSE(FILE_HANDLE);END;
----相關UTL_FILE數據庫包詳細信息可以參見相關資料。----⑤怎樣在數據庫觸發(fā)器中使用列的新值與舊值
----在數據庫觸發(fā)器中幾乎總是要使用觸發(fā)器基表的列值,如果某條語句需要某列修改
前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。
----二.ORACLEDEVELOPER201*使用技巧:
----①改變FORM(FMX模塊)運行時的Runform4.5的題頭:----DEVELOPER201*中FMX默認題頭為:Developer/201*FormsRuntimeforWindows
95/NT你可以改為自己定義的標題,
----1.在Form級觸發(fā)器中添加觸發(fā)WHEN-NEW-FORM-INSTANCE----2.在此觸發(fā)器中寫如下代碼:
set_window_property(FORMS_MDI_WINDOW,TITLE,"POINTSYSTEM歡迎使用");
----②如何隱藏菜單中的window選項:
----在創(chuàng)建自己的菜單時,最后選項總有window項,下面介紹如何去掉它,
----1.創(chuàng)建一個Menu
----2.在Menu中建立一個Item,命名為WINDOW。----3.設置該Item屬性如下:----
MenuItemType:MagicCommandType:NullMagicItem:WindowLable:為空
----③怎樣創(chuàng)建動態(tài)下拉列表List
----Developer201*中的列表是通過設置相關屬性而完成數據項的列表設置的,但那
只是靜態(tài)的,有時你想讓某項成為動態(tài)的列表,隨輸入數據的改變而改變,就需要動手
去編個小程序。下面詳細介紹怎樣去做:
----有塊EBOP_CABLE_ACCOUNT,下有SPECIFICATION數據項,當一進入該模塊時,就將
SPECIFICATION項在數據庫中存儲的值動態(tài)顯示出來,先在Form4.5中建立一個PRCEDURE,命名為DYN_LIST:PROCEDUREDYN_LISTISCURSORC1IS
SELECTDISTINCT(SPECIFICATION)FROMEBOP_CABLE_ACCOUNT;CNTNUMBER;iNUMBER;TNAMEEBOP_CABLE_
ACCOUNT.SPECIFICATION%TYPE;BEGIN
CLEAR_LIST("EBOP_CABLE_ACCOUNT.SPECIFICATION");SELECTCOUNT(DISTINCT
(SPECIFICATION))INTOCNTFROMEBOP_CABLE_ACCOUNT;openC1;
FORiIN1..CNTLOOPFETCHC1INTOTNAME;
EXITWHENC1%NOTFOUNDORC1%NOTFOUNDISNULL;ADD_LIST_ELEMENT("EBOP_CABLE_ACCOUNT
.SPECIFICATION",i,TNAME,TNAME);ENDLOOP;
DELETE_LIST_ELEMENT
("EBOP_CABLE_ACCOUNT.SPECIFICATION",CNT+1);CLOSEC1;END;
然后在FORM的WHEN-NEW
-FORM-INSTANCE觸發(fā)子中加入一行:DYN_LIST;
----這樣一進入該FMX,就會動態(tài)刷新該列表。除此之外,SPECIFICATION數據項改為列表項。
----④當顯示多條記錄且數據項特別多時,如何組織錄入及顯示界面:
----如上圖所示,PRN代碼及設備代碼在畫布1(CONTENT型)上,其它數據項在畫布2(ST
ACK型)上,所有數據項為一個表的列或一個塊的數據項。在拉動水平滾動條時或用TAB或
敲回車鍵時,將看到全部數據項。這種排布方法適用于數據項特別多又想顯示多條記錄
時用。主要制作順序為:先建立兩個畫布,畫布1(CONTENT型),畫布2(STACK型),然后
建立塊,選畫布時用畫布1,這樣所有項都顯示在畫布1上,然后選中除PRN代碼及設備代
碼之外的所有數據項,選TOOLS菜單下的PROPERTIES選項,將這些數據項的CANVAS屬性選
為畫布2(STACK型),然后調整整體位置就可以了。----⑤如何在FORM的受限觸發(fā)子中提交保存數據
----在FORM中很多觸發(fā)子是不能用COMMITWORK語句的,當你在該觸發(fā)子中使用了UPDA
TE,DELETE等操作并想立即存盤時,就需要COMMITWORK語句了。首先在服務器端建立D
B_SQL_COMMIT這個過程(采用ORACLE7.3數據庫),PROCEDUREDB_SQL_COMMITISsource_cursorinteger;ignoreinteger;V7NUMBER:=2;BEGIN
source_cursor:=dbms_sql.open_cursor;
dbms_sql.parse(source_cursor,"COMMITWORK",V7);
ignore:=dbms_sql.execute(source_cursor);DBMS_SQL.CLOSE_CURSOR(source_cursor);END;
----然后在FORM中該觸發(fā)子中調用過程DB_SQL_COMMIT;就可以了,當然你可以根據自己
需要將該過程加入參數,這樣通過參數可以得到執(zhí)行DML語句的權限。
----⑥如何在FORM中實現某數據項自動按記錄序號加一操作----設塊名為VO,要操作的數據項為VO_ID,在該塊中建立塊級觸發(fā)子WHEN-CREATE-RECORD,加入如下代碼:
:VO_ID:=:System.Trigger_Record;
----這樣每當生成新記錄時VO_ID就會自動加一了。
----⑦如何在一個FORM中調用另一個FORM,或在一個塊中調用另一個塊時顯示特定的
記錄有時用戶會要求在調用另一個FORM時,只顯示相關的記錄,舉例如下,在一個FORM
的塊中有一個按鈕,在按鈕觸發(fā)子中加入如下代碼:DECLAREPMPARAMLIST;BEGIN
PM:=GET_PARAMETER_LIST("PM");IFNOTID_NULL(PM)THEN
DESTROY_PARAMETER_LIST("PM");ENDIF;
PM:=CREATE_PARAMETER_LIST("PM");......................
ADD_PARAMETER(PM,"THE_WHERE",TEXT_PARAMETER,"EM_NAME=""EM4""ANDEM_PROJECT_NAME=""支架預制""");
OPEN_FORM("PAYMENT",ACTIVATE,SESSION,PM);END;
----其中EM_NAME,EM_PROJECT_NAME為本FORM某塊的數據項,PAYMENT為要調用的FORM
模塊。這樣通過傳遞參數列表就可以得到想要的結果。在FORMPAYMENT.FMB中,建立一
參數THE_WHERE,CHAR型,長1000,然后在PAYMENT.FMB中建立FORM級觸發(fā)子WHEN-NEW-F
ORM-INSTANCE,在該觸發(fā)子中加入以下語句:IF:PARAMETER.THE_WHEREISNOTNULLTHENSET_BLOCK_PROPERTY("PAYMENT",
DEFAULT_WHERE,:PARAMETER.THE_WHERE);ENDIF;
----其中PAYMENT為要顯示的塊,這樣通過參數傳遞就得到想要的某些特定條件的數據了。
----⑧在FORM中當有主從塊時,連續(xù)輸入記錄如何避免被不斷的提示保存:
----每輸入一條主記錄和若干條該主記錄的從記錄后,此時再導航到主塊輸下一條記錄
,FORM就會提示你是否要保存記錄,而你并不希望FORM提示,讓它自動保存,此時你可以
到Program
Units
中找
到過程PROCEDURE
Clear_All_Master_Details,然后在這個過程中找到語句
Clear_Block(ASK_COMMIT);
----將其改為Clear_Block(DO_COMMIT);就可以了。----⑨在Report開始時選擇排序項:
----在報表開始的ParameterForm中選擇報表按哪個數據項排序,----1.先在USERPARAMETER中創(chuàng)建SORT參數,為字符型,長20。
----2.初始值選’責任方’,然后將這四個值輸入到DATASELECTION中,形成列表。
----3.然后處理QUERY中的SQL語句:selectCHARGER,FCO_NO,EM_NAME,FCO
_NO,DESCRIPTION,FCR_POINTfromFCR_MAIN
ORDERBYDECODE(:SORT,"責任方",CHARGER,"FCO號",FCO_NO,"FCR號",FCR_NO,"FCR號",EM_NAME)----⑩在Developer201*中如何讀寫操作系統文件
----在用Developer201*的開發(fā)工具開發(fā)應用程序時,經常碰到需要讀寫外部文件的問
題,可以用ORACLE帶的包TEXT_IO來完成這項需求。例如:DECLARE
IN_FILETEXT_IO.FILE_TYPE;OUT_FILETEXT_IO.FILE_TYPE;LINE_BUFERVARCHAR2(80);
/*若不用IN_FILE,可以將各字段聯接在一起賦值給此變量*/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);ENDLOOP;EXCEPTION
WHENno_data_foundTHEN
TEXT_IO.PUT_LINE(‘CLOSINGTHEFILE,PLEASEWAITING....’);TEXT_IO.FCLOSE(IN_FILE);TEXT_IO.FCLOSE(OUT_FILE);END;
----三.數據庫管理
----①在刪除一個表中的全部數據時,須使用TRUNCATETABLE表名;因為用DROPTAB
LE,DELETE*FROM表名時,TABLESPACE表空間該表的占用空間并未釋放,反復幾次DR
OP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。----②數據庫文件的移動方法
----當想將數據庫文件移動到另外一個目錄下時,可以用ALTERDATABASE命令來移動(
比ALTERTABLESPACE適用性強):----1.使用SERVERMANAGER關閉實例.SVRMGR>connectinternal;SVRMGR>shutdown;SVRMGR>exit;
----2.使用操作系統命令來移動數據庫文件位置(假設這里操作系統為SOLARIS2.6).
在UNIX中用mv命令可以把文件移動到新的位置,#mv/ora13/orarun/document.dbf/ora12/orarun
----3.裝載數據庫并用alterdatabase命令來改變數據庫中的文件名.SVRMGR>connectinternal;SVRMGR>startupmountRUN73;SVRMGR>alterdatabaserenamefile>‘/ora13/orarun/document.dbf’>‘/ora12/orarun/document.dbf’;----4.啟動實例.
SVRMGR>alterdatabaseopen;----(huangfutong@china.com)----ORACLE數據庫開發(fā)經驗總結----嶺澳核電有限公司黃福同----1999/9/28
MicrosoftSQLServer6.5的數據復制
友情提示:本文中關于《ORACLE數據庫開發(fā)經驗總結》給出的范例僅供您參考拓展思維使用,ORACLE數據庫開發(fā)經驗總結:該篇文章建議您自主創(chuàng)作。
來源:網絡整理 免責聲明:本文僅限學習分享,如產生版權問題,請聯系我們及時刪除。