返回单行的Se语句 void printageo f EXEC SQL BEGIN DECLARE SECTION int eage, float esal: char empname 6 char SQlstate[6; EXEC SQL END DECLARE SECTION /程序读入要查询的职工姓名读入值 放到变量 empname 中) EXEC SQL SELECT age, sal INTO eage, esal FROM emp Where ename=:empname i IF SQLSTATE ==00000
返回单行的select语句 void printage() { EXEC SQL BEGIN DECLARE SECTION ; int eage; float esal; char empname[6] ; char SQLSTATE[6] ; EXEC SQL END DECLARE SECTION ; /* 程序读入要查询的职工姓名(读入值 放到变量empname中)*/ EXEC SQL SELECT age,sal INTO :eage , :esal FROM emp WHERE ename=:empname ; IF SQLSTATE == '00000' …
使用Se返回结果的更一般方法一光标 ①定义光标 EXEC SQL DECLARE<光标名> CURSOR FOR 查询语句 该语句属说明语句,其核心是定义了一个光标标识 名和一个查询语句。 ②打开光 EXEC SQL OPEN<光标名 该语句实际上是执行了光标定义中的查询语句,查 询结果(结果关系)存放在光标区中。该语句为 访问光标区中的第一个元组做好了准备
使用select返回结果的更一般方法-光标 ① 定义光标 EXEC SQL DECLARE <光标名> CURSOR FOR <查询语句> 该语句属说明语句,其核心是定义了一个光标标识 名和一个查询语句。 ② 打开光标 EXEC SQL OPEN <光标名> 该语句实际上是执行了光标定义中的查询语句,查 询结果(结果关系)存放在光标区中。该语句为 访问光标区中的第一个元组做好了准备
使用Se返回结果的更一般方法一光标 ③读光标区中的当前元组 EXEC SQL FETCH FROM<光标名>INTO<变量 列表 该语句读取光标区中下一个元组的值,并将它的 各分量依次赋值给指定的共享变量。 如果光标区的元组已经读完,那么系统变量 SQLSTATE的值被设为‘02000,意为“ no tuple found。 ④关闭光杉 EXEC SQL CLOSE<光标名
使用select返回结果的更一般方法-光标 ③ 读光标区中的当前元组 EXEC SQL FETCH FROM <光标名> INTO <变量 列表> 该语句读取光标区中下一个元组的值,并将它的 各分量依次赋值给指定的共享变量。 如果光标区的元组已经读完,那么系统变量 SQLSTATE的值被设为‘02000’,意为“no tuple found”。 ④ 关闭光标 EXEC SQL CLOSE <光标名>
光标应用例一返回多行的S|et 例:上级部门为职工普调工资,调资的办法是:从 最低工资调起,每人长10%,但工资总额不能超 过50万元。程序代码如下: void addsalaryo LEXEC SQL BEGIN DECLARE SECTION char empnob3], sqlstate[6 float s sal. e sal EXEC SQL END DECLARE SECTION EXEC SQL DECLARE CI CURSOR FOR SELECT eno, sal FROM emp OrDER BY sal ASC
光标应用例-返回多行的select 例:上级部门为职工普调工资,调资的办法是:从 最低工资调起,每人长10%,但工资总额不能超 过50万元。程序代码如下: void addsalary() { EXEC SQL BEGIN DECLARE SECTION; char empno[3] , SQLSTATE[6]; float s_sal, e_sal ; EXEC SQL END DECLARE SECTION ; EXEC SQL DECLARE c1 CURSOR FOR SELECT eno,sal FROM emp ORDER BY sal ASC ;
光标应用例一返回多行的Sect EXEC SQL OPEN cl EXEC SQL SELECT SUM(Sal) into s sal from emp while(s sal < 500000.00) EXEC SQL FETCH FROM CI INTO: e sno, e sal f( SQLSTATE=02000) BREAK;/读完职工记录, 退出循环* EXEC SQL UPDATE emp SET sal=sal* 1.1 WHERE eno= e eno s sa s sal +e sal i 0.1 EXEC SQL CLOSE CI
光标应用例-返回多行的select EXEC SQL OPEN c1 ; EXEC SQL SELECT SUM(sal) into :s_sal from emp ; while (s_sal < 500000.00) { EXEC SQL FETCH FROM c1 INTO :e_sno , :e_sal ; if(SQLSTATE=='02000') BREAK ; /*读完职工记录, 退出循环*/ EXEC SQL UPDATE emp SET sal=sal*1.1 WHERE eno=:e_eno; s_sal = s_sal + e_sal * 0.1 ; }; EXEC SQL CLOSE c1 ; }