![ESQLC-To-PROC應(yīng)用移植指南_第1頁](http://file4.renrendoc.com/view/627255f1cbc5441c02276695c16194e6/627255f1cbc5441c02276695c16194e61.gif)
![ESQLC-To-PROC應(yīng)用移植指南_第2頁](http://file4.renrendoc.com/view/627255f1cbc5441c02276695c16194e6/627255f1cbc5441c02276695c16194e62.gif)
![ESQLC-To-PROC應(yīng)用移植指南_第3頁](http://file4.renrendoc.com/view/627255f1cbc5441c02276695c16194e6/627255f1cbc5441c02276695c16194e63.gif)
![ESQLC-To-PROC應(yīng)用移植指南_第4頁](http://file4.renrendoc.com/view/627255f1cbc5441c02276695c16194e6/627255f1cbc5441c02276695c16194e64.gif)
![ESQLC-To-PROC應(yīng)用移植指南_第5頁](http://file4.renrendoc.com/view/627255f1cbc5441c02276695c16194e6/627255f1cbc5441c02276695c16194e65.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、ESQL/C to PRO*C應(yīng)用移植方案Oracle China目 錄 TOC o 1-3 h z HYPERLINK l _Toc133221502 一、程序結(jié)構(gòu) PAGEREF _Toc133221502 h 4 HYPERLINK l _Toc133221503 對預(yù)編譯器的處理 PAGEREF _Toc133221503 h 4 HYPERLINK l _Toc133221504 對informix特有頭文件的處理 PAGEREF _Toc133221504 h 4 HYPERLINK l _Toc133221505 對條件編譯語句的處理 PAGEREF _Toc133221505
2、h 4 HYPERLINK l _Toc133221506 對字符串宏定義的處理 PAGEREF _Toc133221506 h 5 HYPERLINK l _Toc133221507 對結(jié)構(gòu)字段宏定義的處理 PAGEREF _Toc133221507 h 5 HYPERLINK l _Toc133221508 對頭文件重復(fù)包含的處理 PAGEREF _Toc133221508 h 6 HYPERLINK l _Toc133221509 $和EXEC SQL PAGEREF _Toc133221509 h 6 HYPERLINK l _Toc133221510 二、EXEC語句 PAGEREF
3、 _Toc133221510 h 7 HYPERLINK l _Toc133221511 DDL語句 PAGEREF _Toc133221511 h 7 HYPERLINK l _Toc133221512 對事務(wù)的處理 PAGEREF _Toc133221512 h 7 HYPERLINK l _Toc133221513 對with hold和with no log的處理 PAGEREF _Toc133221513 h 7 HYPERLINK l _Toc133221514 對lock mode的處理 PAGEREF _Toc133221514 h 8 HYPERLINK l _Toc1332
4、21515 對first的處理 PAGEREF _Toc133221515 h 8 HYPERLINK l _Toc133221516 對match的處理 PAGEREF _Toc133221516 h 9 HYPERLINK l _Toc133221517 對into語句的處理 PAGEREF _Toc133221517 h 10 HYPERLINK l _Toc133221518 對臨時表的處理 PAGEREF _Toc133221518 h 10 HYPERLINK l _Toc133221519 對雙引號和的處理 PAGEREF _Toc133221519 h 11 HYPERLINK
5、 l _Toc133221520 對SQL操作返回值和字段Null判斷的處理 PAGEREF _Toc133221520 h 11 HYPERLINK l _Toc133221521 對ROWID的處理 PAGEREF _Toc133221521 h 12 HYPERLINK l _Toc133221522 對同時選取字段名和*的處理 PAGEREF _Toc133221522 h 12 HYPERLINK l _Toc133221523 有關(guān)UPDATE的處理 PAGEREF _Toc133221523 h 13 HYPERLINK l _Toc133221524 關(guān)于插入游標(biāo)的處理 PAG
6、EREF _Toc133221524 h 13 HYPERLINK l _Toc133221525 關(guān)于DECLARE CURSOR后的錯誤處理 PAGEREF _Toc133221525 h 14 HYPERLINK l _Toc133221526 對釋放游標(biāo)的處理 PAGEREF _Toc133221526 h 14 HYPERLINK l _Toc133221527 關(guān)于SQL語句宿主變量的注意之處,字符串、where語句= PAGEREF _Toc133221527 h 14 HYPERLINK l _Toc133221528 UNIQUE改為DISTINCT PAGEREF _Toc
7、133221528 h 16 HYPERLINK l _Toc133221529 SQL語句中宏的處理 PAGEREF _Toc133221529 h 16 HYPERLINK l _Toc133221530 關(guān)于動態(tài)SQL語句中USING和結(jié)束分號語句的處理 PAGEREF _Toc133221530 h 17 HYPERLINK l _Toc133221531 關(guān)于Serial類型的處理 PAGEREF _Toc133221531 h 18 HYPERLINK l _Toc133221532 關(guān)于BYTE類型的處理 PAGEREF _Toc133221532 h 18 HYPERLINK
8、l _Toc133221533 關(guān)于dec_t類型的處理 PAGEREF _Toc133221533 h 22 HYPERLINK l _Toc133221534 對fork的處理 PAGEREF _Toc133221534 h 22 HYPERLINK l _Toc133221535 對/注釋的處理 PAGEREF _Toc133221535 h 22 HYPERLINK l _Toc133221536 關(guān)于for循環(huán)的處理 PAGEREF _Toc133221536 h 22 HYPERLINK l _Toc133221537 關(guān)于取數(shù)據(jù)庫記錄要去空格的問題 PAGEREF _Toc133
9、221537 h 23 HYPERLINK l _Toc133221538 連續(xù)Case語句不能太多的問題 PAGEREF _Toc133221538 h 23 HYPERLINK l _Toc133221539 定義函數(shù)時使用$,$問題 PAGEREF _Toc133221539 h 23 HYPERLINK l _Toc133221540 三、錯誤代碼 PAGEREF _Toc133221540 h 23 HYPERLINK l _Toc133221541 對sqlca的處理 PAGEREF _Toc133221541 h 23 HYPERLINK l _Toc133221542 對原錯誤
10、碼判斷的處理 PAGEREF _Toc133221542 h 24 HYPERLINK l _Toc133221543 錯誤碼-1480原因和解決方法 PAGEREF _Toc133221543 h 25 HYPERLINK l _Toc133221544 錯誤碼-1400原因和解決方法 PAGEREF _Toc133221544 h 25 HYPERLINK l _Toc133221545 錯誤碼-1002原因和解決方法 PAGEREF _Toc133221545 h 26 HYPERLINK l _Toc133221546 DELETE語句錯誤碼判斷問題 PAGEREF _Toc13322
11、1546 h 27 HYPERLINK l _Toc133221547 UPDATE語句錯誤碼判斷問題 PAGEREF _Toc133221547 h 28 HYPERLINK l _Toc133221548 四、庫函數(shù) PAGEREF _Toc133221548 h 29 HYPERLINK l _Toc133221549 五、其他問題 PAGEREF _Toc133221549 h 29一、程序結(jié)構(gòu)對預(yù)編譯器的處理Informix的預(yù)編譯器:$INFORMIXDIR/bin/esql,頭文件目錄:$INFORMIXDIR/incl/esql庫文件目錄:$INFORMIXDIR/lib: $
12、INFORMIXDIR/lib/esqlOracle的預(yù)編譯器:proc頭文件目錄:$ORACLE_HOME/precomp/public庫文件目錄:$ORACLE_HOME/lib對informix特有頭文件的處理移植處理內(nèi)容:EXEC SQL include sqlstype;EXEC SQL include sqltypes;EXEC SQL include decimal;EXEC SQL include locator;EXEC SQL include sqlhdr;處理方法:這些頭文件是INFORMIX中特有的,Oracle中不存在。刪除掉即可。另外,注意sqlca和sqlda是兩
13、種數(shù)據(jù)庫中都存在的,所以不做處理,保持原樣:EXEC SQL include sqlca;EXEC SQL include sqlda;對條件編譯語句的處理移植處理內(nèi)容:EXEC SQL ifndefEXEC SQL ifdefEXEC SQL endif處理方法:這些都是條件編譯語句,ORACLE不認(rèn)這種用法,統(tǒng)一改為INFORMIX和ORACLE通用用法,把EXEC SQL改為C語言定義方式(#)。#ifndef#ifdef#endifORACLE的語法:EXEC ORACLE DEFINE symbol; - define a symbolEXEC ORACLE IFDEF symbol
14、; - if symbol is definedEXEC ORACLE IFNDEF symbol; - if symbol is not definedEXEC ORACLE ELSE; - otherwiseEXEC ORACLE ENDIF; - end this control block對字符串宏定義的處理移植處理內(nèi)容:EXEC SQL define YFHQLIXI 3225; /*2610應(yīng)付活期存款息*/處理方法: ORACLE中不認(rèn)這種寫法,對這種宏定義,根據(jù)其用途分為兩種:1)只是為了定義一個宏,在SQL語句中不出現(xiàn);2)定義宏是為了做為別名使用,會用在SQL語句;對于第一
15、種用途的,寫成C語言定義方式:# define YFHQLIXI 3225; /*2610應(yīng)付活期存款息*/對于第二種用途的,要使用下面定義全局變量的方法(第一種用途的也可以使用這種方法):在頭文件中,改為如下形式:EXEC SQL BEGIN DECLARE SECTION;char YFHQLIXI 5=3225;EXEC SQL END DECLARE SECTION;在程序代碼的SQL語句中名稱前要樣加冒號,這是因為原先是一個宏,沒有冒號,在移植后的程序中為變量,要加上冒號。. . .WHERE YEWUDH=:YFHQLIXI對結(jié)構(gòu)字段宏定義的處理移植處理內(nèi)容:EXEC SQL de
16、fine BDJBR_JIAOYM stBDJBR.jiaoym;EXEC SQL define BDJBR_RIZHXH stBDJBR.rizhxh;EXEC SQL define BDJBR_CAOZBZ stBDJBR.caozbz;處理方法:對結(jié)構(gòu)字段的宏定義,改為C語言處理方式:#define BDJBR_JIAOYM stBDJBR.jiaoym#define BDJBR_RIZHXH stBDJBR.rizhxh#define BDJBR_CAOZBZ stBDJBR.caozbz對頭文件重復(fù)包含的處理移植處理內(nèi)容:EXEC SQL include sqlca.h;EXEC S
17、QL include sqlda.h;EXEC SQL include dictlen.h;EXEC SQL include pingzheng.h;EXEC SQL include dvyktd.h;EXEC SQL include dvhybt.h;頭文件夾pingzheng.h中:EXEC SQL include dvyktd.h;EXEC SQL include dvhybt.h;處理方法:對于上述頭文件包含,程序的頭文件內(nèi)部中已包含了某個頭文件,在程序里又包含一次,并且都是用EXEC SQL這種方式進(jìn)行的包含(主要是數(shù)據(jù)庫表的頭文件),在編譯時會報錯。解決辦法是:將程序中再次包含的頭
18、文件刪除掉。EXEC SQL include sqlca.h;EXEC SQL include sqlda.h;EXEC SQL include dictlen.h;EXEC SQL include pingzheng.h;頭文件夾pingzheng.h中:EXEC SQL include dvyktd.h;EXEC SQL include dvhybt.h;$和EXEC SQLInformix所有程序中原來以”$”表示為嵌入式SQL部分改為”EXEC SQL”。Informix 的SQL引用變量以”$”標(biāo)志,Oracle為”:”標(biāo)志。Informix statement:$ SELECT l
19、ogin_no into $login_no;Oracle statement:$EXEC SQL SELECT login_no into :login_no;二、EXEC語句DDL語句移植處理內(nèi)容ALTERCREATEGRANTDROPRENAME處理方法:業(yè)務(wù)程序中盡量不使用DDL語句。在ORACLE中,所有的表(包括臨時表)統(tǒng)一在建立數(shù)據(jù)庫時用腳本一起建立,臨時表為會話級,在進(jìn)程退出時自動清除數(shù)據(jù),在程序中不用清空數(shù)據(jù)。臨時表使用Create global temporary table 語句創(chuàng)建。對事務(wù)的處理移植處理內(nèi)容BEGIN WORKCOMMITROLLBACK處理方法:根據(jù)O
20、RACLE事務(wù)的處理機(jī)制,在ORACLE中沒有BEGIN WORK。Oracle (缺省為隱含的事務(wù))每個DML都有隱含的“Begin Transaction”,必須輸入“commit”或“rollback”結(jié)束一個事務(wù)。去掉EXEC SQL BEGIN WORK;COMMIT,ROLLBACK與INFORMIX一致,不做任何處理。注意:程序文件前面如果有BEGIN WORK,除了被注釋掉情況外,即使包含在#ifdef條件編譯不編譯的段里,后面的程序也不能使用后自減符(如i-),否則proc編譯會出錯。對with hold和with no log的處理移植處理內(nèi)容with holdwith n
21、o log處理方法:with hold :ORACLE不使用,把這種用法去掉。with no log:一般在建臨時表時使用,和建表一起去掉。對lock mode的處理移植處理內(nèi)容lock mode處理方法:A:如果是在建表中用來定義頁級鎖或行級鎖,和建表語句一起去掉。Oracle是行級鎖,不使用頁級鎖。B:如果是設(shè)置鎖等待模式,不能作為語句單獨(dú)使用。可以在定義游標(biāo)中使用,是一個選項(?)。對first的處理移植處理內(nèi)容first處理方法:A:條件中沒有order by語句,可以使用rownum來處理,如:First 1:取第一條記錄EXEC SQL SELECT col_name1, from
22、 tab_name where AND rownum2;First 5:取第五條記錄用下面B中取第五條記錄的用法.B:條件中有order by語句,使用游標(biāo)來處理,如:First 1:取第一條記錄EXEC SQL DECLARE cur_name CURSOR FOR SELECT ORDER BY EXEC SQL OPEN cur_name;EXEC SQL FETCH cur_name into ;If().;EXEC SQL CLOSE cur_name;First 5:取前五條記錄int i=0;EXEC SQL DECLARE cur_name CURSOR FORSELECT O
23、RDER BY ;EXEC SQL OPEN cur_name;While(1)i+;EXEC SQL FETCH cur_name into ;If().;if(i = = 5) break;EXEC SQL CLOSE cur_name;對match的處理移植處理內(nèi)容matches處理方法:matches在ORACLE不存在,改為LIKE,使兩種數(shù)據(jù)庫都能支持。Like使用: % 匹配0或多個字符;_ 匹配任何單個字符。通過下面的語句的比較,區(qū)別兩者寫法的區(qū)別:MATCHES A-ZBETWEEN A AND ZMATCHES abcdefgIN (a,b,c,d,e,f,g)MATCHE
24、S *tennis*LIKE %tennis%MATCHES ?ennifer*LIKE _ennifer%MATCHES qwertyNOT IN (q,w,e,r,t,y)MATCHES a-zNOT BETWEEN a AND z對into語句的處理移植處理內(nèi)容into(不包含insert和fetch的或包含cursor的)into temp處理方法:A:into如果是在游標(biāo)中使用,須放在fetch中,如:EXEC SQL DECLARE cur_name CURSOR FORSelect ;EXEC SQL OPEN cur_name;while()EXEC SQL FETCH cur
25、_name INTO ;EXEC SQL CLOSE cur_name;B:into temp建臨時表,需要預(yù)先建臨時表。對臨時表的處理Oracle大部分情況下不需要臨時表,Oracle優(yōu)化器可以處理非常復(fù)雜的查詢,可以重寫SQL語句來避免使用臨時表。Oracle9i以上版本支持ANSI global Temporary Tables。對雙引號和的處理移植處理內(nèi)容(雙引號)處理方法:INFORMIX中單引號和雙引號基本是一致的,用單引號代替,可以在INFORMIX和ORACLE中通用,所以遇到這種情況時:(雙引號):改為單引號:ORACLE不使用,為了統(tǒng)一用法,使用substr代替,如:INF
26、ORMIX:select yngyjg from pjgcs where yngyjg2,3=01ORACLE:select yngyjg from pjgcs where substr(yngyjg,2,2)= 01;INFORMIX:update ffhz3 set dac2=1ORACLE:update ffhz3 set dac=substr(dac,1,1)|1|substr(dac,3,length(dac)-2) 。對SQL操作返回值和字段Null判斷的處理移植處理內(nèi)容查詢返回記錄某字段為空值(Null),及對數(shù)據(jù)庫操作返回值的判斷方法。處理方法:對于數(shù)據(jù)庫的查詢有記錄,但選取字
27、段為空,INFORMIX返回0,ORACLE返回為-1405。一種是在建表時使用約束not null default處理;另一種是用NUL函數(shù)或指示變量indicator處理(?);或使用編譯選項MODE=ORACLE 和UNSAFE_NULL=YES進(jìn)行預(yù)編譯。在INFORMIX中,判斷sqlca.sqlcode!=0 ;在ORACLE中改為判斷sqlca.sqlcode !=0 & sqlca.sqlcode!= -1405。在移植過程中,發(fā)現(xiàn)在一些程序中,是將SQLCODE賦給變量,然后對變量進(jìn)行為0;為100等判斷,但是在oracle里面SQLCODE是否為0已經(jīng)不能完全滿足判斷。 對
28、ROWID的處理移植處理內(nèi)容ROWID處理方法:ROWID在INFORMIX中數(shù)據(jù)類型是INT,在ORACLE中數(shù)據(jù)類型是16進(jìn)制的串,為了統(tǒng)一,兩者統(tǒng)一處理如下:定義宿主變量:char sRowId19;在游標(biāo)中使用:EXEC SQL declare cur_name cursor for select ,rowid from fetch中使用:EXEC SQL fetch into ,:sRowId;(注意:rowid統(tǒng)一放在選取字段的最后一個)where中使用:where rowid=:sRowId對同時選取字段名和*的處理Oracle中不能同時使用字段名和*,需要改為列出所有字段名。有
29、關(guān)UPDATE的處理移植處理內(nèi)容:EXEC SQL UPDATE my_tableSET (mycol) =(:smycol);處理方法:上述的UPDATE中SET段的寫法在ORACLE中不支持,即不支持用括號形式的SET方法,改為逐項賦值的方法。如上例應(yīng)改為:EXEC SQL UPDATE my_tableSET mycol =:smycol;關(guān)于插入游標(biāo)的處理移植處理內(nèi)容:EXEC SQL PUT bzbjh_ins_cur;處理方法:在ORACLE中使用Inserting with Arrays處理:char emp_name5020; int emp_number50; float s
30、alary50; /* populate the host arrays */ . EXEC SQL INSERT INTO EMP (ENAME, EMPNO, SAL) VALUES (:emp_name, :emp_number, :salary); 關(guān)于DECLARE CURSOR后的錯誤處理1)Informix的DECLARE CURSOR可以加上INTO子句,在Fetch時不加INTO子句,而Oracle的語法是在fetch時使用into。Informix:EXEC SQL DECLARE CURSOR cur1 FOR SELECT login_no INTO :login_no
31、 FROM users WHERE user_name = PAM;EXEC SQL FETCH cur1;Oracle:EXEC SQL DECLARE CURSOR cur1 FOR SELECT login_no FROM users WHERE user_name=PAM;EXEC SQL FETCH cur1 INTO :login_no;2)在ORACLE中,declare語句對sqlca.sqlcode不產(chǎn)生影響,所以在declare后判斷sqlcode不正確(如果以前用的sqlca.sqlcode記錄了錯誤),要在open后再判斷。對釋放游標(biāo)的處理移植處理內(nèi)容FREE curs
32、or處理方法:在ORACLE不使用free語句,使用close語句的選項:HOLD_CURSOR 或 RELEASE_CURSOR關(guān)于SQL語句宿主變量的注意之處,字符串、where語句=在ORACLE中不能使用,如果使用substr進(jìn)行處理,必須是對數(shù)據(jù)庫表字段進(jìn)行處理,不能對宿主變量處理;在ORACLE中判斷相等不用”=”,用=,所以對上述語句的這兩個問題,在宿主變量中定義。UNIQUE改為DISTINCTOracle里使用DISTNCT。SQL語句中宏的處理在ORACLE中不支持SQL語句用宏做相等的條件,所以要改為宿主變量,方法是先定義一個字符串宿主變量,再用strcpy拷貝到宿主變量
33、里,用變量做為查詢條件。關(guān)于動態(tài)SQL語句中USING和結(jié)束分號語句的處理在INFORMIX中,允許動態(tài)SQL的PREPARE語句中包含”?”,具體內(nèi)容在EXCUTE語句中用USING定義要使用的變量,這是ORACLE中是不允許的,程序會報錯。在INFORMIX中,在動態(tài)SQL的PREPARE語句引號內(nèi)容里最后可以加分號,也可以不加,但在ORACLE中,不能加分號,不然執(zhí)行時會報錯(編譯時不報)。所以,對上述兩種情況都采用統(tǒng)一的方法進(jìn)行處理,對使用?號的動態(tài)SQL語句,將使用變量放到PREPARE語句中,對PREPARE中最后不要加分號。關(guān)于Serial類型的處理Informix中serial
34、類型支持最大到214748367的整數(shù),并且始終加1。create table tbl1(serial_column serial, enamechar(15)insert into tbl1(serial_column,ename) value (0, scott)Oracle中可用一個number(10)類型和一個Sequence來模擬create table tbl1 ( serial_column number(10), enamechar(15)create sequence tbl1_serialselect tbl1_serial.nextval from dual into :
35、curvalinsert into tbl1( serial_colume,ename) values(:currval, scott)update :currval關(guān)于BYTE類型的處理移植處理內(nèi)容:loc_t YUANSJ;YUANSJ.loc_loctype = LOCMEMORY;YUANSJ.loc_bufsize = iSIZE;YUANSJ.loc_buffer = sYUANSJ;YUANSJ.loc_size = iSIZE;處理方法:對于原程序中的BYTE類型數(shù)據(jù),處理方式為使用ORACLE的BLOB類型代替。對程序中的處理,在informix中是用loc_t類型進(jìn)行處理,
36、在oracle中要用BLOB的專用處理方法。注意:在用RAW后,不要判斷sqlca.sqlcode的值,因為RAW不改變sqlca.sqlcode的值,由于前面的返回可能是-1403,如果判斷返回值會引起問題。關(guān)于dec_t類型的處理移植處理內(nèi)容dec_t處理方法:dec_t只要是為了處理decimal數(shù)據(jù)類型,ORACLE沒有decimal數(shù)據(jù)類型,為了統(tǒng)一,使用double代替。對/注釋的處理移植處理內(nèi)容/ 單行注釋處理方法:使用/*/代替,或使用C+時用預(yù)編譯選項CODE=CPP。關(guān)于for循環(huán)的處理移植處理問題: for (int i=0;i10;i+)處理方法:上述語句在編譯過程中會
37、提示:Encountered the symbol i when expecting one of the following: ; , = ( * ? | & + - / % . *= /= %= += -= = &= |= = | & = != = + - -The symbol ; was substituted for i to continue.原因為proc編譯器對這種寫法的處理有問題,修改方法是在變量聲明處增加對I的變量聲明,所以要改為:int i=0;for (i=0;i0執(zhí)行有意外,符合where條件,select into或fetch無記錄; 0 /* 存本取息處理 03
38、*/ AND (xcunbz = 1) AND zhngjg = :BtParm.zhngjg AND (substr(scjxrq,1, 6) :sTrdtPre6 ) AND (jiluzt = 0) ;在OPEN cASDFH時報錯:-1480,把char sTrdtPre66;改為char sTrdtPre67;并在使用前進(jìn)行memset處理為空,保證字符串有結(jié)束符,就能測試通過。錯誤碼-1400原因和解決方法 錯誤碼SQLCODE=-1400,此問題一般為向庫表中varchar2非空字段插入空值。如:表定義為:testvar2(id number,ename varchar2(10)
39、) not null;宿主變量賦值時:did=1;strcpy(sname,);EXEC SQL insert into testvar2 (id,name) values (:did,:sname);printf(sqlcode%dn,sqlca.sqlcode);會報錯:-1400,處理時要注意, strcpy(sname,);此處必須賦值。請注意NOT NULL字段賦值。錯誤碼-1002原因和解決方法 在我們的程序測試中,可能會遇到-1002的錯誤,其原因是這樣的:在程序中用到游標(biāo)進(jìn)行讀取數(shù)據(jù)庫數(shù)據(jù),對多條記錄是采用判斷的方式,中斷循環(huán)是用一個最大條數(shù)進(jìn)行判斷的,循環(huán)到最大條數(shù)時退出循環(huán)
40、,而不是根據(jù)SQLCODE為沒有記錄了就進(jìn)行判斷的。因為在INFORMIX中,沒有記錄就返回100,再進(jìn)行讀取還是返回100,而在ORACLE中,第一次沒有記錄返回-1403,再次讀取就會返回-1002,而不再是-1403,所以原來INFORMIX對的邏輯在ORACLE中就不對了,所以請用到FETCH的地方要檢查退出循環(huán)是用SQLCODE進(jìn)行的判斷。DELETE語句錯誤碼判斷問題在INFORMIX中,如果要刪除數(shù)據(jù)為空,DELETE后的SQLCODE為0,在ORALCE中,如果為空,SQLCODE為1403(SQL_NOTFOUND),所以在用SQL_ERR判斷返回值時,應(yīng)該將if(SQL_E
41、RR)改為if(SQL_ERR & SQLCODE != SQL_NOTFOUND)。UPDATE語句錯誤碼判斷問題在INFORMIX中,如果要更新數(shù)據(jù)為空,UPDATE后的SQLCODE為0,在ORALCE中,如果為空,SQLCODE為1403(SQL_NOTFOUND),所以在用SQL_ERR判斷返回值時,應(yīng)該將if(SQL_ERR)改為if(SQL_ERR & SQLCODE != SQL_NOTFOUND)。四、庫函數(shù)對decimal處理的INFORMIX庫函數(shù)(以dec開頭)不再使用,因為ORACLE沒有decimal數(shù)據(jù)類型,使用double類型代替。函數(shù)比較InformixOracle描述strindex1,index2substr(str,index1,len)Index1和index2在Inform
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度合伙人股權(quán)激勵與分紅權(quán)分配協(xié)議
- 2025年度建筑工程轉(zhuǎn)讓與建筑廢棄物處理與回收合同
- 2025年度武漢高新技術(shù)產(chǎn)業(yè)園區(qū)企業(yè)研發(fā)合作合同
- 2025年枯煤項目投資可行性研究分析報告
- 2025年度城市景觀護(hù)欄定制安裝合作協(xié)議
- (高清版)DB37∕T 2058-2012 羥丙基甲基纖維素
- 2025年度工程車輛租賃與道路救援服務(wù)合同范本
- 2025年度建筑勞務(wù)清包工協(xié)議范本實施指南
- 2025年度家具定制與銷售合作協(xié)議集錦
- 2025年度回遷房買賣合同范本(含稅費(fèi)結(jié)算)
- 2025年中國銅畫市場調(diào)查研究報告
- 山西省太原市2024-2025學(xué)年九年級上學(xué)期期末歷史試題(含答案)
- 2024年全國體育專業(yè)單獨(dú)招生考試數(shù)學(xué)試卷試題真題(含答案)
- 2025屆高三八省聯(lián)考語文試卷分析 課件
- 2025年江蘇連云港灌云縣招聘“鄉(xiāng)村振興專干”16人高頻重點提升(共500題)附帶答案詳解
- 2025年度檢修計劃
- 2024-2025學(xué)年冀教版數(shù)學(xué)五年級上冊期末測試卷(含答案)
- 商業(yè)綜合體市場調(diào)研報告
- 少兒素描課件
- 天津市部分區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 生物 含解析
- 《對私外匯業(yè)務(wù)從業(yè)資格》開放式測試答案
評論
0/150
提交評論