嵌入式SQL是指将SQL语言嵌入到程序设计语言中,被嵌入得程序设计语言如C、C++、java等称为宿主语言
预编译:由数据库管理系统得预处理程序队源程序进行扫描,识别出嵌入式SQL语句,把它们转换成主语言调用语句。
SQLCODE:存放每次执行SQL语句后返回的代码
简单得嵌入式SQL编程实例
EXEC SQL BEGIN DECLARE SECTION; char hsno[9]; char hsname[20]; char hssex[2]; int HSage; int NEWAGE; EXEC SQL END DECLARE SECTION; long SQLCODE; EXEC SQL INCLUDE SQLCODE int main(void) { int count 0; char yn; printf("please choose the department name(CS/MA/IS)"); scanf("%s",deptname); EXEC SQL CONNECT TO TEST@localhost:54321 USER "SYSTEM"/"MANAGER"; EXEC SQL DECLARE SX CURSOR FOR SELECT Sno,Sname,Ssex,Sage FROM Student WHERE SDept=:deptname; EXEC SQL OPEN SX; for(;;) {EXEC SQL FETCH SX INTO :Hsno,:HSname;:HSsex,:HSage; if(SQLCA.SQLCODE!=0) break; if(count++=0) printf("\n%-10s%-20s-10s%-10s%","Sno","Sname","Ssex","Sage"); print("-10s%-20s-10s%-10s%d\n",HSno,HSname,HSsex,HSage); printf("UPDATEAGE(y/n)?"); do{scanf("%c",&yn);} while(yn!'N'&&yn!='n'&&yn!='Y'&&yn!='y') if(yn=='y'||yn=='Y') {printf("INPUT NEW AGE:"); scanf("%d",&NEWAGE); EXEC SQL UPDATE Student SET Sage=:NEWAGE WHERE CURRENT OF SX; } EXEC SQL CLOSE SX; EXEC SQL COMMIT WORK; EXEC SQL DISCONNECT TEST; }当查询得出的某个数据项为空值时,系统自动将相应住变量后面得指示变量置为负值,而不再向该主变量赋值
SQL通信区
EXEC SQL INCLUDE SQLCASQLCODE
存放每次执行SQL语句后返回的代码
主变量:
SQL语句中使用的主语言程序变量简称为主变量。
指示变量
指示变量是一个整型变量,用来指示输入的主变量的值或条件,指示变量可以指示输入主变量是否为空值,可以检测输出主变量是否为空值,值是否被截断,当指示变量值为负值的时候,不管主变量值为多少都认为它是NULL
主变量和指示变量前要加 :。 游标
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录并赋给主变量,交由主语言进一步处理。
链接数据库
EXEC CONNECT TO TARGET[AS connection-name][USER user_name];
关闭数据库
EXEC SQL DISCONNECT [connection];
EXEC SQL DECLARE<游标名>CURSOR FOR<select语句>;
打开游标EXEC SQL OPEN<游标名>;
推进游标指针并取当前记录EXEC SQL FETCH<游标名> INTO <主变量>[<指示变量>]
关闭游标EXEC SQL CLOSE<游标名>