1嵌入式SQL
嵌入式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 SQLCA
SQLCODE
存放每次执行SQL语句后返回的代码
主变量:
SQL语句中使用的主语言程序变量简称为主变量。
指示变量
指示变量是一个整型变量,用来指示输入的主变量的值或条件,指示变量可以指示输入主变量是否为空值,可以检测输出主变量是否为空值,值是否被截断,当指示变量值为负值的时候,不管主变量值为多少都认为它是NULL
主变量和指示变量前要加 :。
游标
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录并赋给主变量,交由主语言进一步处理。
链接数据库
EXEC CONNECT TO TARGET[AS connection-name][USER user_name];
关闭数据库
EXEC SQL DISCONNECT [connection];
使用游标的SQL语句
查询结果为多条记录的SELECT语句
- 说明游标
EXEC SQL DECLARE<游标名>CURSOR FOR<select语句>;
- 打开游标
EXEC SQL OPEN<游标名>;
- 推进游标指针并取当前记录
EXEC SQL FETCH<游标名>
INTO <主变量>[<指示变量>]
- 关闭游标
EXEC SQL CLOSE<游标名>