版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實際開發(fā)中的教程第1頁,課件共74頁,創(chuàng)作于2023年2月Points3.宿主變量與指示變量4.嵌入SQL語句5.連接數據庫6.錯誤處理1.PROC簡介7.數據的存取更新操作8.動態(tài)sql2.PROC程序的編寫步驟第2頁,課件共74頁,創(chuàng)作于2023年2月Pro程序通過在過程化編程語言中嵌入SQL語句而開發(fā)出的應用程序稱為Pro程序。在通用編程語言中使用的SQL稱為嵌入式SQL在SQL標準中定義了多種語言的嵌入式SQL各個廠商對嵌入式SQL的具體實現不同宿主語言 Pro程序C/C++ Pro*C/C++FORTRANPro*FORTRANPASCALPro*PASCALCOBOLPro*COBOLPL/I Pro*PL/IAda Pro*Ada第3頁,課件共74頁,創(chuàng)作于2023年2月Pro*C/C++程序在C/C++語言中嵌入SQL語句而開發(fā)出的應用程序稱為Pro*C/C++程序。目的:使c/c++這種高效率語言成為訪問數據庫的工具。第4頁,課件共74頁,創(chuàng)作于2023年2月Pro*C程序實例#include<stdio.h>EXECSQLBEGINDECLARESECTION;charusername[20];charpassword[20];charlast_name[25];EXECSQLENDDECLARESECTION;EXECSQLINCLUDEsqlca;voidsqlerror();main(){EXECSQLWHENEVERSQLERRORDOsqlerror();strcpy(username,"tarena");strcpy(password,"tarena");EXECSQLCONNECT:usernameIDENTIFIEDBY:password;
EXECSQLselectLAST_NAMEinto:last_namefromS_EMPwhereid=2;printf("\nID=2,last_name=%s\n",last_name);}voidsqlerror(){EXECSQLWHENEVERSQLERRORCONTINUE;printf("\n----oracleerrordetected:\n");printf("%.70s\n",sqlca.sqlerrm.sqlerrmc);EXECSQLROLLBACKWORKRELEASE;exit(1);}第5頁,課件共74頁,創(chuàng)作于2023年2月Include頭文件(c/c++andpro*c/c++)定義變量定義函數main
連結數據庫:connect
SQL操作語句:EXECSQL…….; exceptionhandler 斷開連結:EXECSQLCOMMIT/ROLLBACKWORKreleasePROC程序結構第6頁,課件共74頁,創(chuàng)作于2023年2月一般應用程序(C)開發(fā)運行標準流程CodeCompileLinkExecuteSourceProgramObjectProgramExecutableProgram.c文件.o文件可執(zhí)行文件第7頁,課件共74頁,創(chuàng)作于2023年2月%via_1.ca_2.c%gcc–ca_1.ca_2.c%gcc-oaa_1.oa_2.o一般應用程序(C)開發(fā)運行標準流程第8頁,課件共74頁,創(chuàng)作于2023年2月Pro*C程序開發(fā)運行流程.o文件可執(zhí)行文件CodeCompileLinkExecuteSourceProgramObjectProgramExecutableProgram.pc文件PrecompileModifiedSourceProgram.c文件第9頁,課件共74頁,創(chuàng)作于2023年2月完成Pro*C源程序到純C源程序的轉換基本命令格式PROCINAME=filename[OptionName1=value1]…[OptionNameN=valueN]Pro*C預編譯程序第10頁,課件共74頁,創(chuàng)作于2023年2月PROC常用預編譯選項INAME=pathandfilename(nameoftheinputfile)ONAME=pathandfilename(nameoftheoutputfile)INCLUDE=path(頭文件所在路徑)--INCLUDE=路徑名或INCLUDE=(路徑名1,路徑名2)PARSE=FULL|PARTIA|NONE(defaultFULLforC,OthersforC++)CODE=ANSI_C|CPP(defaultansi_c)USERID=username/password第11頁,課件共74頁,創(chuàng)作于2023年2月Pro*C程序開發(fā)運行流程Pro*C程序開發(fā)運行流程%via.pc%proca.pc%gcc-oaa.c-lclntsh--ComparePro*Candit’sCcode第12頁,課件共74頁,創(chuàng)作于2023年2月Pro*C++預編譯程序Pre-compile:procmyf.pconame=myf.cppparse=nonecode=cpp2.Compile:g++-omyfilemyfile.cpp–lclntsh3.Execute: myfile#include<iostream>Usingnamespacestd;EXECSQLBEGINDECLARESECTION;charuser_passwd[20];EXECSQLENDDECLARESECTION;EXECSQlincludesqlca;main(){EXECSQLWHENEVERSQLERRORstop;strcpy(user_passwd,"tarena/tarena");EXECSQLCONNECT:user_passwd;cout<<"ConnectedtoORACLEasuser“<<,user_passwd;}第13頁,課件共74頁,創(chuàng)作于2023年2月宿主變量宿主變量是一種pro*c語言變量,用于在應用程序中和oracle數據庫之間傳遞數據。Pro*C程序中,既可在SQL語句中引用,也可在C語句中引用的變量稱為SQL變量。C語言語句群SQL語言語句群宿主變量第14頁,課件共74頁,創(chuàng)作于2023年2月宿主變量的數據類型數據類型 描述char 單字符char[n] N個定長字符數組int 整數short 短整數long 長整數float 單精度浮點數double 雙精度浮點數VARCHAR[n] 變長字符串第15頁,課件共74頁,創(chuàng)作于2023年2月宿主變量的使用輸入---將應用程序的數據傳遞到數據庫中。
intsalary,emp_number;cin>>salary;cin>>emp_number; EXECSQLupdateempsetsal=:salarywhereempno=:emp_number;輸出---將數據庫的數據傳遞到應用程序中。
floatv_salary; charv_job;EXECSQLselectsal,jobINTO:v_salary,:v_jobfromempwhereempno=7788; cout<<v_salary<<v_job;第16頁,課件共74頁,創(chuàng)作于2023年2月處理字符數據
預編譯選項CHAR_MAP CHAR_MAP=CHARZ(默認設置):'\0'結尾,定長,空格補齊。 CHAR_MAP=CHARF|VARCHAR2:定長,空格補齊。 CHAR_MAP=STRING: '\0'結尾,變長。當'\0'結尾,宿主變量長度要大于實際數據長度。VARCHAR 1.變長,不是'\0'結尾。 2.Struct{ unsignedshortlen; unsignedchararr[] }variable_name;第17頁,課件共74頁,創(chuàng)作于2023年2月使用宿主變量的注意事項其申明語法與普通C變量一致,但在CODE=CPP或MODE=ANSI
時變量必須放在申明區(qū).可使用pointer作為宿主變量,使用前分配空間。
在DDL語句中不能用宿主變量。錯誤例子:
chartable_name[30]; cin>>table_name; EXECSQLDROPTABLE:table_name;第18頁,課件共74頁,創(chuàng)作于2023年2月指示變量指示變量(indicatorvariable)短整型變量,用于處理數據庫的NULL值,監(jiān)督和管理與其相關聯的宿主變量。引用語法:
:host_variableINDICATOR:indicator_variable OR :host_variable:indicator_variable第19頁,課件共74頁,創(chuàng)作于2023年2月指示變量的作用主要用在輸出,即當宿主變量用于接收數據庫的返回數據時。通過在宿主變量后用指示變量,檢測是否返回了NULL。-1:數據庫表列的值為NULL,指示變量相關聯的輸出宿主變量值不確定=0:Oracle將數據庫表列值原封不動的賦給指示器變量相關聯的輸出宿主變量0:Oracle將數據庫表列值截斷后賦給指示器變量相關聯的輸出宿主變量,指示器變量值為該列值的原始長度第20頁,課件共74頁,創(chuàng)作于2023年2月指示變量例子EXECSQLBEGINDECLARESECTION; intm_id;shortind_m_id;EXECSQLENDDECLARESECTION;…EXECSQLSELECTmanager_idINTO:m_id:ind_m_idFROMs_empWHEREid=1;If(ind_m_id==-1)cout<<“emp_descisNULL”<<endl;elsecout<<m_id<<endl;第21頁,課件共74頁,創(chuàng)作于2023年2月數組變量Pro*C只支持一維數組Pro*C不支持數組指針Pro*C所支持數組最大維數是32767,超出此限制將報錯示例 EXECSQLBEGINDECLARESECTION; intA[100]; charB[100]; charC[100][15]; EXECSQLENDDECLARESECTION;第22頁,課件共74頁,創(chuàng)作于2023年2月數組變量在SQL語句中使用數組變量,只需給出:和變量名稱,不要給下標。示例 EXECSQLBEGINDECLARESECTION; intemp_number[100]; charemp_name[100][15]; EXECSQLENDDECLARESECTION;
EXECSQLSELECTnumber,nameINTO:emp_number,:emp_nameFROMemp;第23頁,課件共74頁,創(chuàng)作于2023年2月數組變量錯誤的例子:
for(inti=0;i<100;i++){ EXECSQLSELECTnumber,nameINTO:emp_number[i],:emp_name[i];}指示器數組例子:
EXECSQLBEGINDECLARESECTION; intemp_number[100]; charemp_name[100][15]; shortind_emp_number[100]; EXECSQLENDDECLARESECTION; … EXECSQLSELECTnumber,nameINTO:emp_number:ind_emp_number,:emp_name;第24頁,課件共74頁,創(chuàng)作于2023年2月通信區(qū)說明(SQLCA)SQLCA是ORACLE提供的兩個通信區(qū)之一。SQLCA實際上是一個結構變量,其目的是為了診斷錯誤和事件處理結果。SQLCA的結構 structsqlca{ /*ub1*/charsqlcaid[8]; /*b4*/intsqlabc; /*b4*/intsqlcode; struct{ /*ub2*/unsignedshortsqlerrml; /*ub1*/charsqlerrmc[70];}sqlerrm; /*ub1*/charsqlerrp[8]; /*b4*/intsqlerrd[6]; /*ub1*/charsqlwarn[8]; /*ub1*/charsqlext[8];};第25頁,課件共74頁,創(chuàng)作于2023年2月通信區(qū)說明(SQLCA)sqlcaid[8]用于標識一個SQLCAsqlabc用于保存SQLCA的長度sqlcode用于保存最近一次運行SQL指令的狀態(tài)
0 - 正常
>0 - 有一個異常發(fā)生
<0 - 系統錯誤,可能來自網絡,或數據庫本身sqlerrm.sqlerrml保存錯誤文本信息的長度sqlerrm.sqlerrmc保存錯誤文本信息,最長為70個字符sqlerrp系統保留sqlerrd[6] 0,1 ,3,5-系統保留
2 -當前SQL指令處理的行數
4 -保存相對位移,指出在什么地方出現語法錯誤第26頁,課件共74頁,創(chuàng)作于2023年2月通信區(qū)說明(SQLCA)sqlwarn[8] 0-指示是否設置了警告標志
1-指示是否將字符結果返回給宿主變量時,數據截短了
3-如果查詢時,返回的列數和指定的宿主數組變量的維數不等時設置該位
4-UPDATE和DELETE時沒有行被處理,設置改標志位
5-當EXECSQLCREATE{PROCEDURE|FUNCTION|PACKAGE|PACKAGEBODY}失敗時,設置該位
2,6,7-系統保留sqlext[8]系統保留第27頁,課件共74頁,創(chuàng)作于2023年2月intmain(){ … EXECSQLINCLUDEsqlca; … EXECSQLWHENEVERSQLERRORDoerr_report(sqlca); … }voiderr_report(structsqlcasqlca){ if(sqlca.sqlcode<0) printf("\n%d%s\n\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc); exit(1); }SQLCA應用實例第28頁,課件共74頁,創(chuàng)作于2023年2月通信區(qū)說明(ORACA)當需要更進一步的信息時,ORACA將幫助我們達成愿望,所以ORACA也可以看作時SQLCA的補充和輔助。第29頁,課件共74頁,創(chuàng)作于2023年2月通信區(qū)說明(ORACA)structoraca{ /*text*/charoracaid[8];/*Reserved*/ /*ub4*/intoracabc;/*Reserved*/ /*ub4*/intoracchf;/*<>0if"checkcurcacheconsistncy"*/ /*ub4*/intoradbgf;/*<>0if"doDEBUGmodechecking"*/ /*ub4*/intorahchf;/*<>0if"doHeapconsistencycheck"*/ /*ub4*/intorastxtf;/*SQLstmttextflag*/ struct{ /*ub2*/unsignedshortorastxtl; /*text*/charorastxtc[70]; }orastxt;/*textoflastSQLstmt*/ struct{ /*ub2*/unsignedshortorasfnml; /*text*/charorasfnmc[70]; }orasfnm;/*nameoffilecontainingSQLstmt*/ /*ub4*/intoraslnr;/*linenr-within-fileofSQLstmt*/ /*ub4*/intorahoc;/*highestmaxopenOraCursrequested*/ /*ub4*/intoramoc;/*maxopenOraCursorsrequired*/ /*ub4*/intoracoc;/*currentOraCursorsopen*/ /*ub4*/intoranor;/*nrofOraCursorre-assignments*/ /*ub4*/intoranpr;/*nrofparses*/ /*ub4*/intoranex;/*nrofexecutes*/ };第30頁,課件共74頁,創(chuàng)作于2023年2月通信區(qū)說明(ORACA)oracaid[8]標識一個ORACA通信區(qū)oracabc用于保存ORACA通信區(qū)的長度oradbgf調試標志,0-關閉,1-開啟oracchf如果oradbgf=1,那oracchf遵循下列規(guī)則:
0-禁止光標緩沖一致性檢查
1-進行光標緩沖一致性檢查orahchf如果oradbgf=1,那oracchf遵循下列規(guī)則:
0-禁止堆緩沖一致性檢查
1-進行堆緩沖一致性檢查orastxtf可以是以下各值:
0-不保存SQL文本
1-僅對SQLERROR保存SQL文本
2-僅對SQLERROR和SQLWARNING保存SQL文本
3-總是保存SQL文本第31頁,課件共74頁,創(chuàng)作于2023年2月通信區(qū)說明(ORACA)要使用ORACA,那么就要顯式的加載ORACA結構到Pro*C程序中??赏ㄟ^語句
EXECSQLINCLUDEoraca; EXECORACLEOPTION(ORACA=YES);
實現。第32頁,課件共74頁,創(chuàng)作于2023年2月嵌入SQL語句EXECSQLINSERTdept(1,‘人事部’,‘中鼎大廈7層’);EXECSQLsql-statement;形式:示例:單個SQL語句的嵌入語法第33頁,課件共74頁,創(chuàng)作于2023年2月嵌入事務控制語句事務控制語句Commit,rollbackandsavepoint.EXECSQLcommit;EXECSQLcommitworkrelease;EXECSQLrollbackworkrelease;第34頁,課件共74頁,創(chuàng)作于2023年2月嵌入事務控制語句…EXECSQLSAVEPOINTsavepoint_insert;for(i=1;i<100;i++){getInput1(empName,&salary);EXECSQLWHENEVERSQLERRORGOTOinsert_error;EXECSQLINSERTINTOemp(ename,sal)VALUES(:empName,:salary);}…EXECSQLSAVEPOINTsavepoint_delete;for(i=1;i<100;i++){getInput2(&deptNo);EXECSQLWHENEVERSQLERRORGOTOdelete_error;EXECSQLDELETEFROMempWHEREdeptno=:deptNo;}…delete_error:EXECSQLWHENEVERSQLERRORCONTINUE;EXECSQLROLLBACKTOSAVEPOINTsavepoint_delete;…insert_error:EXECSQLWHENEVERSQLERRORCONTINUE;EXECSQLROLLBACKTOSAVEPOINTsavepoint_insert;…第35頁,課件共74頁,創(chuàng)作于2023年2月數據操作語句(DML)語句列表EXECSQLSelect…….;EXECSQLInsert…….;EXECSQLupdate…….;EXECSQLDelete…….;嵌入DML語句第36頁,課件共74頁,創(chuàng)作于2023年2月數據定義語句(DDL):create,alter,dropExample:EXECSQLCREATTABLEt1(colaint);EXECSQLDROPTABLEt1;EXECSQLALTERTABLEt1add(faxnonumber);對象名,列名不能用宿主變量.自動提交事務嵌入DDL語句第37頁,課件共74頁,創(chuàng)作于2023年2月嵌入PL/SQL語句PL/SQL的嵌入語法/********************************/EXECSQLEXECUTEBEGIN /*PL/SQLBLOCK*/END;END-EXEC;/*******************************/形式:第38頁,課件共74頁,創(chuàng)作于2023年2月嵌入PL/SQL的語法PL/SQL的嵌入—匿名塊(anonymousblocks)/*--------------beginPL/SQLblock-----------------*/EXECSQLEXECUTEBEGIN SELECTjob,hiredate,salINTO:job_title,:hire_date,:salaryFROMemp WHEREempno=:emp_number;
DELETEfromemp whereempno=:emp_number; ……END;END-EXEC;/*--------------endPL/SQLblock-----------------*/第39頁,課件共74頁,創(chuàng)作于2023年2月調用PL/SQL語句PL/SQL的嵌入—package,procedure,functionEXECSQLEXECUTEBEGIN emp_action.raise_salary(:empNo,:increase);END;END-EXEC;Createorreplacepackageemp_actionisprocedureraise_salary(empNOnumber,increasenumber); …Endemp_action;PL/SQL程序:Pro*C程序:第40頁,課件共74頁,創(chuàng)作于2023年2月先有連結,后才能訪問數據庫.連結的方法:
連結本地或遠程數據庫 連結一個或多個數據庫連接數據庫第41頁,課件共74頁,創(chuàng)作于2023年2月EXECSQLCONNECT{:userIDENTIFIEDBY:pswd|:usr_psw}[[AT{dbname|:host_variable}]USING:connect_string][ALTERAUTHORIZATION:newpswd];Connect語法形式第42頁,課件共74頁,創(chuàng)作于2023年2月連接本地數據庫本地:客戶應用程序與oracleserver在同一臺機器上.方式一:用戶名口令由兩個獨立變量存儲CharuserName[20]=“scott”;CharuserPwd[20]=“tiger”;EXECSQLCONNECT:userNameIDENTIFIEDBY:userPwd;Charuname_pwd[40]=“scott/tiger”;EXECSQLCONNECT:uname_pwd;方式二:用戶名口令由單個變量存儲第43頁,課件共74頁,創(chuàng)作于2023年2月連接遠端數據庫遠端:客戶應用程序與oracleserver不在同一臺機器上.charuserPwd[20]=“scott/tiger”;chardbString[20]=“remoteDB”;EXECSQLCONNECT:userPwdUsing:dbString;remoteDB是網絡服務名,在$ORACLE_HOME/network/admin/tnsnames.ora文件中定義.連接方式:第44頁,課件共74頁,創(chuàng)作于2023年2月使用數據庫鏈訪問遠端數據庫Charname[25]=“scottsmith”;/***修改本地數據庫區(qū)**/EXECSQLupdateempsetsal=:salarywhereename=:name;/***修改遠端數據庫區(qū)**/EXECSQLupdateemp@myLinksetsal=:salarywhereename=:name;EXECSQLcommitworkrelease;CREATEDATABASELINKmyLinkCONNECTTOtarenaIDENTIFIEDBYtarenaUsing‘tlab1’;用SQLPLUS創(chuàng)建數據庫鏈接:第45頁,課件共74頁,創(chuàng)作于2023年2月連接多個數據庫應用程序遠端數據庫ORA1遠端數據庫ORA2遠端數據庫ORA3本地數據庫ORA0Net8一個程序同時連接多個數據庫或者建立多個連接到同一個數據庫第46頁,課件共74頁,創(chuàng)作于2023年2月連接多個數據庫charuser1[10]="scott/tiger",db1[10]="ora1“,dbString1[20]=“oracle1”;charuser2[10]="scott/tiger“,db2[10]="ora2“,dbString2[20]=“oracle2”;/*********************************/EXECSQLCONNECT:user1AT:db1Using:dbString1;EXECSQLCONNECT:user2AT:db2Using:dbString2;Charname[25]=“scottsmith”;/***修改db1數據庫區(qū)**/EXECSQLAT:db1updateempsetsal=:salarywhereename=:name;/***修改db2數據庫區(qū)**/EXECSQLAT:db2updateempsetsal=:salarywhereename=:name;EXECSQLAT:db1commitworkrelease;EXECSQLAT:db2commitworkrelease;第47頁,課件共74頁,創(chuàng)作于2023年2月使用數據庫鏈訪問遠端數據庫應用程序Net8遠端數據庫ORA2遠端數據庫ORA1數據庫鏈是在本地數據庫和遠端數據庫之間的一種指針.使用它可以在不同數據庫的SQL語句和事務之間建立關聯關系。第48頁,課件共74頁,創(chuàng)作于2023年2月SQLCA與錯誤處理為了給用戶和開發(fā)人員提供oracleerrormessage,Oracle建議使用SQL通訊區(qū)(SQLCA).
SQLCAisaCstruct,紀錄每個當前SQL語句的執(zhí)行狀態(tài),以便進行錯誤診斷和事件處理。#include<sqlca.h> OR EXECSQLINCLUDESQLCA;
第49頁,課件共74頁,創(chuàng)作于2023年2月SQLCA通訊區(qū)SQLCA的信息結構structsqlca{charsqlcaid[8];longsqlcabc;longsqlcode;struct{ unsignedshortsqlerrml; char sqlerrmc[70];}sqlerrm;charsqlerrp[8];longsqlerrd[6];charsqlwarn[8];charsqlext[8];};第50頁,課件共74頁,創(chuàng)作于2023年2月WHENEVER語句檢測并處理sql語句錯誤。語法: EXECSQLWHENEVER<condition><action> condition:SQLWARNING,SQLERROR,NOTFOUND. action:CONTINUE,DO,GOTO,STOP,BREAKExample: EXECSQLWHENEVERSQLWARNINGCONTINUE; EXECSQLWHENEVERSQLERRORDOsqlerror(); EXECSQLWHENEVERNOTFOUNDDOnotfound();
第51頁,課件共74頁,創(chuàng)作于2023年2月WHENEVER語句的管轄范圍自動檢查所有后面的SQLstatements.一般放在BeforefirstSQLstatement.IfusingmorethanoneWHENEVER,只有最近的WHENEVER
起作用。
第52頁,課件共74頁,創(chuàng)作于2023年2月一般的錯誤處理方法用WHENEVER檢查sql語句錯誤用SQLCA描述錯誤Rollback所有的操作,release資源.第53頁,課件共74頁,創(chuàng)作于2023年2月錯誤處理實例...voidsqlerror();Main(){ EXECSQLWHENEVERSQLERRORDOsqlerror(); EXECSQLCONNECT:usernameIDENTIFIEDBY:password; EXECSQLupdateempsetcomission=200whereemp_no=2;…..}voidsqlerror(){EXECSQLWHENEVERSQLERRORCONTINUE;cout<<"\n----oracleerrordetected:"<<sqlca.sqlerrm.sqlerrmc;EXECSQLROLLBACKWORKRELEASE;exit(1);}第54頁,課件共74頁,創(chuàng)作于2023年2月用單個變量操作單行單列用多個變量或結構(struct)操作單行多列用數組(array)或游標(cursor)操作多行多列數據的存取更新操作第55頁,課件共74頁,創(chuàng)作于2023年2月用單個變量操作單行單列
charename[35]; intempno=20; EXECSQLselectemp_nameINTO:enamefromemp whereemp_no=:empno; cout<<“thenameis“<<ename;注意事項:字符串長度定義指示變量的運用
第56頁,課件共74頁,創(chuàng)作于2023年2月charv_name[31],charv_job[21];floatv_salary;intempno=20; EXECSQLselectemp_name,job,salary INTO:v_name,:v_job,:v_salary FROMemp WHEREemp_no=:empno; cout<<v_name<<v_job<<v_salary;注意事項:變量順序與字段名一至用多個變量操作單行多列第57頁,課件共74頁,創(chuàng)作于2023年2月宿主結構是指包含多個宿主變量的C語言結構,以此可簡化單行多列操作。Struct{ int no; char name[10]; int salary; }emp_record;輸入:EXECSQLINSERTINTOemp(empno,ename,sal) VALUES(:emp_record);輸出:EXECSQLSELECTempno,ename,salINTO:emp_record WHERErownum=1;用結構(struct)操作單行多列第58頁,課件共74頁,創(chuàng)作于2023年2月注意事項:可用結構pointer,但要分配空間。結構成員的數據類型,順序必須與SQL語句一至。不能用嵌套的結構。不能用C聯合(UNION)用結構(struct)操作單行多列第59頁,課件共74頁,創(chuàng)作于2023年2月目的:降低網絡開銷,提高程序性能。數組和INSERT語句:intnum[100];floatsalary[100];charname[100][25];/**在此為ARRAY賦值**/EXECSQLINSERTINTOemp(empno,ename,sal)VALUES(:num,:name,:salary);用數組(array)操作多行多列第60頁,課件共74頁,創(chuàng)作于2023年2月用數組(array)操作多行多列數組和UPDATE/DELETE語句Charname[100];floatsalary[100];……../**在此為ARRAY賦值**/EXECSQLUPDATEEMPSETsal=:salaryWHEREename=:name;Charname[100];……../**在此為ARRAY賦值**/EXECSQLDELETEFROMempWHEREename=:name;第61頁,課件共74頁,創(chuàng)作于2023年2月用數組(array)操作多行多列數組和SELECT語句Charname[100][25];EXECSQLSELECTenameINTO:nameFROMemp WHEREdept_num=2;For(intj=0;j<sqlca.sqlerrd[2];j++) cout<<“Emp_name”<<name[j]<<endl;第62頁,課件共74頁,創(chuàng)作于2023年2月用數組(array)操作多行多列注意事項:只有CHAR和VARCHAR可為二維數組。如數組INDEX不同,按最小操作。在SELECT語句的WHERE子句中,不能用數組。數組元素最大值:32767第63頁,課件共74頁,創(chuàng)作于2023年2月使用非滾動游標1。定義游標
EXECSQLDECLAREemp_cursorCURSORFOR selectempno,ename,salfromempwheredeptno=10;2.打開游標
EXECSQLOPENemp_cursor;(Opencursor:puttheselectresultsintoamemoryplace,andthecursorpointerpointstothefirstrowdata.)3.提取游標
EXECSQLFETCHemp_cursorINTO:empnum,:name:salary; /**在此處理數據處理**/ (Afterfetch,cursorpointermovesdownoneline.Useloopformultiplerows)4.EXECSQLCLOSEemp_cursor;第64頁,課件共74頁,創(chuàng)作于2023年2月使用非滾動游標范例…intdept_number,emp_name;floatcommission;…EXECSQLDECLAREemp_cursorCURSORFOR SELECTempname,commFROMEMPWHEREdeptno=:dept_number;EXECSQLOPENemp_cursor;for(;;){ EXECSQLWHENEVERNOTFOUNDDObreak; EXECSQLFETCHemp_cursorINTO:emp_name,:commission; if(commission<1)cout<<emp_name<<“先生,請加油“;
}EXECSQLCLOSEemp_cursor;…第65頁,課件共74頁,創(chuàng)作于2023年2月使用滾動游標1.定義游標EXECSQLDECLAREemp_cursorSCROLLCURSORFORselectempno,ename,salfromempwheredeptno=10;2.打開游標EXECSQLOPENemp_cursor;3.提取游標EXECSQLFETCHFIRSTemp_cursorINTO:empnum,:name:salary;
options:PRIOR(當前行的前一行),NEXT(當前行的下一行),CURRENT(當前行),RELATIVEn(n為付/正,當前行的前/后n行),ABSOLUTEn(游標中的第n行),LAST。4.EXECSQLCLOSEemp_cursor;第66頁,課件共74頁,創(chuàng)作于2023年2月動態(tài)SQL動態(tài)SQL是指在運行pro*c/c++應用程序時,動態(tài)輸入的SQL語句。目的:加強應用程序的功能和靈活性。比較靜態(tài)SQL和動態(tài)SQL: 靜態(tài)SQL----在編寫應用程序時,使用EXECSQL關鍵字直接嵌入的SQL語句; 動態(tài)SQL----在運行應用程序時,由用戶動態(tài)輸入的SQL語句。什么時候使用動態(tài)SQL語句SQL語句的文本(命令,子句等)不確定宿主變量個數不確定宿主變量的數據類型不確定引用的數據庫對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《大學物理(上冊)》課件-第1章
- 2025-2030全球車輛燃油油位計行業(yè)調研及趨勢分析報告
- 2025-2030全球電積銅行業(yè)調研及趨勢分析報告
- 2025年全球及中國直接空氣捕獲和儲存(DACS)行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球多層土壤傳感器行業(yè)調研及趨勢分析報告
- 2025年全球及中國阻燃塑料薄膜和片材行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球醫(yī)用手指康復訓練儀行業(yè)調研及趨勢分析報告
- 2025-2030全球化學谷物熏蒸劑行業(yè)調研及趨勢分析報告
- 2025年全球及中國智慧教育公共服務平臺行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國工業(yè)膠囊填充設備行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年度院感管理工作計劃(后附表格版)
- 勵志課件-如何做好本職工作
- 化肥銷售工作計劃
- 2024浙江華數廣電網絡股份限公司招聘精英18人易考易錯模擬試題(共500題)試卷后附參考答案
- 2024年山東省濟南市中考英語試題卷(含答案解析)
- 2024年社區(qū)警務規(guī)范考試題庫
- 2025中考英語作文預測:19個熱點話題及范文
- 第10講 牛頓運動定律的綜合應用(一)(講義)(解析版)-2025年高考物理一輪復習講練測(新教材新高考)
- 靜脈治療護理技術操作標準(2023版)解讀 2
- 2024年全國各地中考試題分類匯編(一):現代文閱讀含答案
- GB/T 30306-2024家用和類似用途飲用水處理濾芯
評論
0/150
提交評論