數(shù)據庫shell procc編程實踐v1.0_第1頁
數(shù)據庫shell procc編程實踐v1.0_第2頁
數(shù)據庫shell procc編程實踐v1.0_第3頁
數(shù)據庫shell procc編程實踐v1.0_第4頁
數(shù)據庫shell procc編程實踐v1.0_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Pro*C/C+簡1 Pro*C/C+簡1 在SQL標準中定義了多種語言各個廠商SQL的具體實現(xiàn)不 目的:使c/c+這種高效率語言成為SQL宿主語Pro程(1)用SQL*Plus,它有SQL命令以交互的應用程(2)用第四代語言應用開發(fā)工具開發(fā)的應用程數(shù)據庫,這些工具(3)利用在第三代語言內嵌入的SQL語言或ORACLE庫函數(shù)調用 2 Pro*C 程序實例 #include #includestring.h #includestdlib.h #include2 Pro*C 程序實例 #include #includestring.h #includestdlib.h #includesqlca.

2、hEXECSQLBEGINDECLAREcharusername32; charpassword32; char dname25;EXECSQLENDDECLARESECTION; EXEC SQL INCLUDE sqlca;文解The term embedded SQLrefers to SQLs ements placedwithin an application program. Because it houses the SQLs ements, the application program is called a host program, and the language in

3、 which it is written is called the host language. For ex le, Pro*C/C+ provides the ability to embed certain SQL s ements in a C or C+ host 3 3 EXECSQLWHENEVERSQLERRORDO EXEC SQL CONNECT:username IDENTIFIED BY:password; EXEC SQL select dnameo:dnamefromdeptwhereid=10; f(“dname:%s n”, dname);voidEXECSQ

4、LWHENEVERSQLERRORoracleerrorEXEC SQL ROLLBACK WORK RELEASE;Pro*C Include (c/candSQL 操作語句EXECexceptionEXECSQLCOMMIT/ROLLBACKWORKPROCpile 功能:完成Pro*CPROCpile 功能:完成Pro*CCPROCINAME=filenamend filename (name of the input file) ndfilenamenameoftheoutputfile) -INCLUDE =路徑名 或 INCLUDE =(1,2) PARSE=FULL|PARTIA

5、|NONEdefaultFULLforCOthersforC+) CODE=ANSI_C | CPP (default ansi_c)1、proc2、為什么可以直接找到,oracle用戶下,bash_profilePro*C/C+:Release11.2.0.1.0-ProductiononThuSep1107:59:37Copyright(c)1982,Copyright(c)1982,2009,Oracleand/oritsOptionAllowautomaticconnectiontoops$account Mapof character arrays and stringsClose

6、all cursors on COMMIT CMAXValueforconnectionpoolCMINValueforconnectionCINCRValueforconnection ParseusingCommonSQLFrontEnd The type of code to be generatedcomp_charset multi_byteThecharactersettypetheCcompilersupports Overridesystemconfigurationfilewi nother Support connection poolingOverridethedefau

7、ltC+filenamesuffix SupportDB2arrayinsert/selectsyntax v6/v7/v8 compatibility modedef_sqlcode noGenerate#defineSQLCODEsqlca.sqlcodemacro x86_64 Definea prepro sor symbolSet pin duration for objectshecache Specify Oracle or ANSI Dynamic SQL SemWhethererrormessagesaresenttotheterminal *none*Name of the

8、 list file forype file errorsSupport publish-subscribe event notifications FIPS flagging of ANSIpliant usage Specify file extenpiledHeaders Control holding of cursorshe cursor cache Implicitsavepoprior to buffered insertThe name of the input file DirectorypathsforincludedfilesThenameoftheinputfilefo

9、rtypeinformation Add #line directives to terated code Override default list file nameThe amount of data generatedhe list file umlengthofageneratedstringumnumberofcachedopenmax_row_insert 0umnumbermax_row_insert 0umnumberofrowstobufferoninsert Code conformance to Oracle or ANSI rules Support for nati

10、ve float/doubleSpecifyNationalLanguagecharactervariables ControlhowNLScharactersem s aredone Support object typesThename of theoutputfile ControltheuseoftheCategoryinwhichOutlinesarecreated yes/no/OutlinenameThepagelengthofthelistControlwhichnon-SQLcodeisNumberofrowspre-fetchedatcursorOPEN Controlre

