鍏充簬浣跨敤PRO*C緙栫▼鐨勪竴浜涚畝鍗曡鏄庡拰渚嬪瓙
銆銆PROC鏄疧RACLE鏁版嵁搴撴彁渚涚殑緙栫▼鎺ュ彛涔嬩竴錛屽叾搴旂敤鍗佸垎鐨勫箍娉涳紝鏈枃閫氳繃涓涓叿浣撶殑渚嬪瓙錛屼粙緇峆ROC緙栫▼鐨勪竴浜涚粡楠屽強搴旀敞鎰忕殑鍦版柟銆?br />銆銆
銆銆渚嬪瓙紼嬪簭錛?br />銆銆<code>
銆銆#include <stdio.h>
銆銆#include <string.h>
銆銆#include <stdlib.h>
銆銆#include <sqlda.h>
銆銆#include <sqlcpr.h>
銆銆
銆銆EXEC SQL INCLUDE sqlca;
銆銆/*RELEASE_CURSOR=YES 浣縋ROC 鍦ㄦ墽琛屽畬鍚庨噴鏀句笌宓屽叆SQL鏈夊叧璧勬簮*/
銆銆EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
銆銆
銆銆EXEC SQL BEGIN DECLARE SECTION;
銆銆varchar vc_user[20];
銆銆long al_empno=0;
銆銆char ac_ename[11]="";
銆銆char ac_hiredate[20]="";
銆銆double af_sal=0;
銆銆
銆銆EXEC SQL VAR ac_ename IS STRING(11);
銆銆EXEC SQL VAR ac_hiredate IS STRING(20);
銆銆
銆銆EXEC SQL END DECLARE SECTION;
銆銆
銆銆/*閿欒澶勭悊鍑芥暟*/
銆銆void sql_error(char *msg)
銆銆{
銆銆printf("\n%s,%ld,%s\n", msg,sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
銆銆EXEC SQL ROLLBACK RELEASE;
銆銆exit(-1);
銆銆}
銆銆
銆銆main()
銆銆{
銆銆EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE ERROR: ");
銆銆
銆銆/*榪炴帴鏁版嵁搴?/
銆銆strcpy(vc_user.arr,"scott/tiger@DEMO");
銆銆vc_user.len=16;
銆銆exec sql connect :vc_user;
銆銆
銆銆EXEC SQL DECLARE cur_emp CURSOR FOR
銆銆SELECT EMPNO, ENAME,to_char(HIREDATE,'yyyy/mm/dd hh24:mi:ss'),SAL FROM EMP;
銆銆
銆銆EXEC SQL OPEN cur_emp;
銆銆while(1)
銆銆{
銆銆al_empno=0;
銆銆strcpy(ac_ename,"");
銆銆strcpy(ac_hiredate,"");
銆銆af_sal=0;
銆銆EXEC SQL FETCH cur_emp INTO :al_empno, :ac_ename:ename_ind, :ac_hiredate:hiredate_ind, :af_sal:sal_ind;
銆銆if( sqlca.sqlcode == 1403)
銆銆{
銆銆break;
銆銆}
銆銆printf("empno=%ld,ename=%s,hiredate=%s,sal=%lf\n",al_empno,ac_ename,ac_hiredate,af_sal);
銆銆}
銆銆EXEC SQL CLOSE cur_emp;
銆銆EXEC SQL ROLLBACK WORK RELEASE;
銆銆}
銆銆</code>
銆銆
銆銆1銆佸涓誨彉閲忕殑澹版槑
銆銆
銆銆鍦≒ROC涓?鍦⊿QL璇彞涓敤鍒扮殑鍙橀噺縐頒負瀹夸富鍙橀噺銆備粬浠簲鍦‥XEC SQL BEGIN DECLARE SECTION;涓嶦XEC SQL EDN DECLARE SECTION;
銆銆
銆銆涔嬮棿澹版槑錛屽涓婇潰鎵紺?鍦ㄥ0鏄庡涓誨彉閲忔椂搴旀敞鎰忎互涓嬪嚑鐐癸細
銆銆
銆銆(1) 鍦ㄦ暟鎹簱琛ㄤ腑瀹氫箟涓篤ARCHAR2錛孷ARCHAR錛孋HAR鐨勫瓧孌碉紝鍦≒ROC涓彲澹版槑涓篊HAR錛屼絾闀垮害搴斾負瀹冧滑鍦ㄨ〃涓畾涔夌殑闀垮害鍔?錛屽洜涓篜ROC涓?br />銆銆
銆銆CHAR鍨嬪彉閲忕敤鍋氱粨灝俱?br />銆銆
銆銆濡傦細ENAME鍦ㄨ〃涓殑瀹氫箟涓篹name varchar2(10)錛屽湪PROC涓彲瀹氫箟涓猴細
銆銆EXEC SQL BEGIN DECLARE SECTION;
銆銆char ename[11];
銆銆EXEC SQL END DECLARE SECTION;
銆銆
銆銆甯歌閿欒璇存槑:
銆銆
銆銆濡傛灉鎻掑叆鐨勫瓧絎︿覆闀垮害澶т簬10錛屽錛欵XEC SQL INSERT INTO EMP(ENAME) VALUES('12345678901');浼氬嚭鐜頒互涓嬮敊璇?
銆銆error:ORA-01480: STR 璧嬪煎彉閲忕己灝戠┖鍚庣紑銆?br />銆銆
銆銆濡傛灉瀹氫箟涓?
銆銆EXEC SQL BEGIN DECLARE SECTION;
銆銆char ename[15];
銆銆EXEC SQL END DECLARE SECTION;
銆銆
銆銆褰撴彃鍏ョ殑瀛楃涓查暱搴﹀ぇ浜?0錛屽皬浜?5鏃?濡傦細EXEC SQL INSERT INTO EMP(ENAME) VALUES('12345678901');浼氬嚭鐜頒互涓嬮敊璇?
銆銆error:ORA-01401: 鎻掑叆鐨勫煎浜庡垪榪囧ぇ銆?br />銆銆
銆銆褰撴彃鍏ョ殑瀛楃涓查暱搴﹀ぇ浜?5錛屽錛欵XEC SQL INSERT INTO EMP(ENAME) VALUES('12345678901234');浼氬嚭鐜頒互涓嬮敊璇?
銆銆error:ORA-01401:STR 璧嬪煎彉閲忕己灝戠┖鍚庣紑銆?br />銆銆
銆銆(2) 浠嶴QL璇彞涓彇瀛楁鐨勫煎埌瀹夸富鍙橀噺涓椂錛孭ROC涓嶄細鑷姩緇欏涓誨彉閲忓幓鎺夊彸絀烘牸銆傝屾槸浠ュ湪DECLARE SECTION 涓畾涔夌殑闀垮害涓哄噯(涓?琛ㄤ腑瀹氫箟鐨勬棤鍏?涓嶈凍琛ュ彸絀烘牸.濡傛灉涓嶆敞鎰忚繖涓鐐癸紝鍦≒ROC涓繘琛屽瓧絎︿覆鎿嶄綔鏃訛紙濡傛瘮杈冪浉絳夛級浼氬嚭閿欍傚:
銆銆EXEC SQL BEGIN DECLARE SECTION;
銆銆char ename[10];
銆銆EXEC SQL END DECLARE SECTION;
銆銆濡傛灉ENAME鍦ㄨ〃涓殑鍊間負'abc',鍒欏彇鍑虹殑鍊間負'abc ';
銆銆
銆銆鍙敤璇彞EXEC SQL VAR閲嶅畾涔塁HAR鍨嬪彉閲忋傝繖鏍峰涓誨彉閲忎細鑷姩鍘繪帀鍙崇┖鏍箋傚涓?
銆銆EXEC SQL BEGIN DECLARE SECTION;
銆銆char ename[11];
銆銆EXEC SQL VAR ac_ename IS STRING(11);
銆銆EXEC SQL END DECLARE SECTION;
銆銆濡傛灉ENAME鍦ㄨ〃涓殑鍊間負'abc',鍒欏彇鍑虹殑鍊間負'abc';
銆銆
銆銆(3) 瀵規誕鐐瑰瀷鐨勫彉閲忥紝涓轟繚璇佺簿搴︼紝鏈濂芥槸澹版槑鎴怐OUBLE鍨嬬殑.鍥犱負DOUBLE鍨嬬殑綺懼害姣擣LOAT鍨嬮珮寰堝.
銆銆
銆銆(4) 鏁村瀷鍙0鏄庝負LONG鍨?瀵硅緝闀跨殑鏁村瀷,鑰屼笖鎵鐢ㄧ殑騫沖彴鏀寔鐨勮瘽,濡傚湪SUN騫沖彴涓?鍙0鏄庝負LONG LONG鍨?.
銆銆
銆銆(5) DATE鍨嬬殑澶勭悊錛欴ATE鍨嬩竴鑸0鏄庝負CHAR(20)銆?br />銆銆
銆銆寰琛ㄤ腑鎻掑叆DATE鍨嬫暟鎹椂,涓鑸敤TO_DATE()鍑芥暟榪涜綾誨瀷杞崲,鍙栧嚭鍊兼椂涓鑸敤TO_CHAR()鍑芥暟榪涜綾誨瀷杞崲.
銆銆EXEC SQL select to_char(hiredate,'yyyy/mm/dd hh24:mi:ss') into :ac_hire_date from EMP where empno=1234;
銆銆EXEC SQL insert into EMP(EMPNO,HIREDATE) values(123,to_date(:ac_hiredate,'yyyy/mm/dd hh24:mi:ss');
銆銆
銆銆2銆佸涓誨彉閲忕殑浣滅敤鑼冨洿
銆銆
銆銆濡傛灉瀹夸富鍙橀噺鍦ㄦ墍鏈夌殑鍑芥暟涔嬪澹版槑錛屽垯浠栦滑鏄叏灞鍙橀噺銆傚湪浣跨敤涔嬪墠瑕佹敞鎰忔妸鍙橀噺鐨勫煎垵濮嬪寲錛屽涓誨彉閲忎篃鍙互鍦ㄦ煇涓嚱鏁扮殑鍐呴儴瀹氫箟銆?榪欐椂浠栦滑鏄眬閮ㄥ彉閲忋備竴鑸兘涔犳儻鎶婂涓誨彉閲忓0鏄庝負鍏ㄥ眬鍙橀噺銆?br />銆銆
銆銆3銆佹暟鎹簱鐨勮繛鎺ヤ笌鏂紑
銆銆
銆銆鏁版嵁搴撶殑榪炴帴鏈変互涓嬩袱縐嶆柟娉曪細
銆銆(1)
銆銆strcpy(vc_user.arr,"scott/tiger");
銆銆vc_user.len=11;
銆銆exec sql connect :vc_user;
銆銆
銆銆(2)
銆銆strcpy(user,"scott");
銆銆strcpy(pass,"tiger");
銆銆exec sql connect :user identified by :pass;
銆銆
銆銆娉ㄦ剰錛氬湪鏈変簺騫沖彴涓婁袱縐嶉兘鍙互,鍦ㄦ湁浜涘鉤鍙頒笂鍙兘鐢ㄧ涓縐嶆柟娉?
銆銆
銆銆鍦≒ROC紼嬪簭涓紝瑕佽浣忕敤EXEC SQL ROLLBACK WORK RELEASE;鏂紑涓庢暟鎹簱鐨勮繛鎺?騫墮噴鏀劇浉鍏崇殑鏁版嵁搴撹祫婧愩?br />銆銆
銆銆4銆丳ROC涓殑NULL鍊肩殑澶勭悊
銆銆
銆銆濡傛灉鏌愪竴瀛楁鍙栧嚭鐨勫兼槸NULL,浼氭姤:sqlcode=-1405, sqlerr=ORA-01405: 璇誨彇鐨勫垪鍊間負 NULL
銆銆
銆銆騫朵笖鐩稿簲鐨勫涓誨彉閲忕殑鍊間笉浼氳鏀瑰彉,涓烘墽琛岃SQL璇彞涔嬪墠鐨勫? 甯哥敤鐨勫鐞哊ULL鍊肩殑鏂規硶鏈夛細
銆銆
銆銆(1)閲囩敤鎸囩ず鍣ㄥ彉閲?姝ゆ椂涓嶄細鏈?1405閿欒,褰撳繀欏繪槸鎵浠ヤ負NULL鐨勫瓧孌甸兘鏈夌浉搴旂殑鎸囩ず鍣ㄥ彉閲?濡傛灉鏌愪竴瀛楁娌℃湁鎸囩ず鍣ㄥ彉閲?浣嗗彇鍑虹殑鍊?br />銆銆
銆銆涓篘ULL鍊?鍒欎粛鐒朵細鏈?1405閿欒.褰撳彇鍑虹殑鍊兼槸NULL鏃訛紝鐩稿簲鐨勬寚紺哄櫒鍙橀噺鍙橀噺涓?1錛屽彲鏍規嵁鎸囩ず鍣ㄥ彉閲忕殑鍊煎仛鍝嶅簲鐨勫鐞嗐?br />銆銆
銆銆(2)濡傛灉瀛楁杈冨,鍙彇瀛楁鍒頒竴涓粨鏋勪綋涓強涓庤緇撴瀯浣撳搴旂殑鎸囩ず鍣ㄧ粨鏋勪綋涓?濡備笂闈㈢殑渚嬪瓙涓彲瀹氫箟緇撴瀯浣擄細
銆銆struct str_emp{
銆銆long al_empno;
銆銆char ac_ename;
銆銆char ac_hiredate;
銆銆double af_sal;
銆銆};
銆銆struct str_emp_ind{
銆銆long al_empno;
銆銆char ac_ename;
銆銆char ac_hiredate;
銆銆double af_sal;
銆銆};
銆銆
銆銆struct str_emp str_emp;
銆銆strcut str_emp_ind str_emp_ind;
銆銆
銆銆鍦ㄥ彇涔嬪墠鍙敤memset(&str_emp,0,sizeof(str_emp)).娓呯┖璇ョ粨鏋勪綋,榪欐牱濡傛灉鏄瓧絎﹀瀷鐨凬ULL,浼氫負"",鏁村瀷鐨凬ULL浼氫負0,
銆銆
銆銆嫻偣鍨嬬殑浼氫負0.00銆傛鏃朵笉浼氭湁-1405閿欒銆?br />銆銆
銆銆(3)涔熷彲閲囩敤NVL()鍑芥暟:涓句緥濡備笅錛?br />銆銆EXEC SQL DECLARE authors CURSOR FOR
銆銆SELECT EMPNO, NVL(ENAME,chr(0)),nvl(to_char(HIREDATE,'yyyy/mm/dd hh24:mi:ss'),chr(0)),NVL(SAL,0) FROM EMP;
銆銆
銆銆榪欐牱涔熶笉浼氭湁-1405閿欒涓?褰撳彇鍑虹殑鍊兼槸NULL鏃?鑷姩鐢∟VL()涓寚瀹氱殑鍊間唬鏇?
銆銆
銆銆CHR(0)涔熷彲鐩存帴鐢?'浠f浛,濡備笅:
銆銆SELECT EMPNO, NVL(ENAME,''),nvl(to_char(HIREDATE,'yyyy/mm/dd hh24:mi:ss'),''),NVL(SAL,0) FROM EMP;
銆銆
銆銆5銆丳ROC涓殑閿欒鐨勫鐞?/b>
銆銆
銆銆鎵鏈夌殑SQL璇彞閮芥湁鍙兘鍑洪敊.鎵浠ラ兘瑕佸姞浠ュ垽鏂?浣嗘瘡涓猄QL璇彞鍚庨兘鍔犻敊璇垽鏂?澶夯鐑?鍙敤涓涓嚱鏁板sql_error()鏉ヨ繘琛岄敊璇鐞?
銆銆
銆銆鏂規硶:
銆銆
銆銆(1)瀹氫箟ql_error()鍑芥暟銆?br />銆銆
銆銆(2)鍦ㄥ紑澶村姞涓奅XEC SQL WHENEVER SQLERROR DO sql_error();榪欐牱褰撳彂鐢焥qlca.sqlcode <0 鐨勯敊璇椂,紼嬪簭鑷姩杞埌sql_error()涓墽琛? 娉ㄦ剰:瀵箂qlca.sqlcode >0鐨勯敊璇 sqlca.sqlcode =1403 鏄笉浼氳漿鍒皊ql_error()涓墽琛岀殑.
銆銆
銆銆鍙﹀:鍦║NIX涓嬶紝鍙互鐢∣ERR 鏉ユ煡鎵鵑敊璇殑鎻忚堪銆傚錛?ora ORA -1405 鏌ユ壘閿欒鍙蜂負-1405鐨勬弿榪?
銆銆
銆銆6銆丳ROC涓皟鐢ㄥ瓨鍌ㄨ繃紼嬬殑鏂規硶
銆銆
銆銆瑕佹妸瀛樺偍榪囩▼鏀懼湪EXEC SQL EXECUTE 鍜?END-EXEC;涔嬮棿錛屽涓嬫墍紺猴細
銆銆
銆銆鍏朵腑錛歛l_empno,ac_ename 涓鴻緭鍏ュ弬鏁?l_return,l_errno,c_errtext 涓鴻緭鍑哄弬鏁般?br />銆銆al_empno=8888;
銆銆strcpy(ac_ename,"ABCD");
銆銆EXEC SQL EXECUTE
銆銆BEGIN
銆銆up_db_emp(:al_empno,:ac_ename,:l_return,:l_errno,:c_errtext);
銆銆END;
銆銆END-EXEC;
銆銆if (l_return != 0)
銆銆{
銆銆printf("璋冪敤UP_PB_EMP瀛樺偍榪囩▼鍑洪敊,errno=%ld,errtext=%s\n",l_errno,c_errtext);
銆銆}
銆銆
銆銆7銆丳ROC鐨勫懡浠よ閫夐」錛歅ROC緙栬瘧鍣ㄦ湁寰堝鐨勫懡浠よ閫夐」錛屽湪鍛戒護琛屼笅鐩存帴涓嶅甫鍙傛暟榪愯PROC錛屼細鍒楀嚭鎵鏈夌殑鍛戒護琛岄夐」鏉ワ紝騫舵湁璇存槑銆?br />銆銆
銆銆(1)鍌ㄥ瓨榪囩▼:緙栬瘧鍌ㄥ瓨榪囩▼鏄甯︿笂鐢ㄦ埛鍚嶅強瀵嗙爜
銆銆proc USERID=scott/tiger sqlcheck=SEMANTICS ireclen=512 iname=test.cpp
銆銆
銆銆(2)PARSE=NONE 瀵歸潪SQL浠g爜涓嶈繘琛岃娉曞垎鏋愶紝榛樿瀵歸潪SQL浠g爜涔熻繘琛岃娉曞垎鏋?
銆銆
銆銆鍦≧ED HAD6.3涓婄殑ORACLE8.1.5涓敤PROC鏃?浼氭彁紺?/USR/INCLUDE/STDIO.H 鍙婂叾浠栫殑.H鏂囦歡涓湁閿? 鍙妸PARSE=NONE鍔犱笂,灝卞ソ浜?
銆銆
銆銆8銆佹敞鎰忓姞涓婏細EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
銆銆
銆銆RELEASE_CURSOR=YES 浣縋ROC 鍦ㄦ墽琛屽畬鍚庨噴鏀句笌宓屽叆SQL鏈夊叧璧勬簮錛屼繚璇佸湪璇ROC紼嬪簭鎵ц瀹屽悗錛孫RACLE涓嶄細閿佷綇鏁版嵁搴撹祫婧愶紝濡傞攣琛ㄧ瓑銆?br />銆銆
銆銆濡傛灉鍦≒ROC涓敤鍒癘RACA錛岃繕瑕佸湪紼嬪簭澶村姞涓婏細
銆銆EXEC ORACLE OPTION (ORACA=YES);
銆銆
銆銆9銆丳ROC涓殑綾誨瀷杞崲
銆銆
銆銆涓銆佸湪C璇█涓?
銆銆
銆銆(1)瀛楃鍨嬪埌鏁村瀷鍙敤ATOI() ATOL(),SSCANF()
銆銆
銆銆(2)鏁村瀷,嫻偣鍨嬪埌瀛楃鍨?鍙敤SPRINTF()
銆銆
銆銆(3)瀛楃鍨嬪埌嫻偣鍨嬬敤ATOF()涓嶈,鏈濂界敤SSCANF(),涓句緥濡備笅:
銆銆
銆銆EXEC SQL BEGIN DECLARE SECTION;
銆銆double d_demo;
銆銆float f_demo;
銆銆char ac_text[20]="222";
銆銆EXEC SQL END DECLARE SECTION;
銆銆
銆銆(1)sscanf(ac_text, "%f", &d_demo);
銆銆printf("ac_text=%s,d_demo=%f\n",ac_text,d_demo);
銆銆
銆銆(2)sscanf(ac_text, "%lf", &d_demo);
銆銆printf("ac_text=%s,d_demo=%f\n",ac_text,d_demo);
銆銆
銆銆(3)sscanf(ac_text, "%f", &d_demo);
銆銆printf("ac_text=%s,d_demo=%lf\n",ac_text,d_demo);
銆銆
銆銆(4)sscanf(ac_text, "%lf", &d_demo);
銆銆printf("ac_text=%s,d_demo=%lf\n",ac_text,d_demo);
銆銆
銆銆printf("*******************\n");
銆銆
銆銆(5)sscanf(ac_text, "%f", &f_demo);
銆銆printf("ac_text=%s,f_demo=%f\n",ac_text,f_demo);
銆銆
銆銆(6)sscanf(ac_text, "%lf", &f_demo);
銆銆printf("ac_text=%s,f_demo=%f\n",ac_text,f_demo);
銆銆
銆銆(7)sscanf(ac_text, "%f", &f_demo);
銆銆printf("ac_text=%s,f_demo=%lf\n",ac_text,f_demo);
銆銆
銆銆(sscanf(ac_text, "%lf", &f_demo);
銆銆printf("ac_text=%s,f_demo=%lf\n",ac_text,f_demo);
銆銆
銆銆杈撳嚭鐨勭粨鏋?
銆銆ac_text=222.00,d_demo=0.000000
銆銆ac_text=222.00,d_demo=222.000000
銆銆ac_text=222.00,d_demo=222.000032
銆銆ac_text=222.00,d_demo=222.000000
銆銆*******************
銆銆ac_text=222.00,f_demo=222.000000
銆銆ac_text=222.00,f_demo=0.000000
銆銆ac_text=222.00,f_demo=222.000000
銆銆ac_text=222.00,f_demo=0.000000
銆銆d_demo=atof(ac_text);
銆銆printf("ac_text=%s,atof(ac_text)=%f\n",ac_text,d_demo);
銆銆
銆銆d_demo=atof(ac_text);
銆銆printf("ac_text=%s,atof(ac_text)=%lf\n",ac_text,d_demo);
銆銆
銆銆f_demo=atof(ac_text);
銆銆printf("ac_text=%s,atof(ac_text)=%f\n",ac_text,f_demo);
銆銆
銆銆f_demo=atof(ac_text);
銆銆printf("ac_text=%s,atof(ac_text)=%lf\n",ac_text,f_demo);
銆銆
銆銆杈撳嚭鐨勭粨鏋?
銆銆ac_text=222.00,atof(ac_text)=1243288.000000
銆銆ac_text=222.00,atof(ac_text)=1243288.000000
銆銆ac_text=222.00,atof(ac_text)=1243288.000000
銆銆ac_text=222.00,atof(ac_text)=1243288.000000
銆銆
銆銆浠庝笂闈㈢殑緇撴灉鍙:
銆銆
銆銆DOUBLE鍨嬪簲閲囩敤sscanf(ac_app_capcity, "%lf", &d_app); 鎵撳嵃鐢?%lf","%f" 閮藉彲浠? (2),(4)姝g‘
銆銆
銆銆FLOAT鍨嬪簲閲囩敤sscanf(ac_app_capcity, "%f", &d_app); 鎵撳嵃鐢?%lf","%f" 閮藉彲浠? (5),(7)姝g‘
銆銆
銆銆閲囩敤ATOF()杞崲鐨勭粨鏋滈兘鏄敊鐨?鎵浠ヤ笉瑕佺敤瀹冦?br />銆銆
銆銆浜屻佸啓琛ㄦ垨浠庤〃涓彇鏁版嵁鏃?
銆銆
銆銆(1)瀛楃鍨嬩笌鏁村瀷涔嬮棿鍙笉鐢ㄨ漿鎹?閲囩敤榛樿鏂瑰紡銆?br />銆銆
銆銆(2)瀛楃鍨嬩笌嫻偣鍨嬩箣闂村彲涓嶇敤杞崲,閲囩敤榛樿鏂瑰紡銆?br />銆銆
銆銆(3)鏃ユ湡鍨嬩笌瀛楃鍨嬩箣闂村彲鐢═O_CHAR(),TO_DATE()銆?br />銆銆
銆銆10銆丳ROC涓殑4縐嶅姩鎬丼QL綆浠?br />銆銆
銆銆(1)鍔ㄦ丼QL1: 涓嶈兘鏄煡璇?SELECT)璇彞,騫朵笖娌℃湁瀹夸富鍙橀噺.
銆銆
銆銆鐢ㄦ硶:鎷間竴涓插姩鎬丼QL璇彞,騫剁敤EXECUTE IMMEDIATE鎵ц,濡?
銆銆EXEC SQL EXECUTE IMMEDIATE "CREATE TABLE dyn1 (col1 VARCHAR2(4))";
銆銆
銆銆(2)鍔ㄦ丼QL2: 涓嶈兘鏄煡璇?SELECT)璇彞,騫朵笖杈撳叆鐨勫涓誨彉閲忔暟鐩槸鐭ラ亾鐨?
銆銆
銆銆鐢ㄦ硶:鎷間竴涓插姩鎬丼QL璇彞,鐢≒REPARE,EXECUTE璇彞鎵ц.
銆銆strcpy(c_sql, "DELETE FROM EMP WHERE EMPNO = ");
銆銆EXEC SQL PREPARE sql_stmt FROM :c_sql;
銆銆EXEC SQL EXECUTE sql_stmt USING :emp_number;
銆銆
銆銆(3)鍔ㄦ丼QL3: 鐢ㄤ簬鍒涘緩鍔ㄦ佹煡璇? 騫朵笖瑕佹煡璇㈢殑瀛楁鍙婅緭鍏ョ殑瀹夸富鍙橀噺鏁扮洰鏄煡閬撶殑
銆銆
銆銆鐢ㄦ硶: 鎷間竴涓插姩鎬丼QL璇彞,鐢≒REPARE鍒嗘瀽璇ヨ鍙?騫惰瀹氫箟涓涓狢URSOR榪涜鍙栧?br />銆銆
銆銆濡?濡傝鏌ヨ鐨勬暟鎹寜涓騫?2鏈堟斁鍒?2寮犺〃涓傝〃鍚嶄負user_fee_1mon, user_fee_2mon,....鍙噰鐢ㄥ姩鎬丼QL3鏉ヨ繘琛屾煡璇?br />銆銆strcpy(c_sql,"select c_user_id,c_user_name,to_char(t_date,'yyyy/mm/dd hh:mi:ss'),n_fee\n");
銆銆strcat(c_sql,"from USER_FEE_");
銆銆strcat(c_sql,ac_mon);
銆銆strcat(c_sql," \n where c_user_id = :v1");
銆銆
銆銆EXEC SQL PREPARE s FROM :c_sql;
銆銆
銆銆EXEC SQL DECLARE cur_user_fee CURSOR FOR s;
銆銆
銆銆EXEC SQL OPEN cur_user_fee USING :ac_user_id;
銆銆
銆銆while(1)
銆銆{
銆銆
銆銆EXEC SQL FETCH cur_user_fee into :c_user_id,:c_user_name,:c_date,:n_fee);
銆銆
銆銆if (sqlca.sqlcode < 0)
銆銆{
銆銆/*FETCH CURSOR澶辮觸*/
銆銆printf("fetch cursor cur_user_fee fail,sqlcode=%ld,sqlserr=%s",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
銆銆}
銆銆if( sqlca.sqlcode == SQLNOTFOUND)
銆銆{
銆銆break;
銆銆}
銆銆}
銆銆EXEC SQL CLOSE cur_user_fee;
銆銆
銆銆(4)鍔ㄦ丼QL4:瑕佸鐞嗙殑瀛楁鍙婅緭鍏ョ殑瀹夸富鍙橀噺鏁扮洰鍜屼富鍙橀噺鐨勭被鍨嬩簨鍏堟槸涓嶇煡閬撶殑,濡傦細
銆銆INSERT INTO EMP (<unknown> VALUES (<unknown>
銆銆
銆銆鏄渶澶嶆潅鐨勫姩鎬丼QL,寰堝皯鐢?鍦ㄦ涓嶅仛浠嬬粛銆?br />銆銆
銆銆10銆丼QLCA錛歋QL鏄疧RACLE鐨勪竴涓粨鏋勪綋錛屽畠鐨勫煙鐢ㄤ簬鏈榪戠殑涓鏉QL璇彞鎵ц鍚庣殑涓浜涗俊鎭紝濡傞敊璇彿錛岄敊璇弿榪幫紝璀﹀憡錛岀姸鎬佺瓑銆傚父鐢ㄧ殑
銆銆
銆銆鍩熶粙緇嶅涓?
銆銆SQLCA.sqlcode:閿欒鍙?=0姝g‘,=1403娌″彇鍒版暟鎹?br />銆銆SQLCA.sqlserrm.sqlerrmc:閿欒鎻忚堪
銆銆SQLCA.sqlerrd[3]:鏈榪戠殑涓鏉QL璇彞鎵澶勭悊鐨勮鏁?濡傛灉璇ヨ鍙ュ鐞嗗け璐?鍒欏畠鐨勫兼槸涓嶅畾鐨?濡傛灉閿欒鍦ㄤ竴涓狢URSOR鎿嶄綔涓彂鐢?鍒?br />銆銆
銆銆瀹冪殑鍊兼寚宸叉垚鍔熷鐞嗙殑琛屾暟.鍦―ELETE,UPDATE涓?瀹冧笉鍖呭惈鍥犲閿害鏉熻屽垹闄?鏇存柊鐨勯偅浜涜,
銆銆DELETE FROM EMP WHERE DEPT='SALE';
銆銆
銆銆鍦ㄨ〃EMP涓垹闄?0琛?浣嗗鏋滆〃EMP涓庤〃ADDRESS鏈夊閿害鏉?瀵艱嚧琛ˋDDRESS涔熻鍒犻櫎20琛?鍒橲QLCA.sqlerrd[3]=20,鑰屼笉鏄?0銆?
鍘熸枃緗戝潃錛?a >http://oracle.chinaitlab.com/exploiture/38243.html

]]>