[IDS培訓文件]第六章 ESQL/C的使用

mrhutoo發表於2013-09-06
第六章 ESQL/C的使用
1、prepare語句的使用
在SQL中使用prepar語句後可以根據應用程式提供的不同的values來執行多遍,而語法分析卻僅執行一遍。當一個SQL語句在同一應用程式中被重複執行多遍時,用prepare的方法可以大大提高效能和效率。Prepare語法:
$prepare p_id from “insert into tabname (..) values (?…?)
2、插入遊標(insert cursor)的使用
插入遊標中的put語句使用了insert buffer,從而可以將多條insert語句一次性地寫入共享記憶體緩衝區中,因為減少了寫緩衝區的I/O次數,故可提高效能。插入遊標語法:
$declare cursor_name cursor for insert into tabnem(…) values (…);

$open cursor_name;

$put cursor_name;

或者
$prepare insert_name from “insert into tabname(…) values (?…?);

$declare cursor_name cursor for insert_name;

$open  cursor_name;

$put cursor_name;
3、滾動遊標(scroll cursor)的使用
使用滾動遊標的好處在於可以前後檢索結構集中的記錄,這對於需反覆訪問結果的應用很有用。但是當表很大,且經常進行幅度很大的記錄檢索時,會導致建立很大的臨時表,效率低。建議使用時:
1)定義滾動遊標時可以選擇儘可能少的遊標或者可能少的欄位,比如只選擇表中的主關鍵字,然後再由此選出表中相應的記錄;
2)如果可以不用滾動遊標,則應該避免使用;
3)如果返回結果確信只有一條記錄,則應該避免使用遊標;
4)應該避免遊標的巢狀使用。
滾動遊標語法:
$declare cursor_name scroll cursor for …;

$open cursor_name;
4、修改遊標(update cursor)的使用
$declare cursor_name cursor for … for update

$update … where current of cursor_name;
5、SQL交換區sqlca(sql communication area)的使用
每當執行完一個SQL語句,Online都會將執行情況返回到sqlca這個結構中,其中包括一下資訊:
1)最近執行的SQL語句完成情況;
2)有關效能的一些資訊;
3)對一些可能發生或者已經發生情況的警告;
sqlca機構為:
struct sqlca_s
{
long sqlcode;
char sqlerrm[72];
char sqlerrp[8];
long sqlerrd[6];
struct sqlcaw_s;
{
char sqlwarn0;
char sqlwarn1;
char sqlwarn2;
char sqlwarn3;
char sqlwarn4;
char sqlwarn5;
char sqlwarn6;
char sqlwarn7;
}sqlwarn;
}sqlca;
當呼叫SQL出錯時,往往憑sqlcode的返回碼不能確定出錯原因,還應該返回ISAM錯誤碼sqlerrd[1]。
6、 儲存過程(stored procedure)的使用
儲存過程是使用者用Informix提供的SPL(stored procedure lauguage)語言,編制的一些資料庫操作。可以用以下語法建立、使用儲存過程:
$create procedure p_name(…)

end procedure

$execute p_name;
儲存過程建立時,資料庫會編譯儲存過程,產生資料庫查詢計劃,並將其翻譯成資料庫檔案儲存在IDS資料庫的系統表sysprocedures。儲存過程的所有授權使用者都可以呼叫該過程。具體呼叫時,IDS會從系統表sysprocedures中讀出儲存過程,轉換成執行程式碼,執行它。對於經常被反覆執行的一段SQL語句,若採用儲存過程的方法,既可以減少程式的複雜度,而且應用和資料庫之間的互動由一條SQL語句變為一個儲存過程名,大大減少了互動資料量。其次因為可以提高一些系統效能。另外不同的應用程式可以共享一個儲存過程,從而消除冗餘程式碼。此外,在client/server環境中亦有利於程式碼維護;通過使用儲存過程的安全等級,可以限制使用者的一些非法操作,如禁止使用者對資料庫表的訪問等。
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24955184/viewspace-772256/,如需轉載,請註明出處,否則將追究法律責任。

相關文章