11、leaseofcursorsfromcursorIfyes,createheControl flagging of select errors Amountofcompile-timeSQLchecking Size of sement cache Indicates a multi-threaded application UseOracleorANSItypecodesforDynamicSQL Allow a NULL fetch without indicator variableAusername/passworddbnameconnectstring The character s

12、et form used by UTF16 variables Allow the use of implicit varchar structuresWhich verofanobjectistobereturned PCC-F-02135, CMD-LINE:User asked for help Pro*C/C+開發(fā)基知識點 Pro*C/C+開發(fā)基知識點/1 演示連接數(shù)據庫的幾種方/2 演示通過程序修改用/3 演示連接多個數(shù)據連/通接EXECSQL DECLARElink1EXECSQLCONNECT :userIDENTIFIED BY :oldpswd |:usr_pswAT dbn

13、ame| :host_variable AT dbname| :host_variable USING :connect_string ALTER AUTHORIZATION:newpswd | IN SYSDBA| SYSOPER MODE 方法EXECSQLCONNECT方法EXECSQLCONNECT:username IDENTIFIEDBY:password 方法/* connect to the nondefauatabaseusingdb_name*/ EXEC SQL CONNECT :username IDENTIFIED BY :passwordAT:db_name USI

14、NG/*declareneededhostvariables*/ char username10 = scott; char password10 = tiger; char db_string20 = NYNON;/*givethedatabaseconnectionauniquename*/ EXEC SQL DECLARE DB_NAME DATABASE;/* connect totheatabase EXECSQLCONNECT:usernameIDENTIFIEDBY:password AT DB_NAME USING :db_string;EXECEXECSQLBEGINDECL

15、ARESECTION;*usrname= *passwd =*link1link1; /通過宿主變量指定連接名*serverid= *usrname2= *passwd2= *link2 =*serverid2=orcl; EXEC SQL END DECLARE SECTION;ret =EXEC SQL CONNECT:usrname IDENTIFIED BY:passwdink1 USING:serverid ; if (sqlca.sqlcode != 0)ret =f(第一個用戶連接數(shù)據庫敗sqlca.sqlcodeerr:%dreturn f(第一個用戶連接數(shù)據庫功connect

16、EXEC SQL CONNECT:usrname2 IDENTIFIED BY:passwd2ink2 EXEC SQL CONNECT:usrname2 IDENTIFIED BY:passwd2ink2 USING:serverid2 ; if (sqlca.sqlcode != 0)ret =f(第二個用戶連接數(shù)據庫敗sqlca.sqlcodeerr:%dreturn f(第二個用戶連接數(shù)據庫功connectEXECink1COMMIT if (sqlca.sqlcode!=ret =f(1據庫敗sqlca.sqlcode: err:%dreturn f(1據庫功RELEASEEXECi

17、nk2COMMITif (sqlca.sqlcode!=ret =f(第二個用戶斷開數(shù)據庫敗sqlca.sqlcodeerr:%dreturn f(第二個用戶斷開數(shù)據庫功RELEASEreturn ret /演示使/演示使用連接EXEC SQL DECLARE link1EXECSQLBEGINDECLARESECTION;*usrname= *passwd =*link1 =*serverid= *usrname2= *passwd2= *link2 =*serverid2=orcl; EXEC SQL END DECLARE SECTION;ret =EXECSQLDECLARElink1

18、DATABASE; EXECSQLDECLARElink2 EXEC SQL CONNECT:usrname IDENTIFIED BY:passwdink1 USING:serverid ; if (sqlca.sqlcode != 0)ret =f(第一個用戶連接數(shù)據庫敗sqlca.sqlcodeerr:%dreturn f(第一個用戶連接數(shù)據庫功connectEXEC SQL CONNECT:usrname2 IDENTIFIED BY:passwd2ink2 USING:serverid2 ; if (sqlca.sqlcode != 0)ret =ret =f(第二個用戶連接數(shù)據庫敗

19、sqlca.sqlcodeerr:%dreturn f(第二個用戶連接數(shù)據庫功connectEXECink1COMMITif (sqlca.sqlcode!=ret =f(1據庫敗sqlca.sqlcode: err:%dreturn f(1據庫功RELEASEEXECink2COMMITif (sqlca.sqlcode!=ret =f(2據庫敗sqlca.sqlcode: err:%dreturn f(2據庫功RELEASEreturn ret pro*c語言變量, oraclepro*c語言變量, oraclePro*C程序中,既可在SQL語句,也可在C語句的變量稱為SQL變量N個定長字

20、符數(shù)組 將應用程序的數(shù)據傳遞到數(shù)據庫中cinsalary;EXECSQLupdateempsetsal=:salarywhereempno= 將數(shù)據庫的數(shù)據傳遞到應用程序中floatv_salary; char v_job;EXEC SQL select sal,jobO:v_salary,:v_jobfromempwhereempno=7788; CCODE=CPP可使用er 作為宿主變量,使用前分配空間 chartable_name30; EXECSQLDROPTABLE預編譯選項 CHAR_MAP=CHARZ默認設置0結尾,定長,空格補齊。 CHAR_MAP=CHARF | VARCHA

21、R2:定長,空格補齊。CHAR_MAP=STRING: 01。變長, 不是0ORACEsqlC語言使用ORACEsqlC語言使用C ORACLE 的數(shù)據類型,在數(shù)據傳遞時有一個數(shù)據類型轉換的過ORACLE數(shù)據類2unsignedshortlen; unsignedchararr 主要用在輸出, 即當宿主變量用于接收數(shù)據庫的返回數(shù)據時.通過在宿主變量后用指示變量, NULL. 0Oracle 將數(shù)據庫表列值截斷后賦給指示器變量相關聯(lián)的輸出宿主變量,指示器變量值EXECSQLBEGINDECLAREEXECSQLENDDECLAREEXECSQLSELECTO:desc:ind_descFROMe

22、mpWHEREIf(ind_desccoutdescOracle數(shù)據就是Oracle數(shù)據 CHAR:定長字符串,最大2000 字節(jié) ,s) :數(shù)字類型,pOracle數(shù)據就是Oracle數(shù)據 CHAR:定長字符串,最大2000 字節(jié) ,s) :數(shù)字類型,p精度,s標度 DATE:日期時間數(shù)據,7 字節(jié) BFILE:OS 文件數(shù)據ORACLE1234567年月日時分秒Oracle 外部數(shù)據類型是宿主程序所 的數(shù)據類型,在運行 Pro*C/C+Oracle 外部數(shù)據類型是宿主程序所 的數(shù)據類型,在運行 Pro*C/C+程序的時候,Oracle會根據需要將宿主變量的數(shù)據類型 成 OraclePro*

23、C/C+程序的時Oracle 外部數(shù)據類型來定義宿主變量。STRINGNULL終止的變長字符串 LONG VARRAW:變長二進制 CHARZ:NULL 終止定長字符串 CHARFCHAR的字符數(shù)據類型 SQL數(shù)據類型char32SQL數(shù)據類型char32 1。EXECSQLVARhost_variableIStype_name(length); EXECSQLVARemp_nameISEXECSQLTYPEuser_typeIStype_name(length); typedef struct EXECSQLTYPEgraphicsISVARRAW(4000); typedefchardna

24、meType20; typedef char locType20;Pro*CPro*CPro*CPro*C EXECSQLBEGINDECLARESECTION char B100; EXECSQLENDDECLARE EXECSQLBEGINDECLAREEXECSQLTYPEdnameTypeisstring(20); EXEC SQL TYPE locType is string(20); *usrname = myscott;*passwd = 22; *serverid=EXECSQLENDDECLAREEXECSQLBEGINDECLARE*usrname=scott; *pass

25、wd = tiger; *serverid = orcl;dname210020varchar char EXECSQLENDDECLAREEXECSQLBEGINDECLAREEXECSQLBEGINDECLAREEXECSQLENDDECLAREEXECSQLSELECTO:emp_number,:emp_nameFROMi=0;i100; iEXECSQLSELECTO:emp_numberi,EXECSQLBEGINDECLAREshortind_emp_number100; EXEC SQL END DECLARE SECTION;EXECSQLSELECTO/EXECSQL /EX

26、ECSQL EXECSQLWHENEVER 第一個NOT編譯選MODE=ORACLE第一個NOT編譯選MODE=ORACLEsqlca.sqlcode=編譯選MODE=ANSI sqlca.sqlcode=GOTOlabel_name EXECSQLWHENEVERSQLERROR DOsqlerrEXEC SQL WHENEVER NOT FOUND EXEC SQL WHENEVER OTO EXECSQLWHENEVERSQLERRORCONTINUE; EXEC SQL ROLLBACK RELEASE;EXEC SQL WHENEVER OTO EXECSQLWHENEVERSQLE

27、RRORCONTINUE; EXEC SQL ROLLBACK RELEASE;f(nInvalidusername/passwordn); SQLCA 是ORACLE 提供的兩個通信區(qū)之一SQLCA 是ORACLE 提供的兩個通信區(qū)之一 struct /被初始化唯sqlca,標識SQLchar /SQL 通訊區(qū)的長long /最近執(zhí)行的SQL longsqlcode; sqlerrmc數(shù)組的實際文本長unsignedshort/與sqlcode一致的對應的錯誤信息文/只有當sqlcode0 才能char sqlerrmc70;char sqlerrp8;/sqlerrd2SQL語句處理的行數(shù)

28、,如果SQL執(zhí)行失敗,longsqlerrd6;被沒有where子句的delete,update處理的時候被設char char structsqlca0,1 ,3,50,1 ,3,5當前SQL指令處理的行sqlcode用于保存最近一次運行SQL正4UPDATE和DELETE 例SQLCA應用示voidEXECSQLINCLUDEEXECSQLWHENEVERSQLERRORDoerr_report(structsqlcasqlca) if (sqlca.sqlcode 0)pr f(n%d-%snn,sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc)

29、; 當需要更進一步的信息時,ORACA將幫達成愿望,所以ORACA也可以看作時SQLCA的補充和輔/*text*/char/*ub4 /*ub4/* 0if checkcurcache/*ub4/*0if do DEBUGmode/*ub4/*0if doHeapconsistencycheck/* ub4 */* SQL stmt text flag struct /*ub2 */unsignedshort/*text*/ char orastxt;/* text of last SQL stmt structorastxt;/* text of last SQL stmt struct/*

30、ub2 unsignedshort/*text/*nameoffilecontainingSQL/*ub4/*linenr-within-fileofSQL /*ub4/*highestmaxopenOraCursrequested /*ub4/*maxopenOraCursors/*ub4 /*ub4/*nrofOraCursorre-/*ub4/*nrof /*ub4/*nr of oracaid8 標識一個ORACAoracabc用于保存ORACA orahchf如果oradbgf1,那oracchforastxtf可以是以下各值0不保存SQL 文1僅對SQLERROR保存SQL文2僅對

31、SQLERROR和SQLWARNING保存SQL文3總是保存SQL文orastxt.orastxtl當前SQLorastxtorasfnmc70SQL70字 orasfnm.orasfnmc70字oraslnr標識當前SQLorahoc運行時最多能打開的光標 oracoc當前打開的光標SQL語句分析次SQL語句執(zhí)行的次要使用ORACA,那么就要顯式的加載ORACA結構到Pro*C程序中。可通過語EXECSQLINCLUDEEXECORACLEoracleUE vi注意在oracleUE vi注意在sqlplus通過.bash_profileNLS_LANG sqlplusoracleserve

32、r SQLselectuserenv(language)fromumaskNLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANGProc rhel6.4Proc rhel6.4oracleproc工具預編譯時找不到stddef.h oraclelocalhost admin$ cat pcscfg.cfg UEUE的文件/轉換/ASCIIUTF-8(Unicode 編輯 define= gccgccv,最接近的oraclelocalhost admin$Pro*C/C+:Release11.2.0.1.0-ProductiononWedSep10

33、20:08:132014 Copyright(c)1982,2009,Oracleand/oritsine34,column11infile/usr/include/stdio.h # include PCC-S-02015,unabletoopenincludeine15,column10infile/usr/include/_G_config.h #include PCC-S-02015,unabletoopenincludeine52,column11infile/usr/include/wchar.h # include PCC-S-02015,unabletoopenincludei

34、ne53,column11infile/usr/include/libio.h # include Pro*C/C+操作數(shù)SQL用多個變量或結構(struct )Pro*C/C+操作數(shù)SQL用多個變量或結構(struct )(array)(cursor)charename35; EXECSQLselectO:enamefromCommit, rollback and savepo EXEC SQL commit;EXECSQLcommitworkrelease; EXECSQLrollbackwork數(shù)據定義語句(DDL):create,alter,drop EXEC SQL CREAT TA

35、BLE t1(colaEXEC SQL DROP TABLE t1;對象名, 列名不能用宿主變量Alter:altertableempadd(faxnonumber); yze tableEXEC SQL Select .; EXEC SQL Insert .; EXECSQLupdate.; EXEC SQLDelete .;where emp_no=:empno; cout“thenameis“where emp_no=:empno; cout“thenameis“ename;charv_name31,charv_job21; float v_salary;EXECSQLselectemp

36、_name,job,salary O :v_name,:v_job,:v_salaryFROMWHERE 用結構(struct ) charname10; 輸入:EXEC SQL INSERTOemp(empno,ename,sal) VALUES (:emp_record);輸出: EXEC SQL SELECT empno,ename,salWHERE rownum=1;用結構(struct )操作單行多列可用結構 C 聯(lián)合charname10; emp_record=(structemp_record*)malloc(sizeof(structemp_record); EXEC SQL

37、SELECT empno,ename,salO :emp_recordWHEREret=ret=i=/EXECSQLWHENEVERSQLERRORDO/EXECSQLWHENEVERNOTFOUNDDO(array)INSERT num100;floatsalary100;char/* ARRAYEXECSQLOemp(empno,ename,sal)VALUES(:num,:name,UPDATEDELETE Charname100;float* ARRAYEXECSQLUPDATEEMPSETsal=:salaryWHEREename=:name; Char name100;* ARRA

38、YEXECSQLDELETEFROMempWHERESELECT CharEXEC SQL SELECT enameO:nameFROMemp WHERE dept_num=2;CHAR ARCHAR INDEXSELECTWHEREpr f(npleaseenterpr f(npleaseenterdeptno:); scanf(%d,&deptno);EXEC SQL select deptno, dname, loco :deptno, :dname:dname_ind, :loc:loc_ind from dept where if(sqlca.sqlcode!=ret=pr f(sq

39、lca.sqlcode:err:%dn,sqlca.sqlcode); return ;if(dname_ind=-pr f(dname 為空if(loc_ind= -pr f(loc為空pr f(deptno:%d,dname:%s,loc:%sn,deptno,dname.arr,loc.arr); loc_ind = -1;EXECSQLupdatedeptsetloc=:loc:loc_indwheredeptno=:deptno; if (sqlca.sqlcode != 0)ret=pr f(sqlca.sqlcode:err:%dn,sqlca.sqlcode); return

40、;EXECSQLCOMMIT WORKpr f(return/向表dept2 多條數(shù)returnretEXECSQLEXECSQLDECLAREemp_cursorCURSORselectempno,ename,salfromempwhere打開游EXECSQL OPENemp_cursor(Open cursor: put the select resultsoamemoryplace, and the cursor poo s to therowdata.)提取數(shù)據EXECSQLFETCHO /* 在此處理數(shù)據處理(Afterfetch,cursorpo ermovesdownonelin

41、e. Useloopfor multiplerows)EXECSQLCLOSEOpencursor:puttheoamemory place,andthecursoro storowtypedefchardnameType20; typedef char locType20;EXECSQLBEGIN DECLAREEXECSQLTYPEdnameTypeisstring(20); EXEC SQL TYPE locType is string(20);char *usrname=myscott; char *passwd = 22;char *serverid= EXECSQLENDDECLA

42、REret=i=EXECSQLWHENEVER SQLERRORDO/EXECSQLWHENEVERNOTFOUNDDO/1 定義游標 declare cursor #include #include #include #include sqlca.h#include #include #include #include sqlca.hEXECSQLDECLAREdept_cursorCURSORFOR select deptno, dname, loc from dept;/2 打開游標 open cursor EXECSQLOPENdept_cursor;/3 獲取數(shù)據fetchEXECS

43、QLWHENEVERNOTFOUNDDOwhileEXECSQLFETCHO:deptno,:dname:dname_ind,pr f(條目數(shù):%dt, pr f(%dt%st%s,deptno,dname,loc); if (dname_ind = -1)pr f(dnameisnull if(loc_ind= -pr f(locisnullpr /4 關閉游標 close data EXECSQLCLOSEdept_cursor;EXECSQLCOMMIT WORKpr f(returnreturnretexternsqlgls(charexternsqlgls(char*,size_t*

44、,size_t*externsqlglmt(void*,char*,size_t*,size_t*); voidconnet();voidsqlerr02(); voidchar ret = 0;/出錯時,可以把錯誤SQL語言給打印出EXECSQLWHENEVERSQLERRORret=sqlgls(stm,&stmlen,pr f(出錯的SQL:%.*snstmlen,pr f(出錯原因:%.*snsqlca.sqlerrm.sqlerrml/pr f(出錯原因:%.70snsqlca.sqlerrm.sqlerrmlsqlca.sqlerrm.sqlerrmc); EXEC SQL ROL

45、LBACK WORK RELEASE;voidret=pr f(沒有發(fā)現(xiàn)數(shù)據n); if (sqlca.sqlcode != 0)ret=pr f(sqlca.sqlcode:err:%dn,sqlca.sqlcode); return ;typedefchardnameType20; typedef char locType20;EXECSQLBEGIN DECLAREEXECSQLTYPEdnameTypeisstring(20); EXEC SQL TYPE locType is string(20);char *usrname=myscott; char *passwd = 22;ch

46、ar *serverid= dname;dname;string EXECSQLENDDECLAREret=i=EXECSQLWHENEVER SQLERRORDO/EXECSQLWHENEVERNOTFOUNDDO/1 定義游標 declare cursor EXECSQLDECLAREdept_cursorSCROLL CURSORselectdeptno,dname,locfrom/2 打開游標 open cursor EXECSQLOPENdept_cursor;/3 獲取數(shù)據fetch/while/EXECSQLWHENEVERNOTFOUNDDOEXECSQLFETCHLASTO:

47、deptno,:dname:dname_ind,/pr f(條目數(shù):%dtpr f(%dt%st%sn,deptno,dname,locEXECSQL O:deptno,:dname:dname_ind,/pr f(條目數(shù):%dtpr f(%dt%st%sn,deptno,dname,loc/ 1 2 3 4 5 6 7/查詢第3 條數(shù)EXECSQLFETCHABSOLUTE3O:deptno,:dname:dname_ind,/pr f(條目數(shù):%dtpr f(%dt%st%sn,deptno,dname,loc/查詢相對/查詢相對第3 條數(shù)據就是第6 EXECSQLFETCHRELATIV

48、E3O:deptno,:dname:dname_ind,/pr f(條目數(shù):%dtpr f(%dt%st%sn,deptno,dname,locEXECSQLFETCHNEXTO:deptno,:dname:dname_ind,/pr f(條目數(shù):%dtpr f(%dt%st%sn,deptno,dname,locEXECSQL FETCHPRIOR O:deptno,:dname:dname_ind,/pr f(條目數(shù):%dtpr f(%dt%st%sn,deptno,dname,loc/4 關閉游標 close data EXECSQLCLOSEdept_cursor;EXECSQLCOM

49、MIT WORKpr f(returnreturnretvoidret=EXECSQLCONNECT:usrnameIDENTIFIEDBY:passwdUSING:serverid; if (sqlca.sqlcode != 0)ret=pr f(sqlca.sqlcode:err:%dn,sqlca.sqlcode); return ;pr f(connectPro*C/C+動態(tài) SQL Pro*C/C+動態(tài) SQL 動態(tài)SQL方法1概語法:EXECSQLEXECUTEIMMEDIATE :host_string host_string 字符串/非select 語言,/在sqlplus 上

50、運ret=i =動態(tài)動態(tài)SQL是指在運行pro*c/c+應用程序時,動態(tài)輸入的SQL比較靜態(tài)SQL 和動態(tài)靜態(tài)在編寫應用程序時,使用EXEC SQL 關鍵字直接嵌入的SQL 語句;在proc編譯應用程生成c 語言的時,都已經確動態(tài)在運行應用程序時,由用戶動態(tài)輸入的SQL語句什么時候使用動態(tài)SQL語 TextoftheSQLs ementds,clauses, andsoThenumberofhostThe ypesofhostto database objectch as columns, indexes, sequen,tables, usernames, and views, 0, sizeof( pSql = NULL;EXEC, 0, sizeof( pSql = NULL;EXECSQLWHENEVER SQLERRORDO pSql=/循環(huán)處理sql 語pr f(npleaseentersql(notselect):); 空格截pr pr f(任意鍵繼EXECSQLEXECUTEIMMEDIATEEXECSQLpr f(繼續(xù)執(zhí)行嗎?n); scanf(%c&choosechar); if(choosechar=n|EXECSQLCOMMIT WORKpr f(returnreturnret僅適用于非select 語Delete from emp where e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論