版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课间休息,注意时间,第八章 数据库编程 8.1 嵌入式 SQL,8.1.1 嵌入式SQL的处理过程 在嵌入式SQL中, 为了能够区分SQL语句与主语言语句,所有SQL语句都必须加前缀EXEC SQL。 SQL语句的结束标志则随主语言的不同而不同.,例如,在PL/1和C中以分号“;”结束: EXEC SQL ;,在COBOL中以END-EXEC结束: EXEC SQL END-EXEC,例如一条交互式的SQL语句: DROP TABLE Student; 嵌入到C程序中,应写作: EXEC SQL DROP TABLE Student;,8.1.2 嵌入式SQL语句与主语言之间的通信 数据库工作
2、单元与源程序工作单元之间的通信主要有: (1).向主语言传递SQL语句的执行状态信息. (2).主语句向SQL语句提供参数. (3).将SQL语句查询数据库的结果交主语言处理.,一、SQL通信区 SQL通信区SQLCA,二、主变量 1. 输入主变量 2. 输出主变量 3. 指示变量,所有主变量和指示变量必须在SQL语句 BEGIN DECLARE SECYION 与 END DECLARE SECYION之间进行说明.,三、游标,四、建立和关闭数据库连接 1.建立数据库连接 建立连接的ESQL语句是: EXEC SQL CONNECT TO target AS connection-name
3、USER user-name;,2.关闭数据库连接 建立连接的ESQL语句是: EXEC SQL DISCONNECT connection-name;,程序运行过程中可以修改当前连接,对应的SQL语句为: EXEC SQL SET CONNECTION connection-name | DEFAULT;,五、程序实例, EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; CHAR Sno(5); CHAR Cno(3); INT Grade; EXEC SQL END DECLARE SECTION; main() EXEC SQ
4、L DECLARE C1 CURSOR FOR SELECT Sno, Cno, Grade FROM SC; EXEC SQL OPEN C1; FOR( ; ; ) EXEC SQL FETCH C1 INTO:Sno,:Cno, :Grade; if (sqlca.sqlcodeSUCCESS) break; printf(“Sno:%s,Cno:%s,Grade:%d”, :Sno,:Cno, :Grade); EXEC AQL CLOSE C1; ,五、程序实例 例1 依次检查某个系的学生记录,交互式更新某些学生年龄。,EXEC SQL BEGIN DECLARE SECTION;
5、char deptname20; char HSno(9); char HSname(20); char HSsex(2); int HSage int NEWAGE; EXEC SQL END DECLARE SECTION; long SQLCODE; EXEC SQL INCLUDE sqlca; int main(void) int count=0; char yn; printf(“please choose the department name(CS/MA/IS):”); scanf(“%s”, ,EXEC SQL DECLARE SX CURSOR FOR SELECT Sno
6、, 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%-10sn”, “Sno”,”Sname”,”Ssex”,”Sage”); printf(“%-10s%-20s%-10s%-10dn”, HSno,HSname,HSsex,HSage); p
7、rintf(“UPDATE AGE(y/n) ?”); do scanf(“%c”,if( yn!=Y | yn!=y); printf(“INPUT NEW AGE:”); scanf(“%d”, ,8.1.3 不用游标的SQL语句,一. 说明性语句 EXEC SQL BEGIN DECLARE SECYION EXEC SQL END DECLARE SECYION,二. 数据定义语句 补例1 建立一个“学生”表Student. EXEX SQL CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE , Sname CHAR(20) , Sse
8、x CHAR(1) , Sage INT, Sdept CHAR(15);,三. 数据控制语句 补例2 把查询Student表的权限授予用户U1. EXEX SQL GRANT SELECT ON TABLE Student TO U1;,四. 查询结果为单记录的SELECT语句 一般格式为: EXEC SQL SELECT ALL| DISTINCT , INTO, FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ;,使用该语句需要注意以下三点:,例2. 根据学生号码查询学生信息,假设已将要查询的学生的学号赋给了主变量Givensno. EXEC
9、 SQL SELECT Sno,Sname,Ssex,Sage, Sdept INTO :Hsno, :Hname, :Hsex, :Hage, :Hdept FROM Student WHERE Sno =: Givensno;,五. 非CURRENT 形式的增删改 语句 例4 修改某个学生选修1号课程的考试成绩. EXEC SQL UPDATE SC SET Grade=:newgrade WHERE Sno=:givensno;,例5. 把计算机科学系全体学生的年龄置NULL值. SAID=-1; EXEC SQL UPDATE Student SET Sage=:Raise:Sagei
10、d WHERE Sdpt=CS; 它等价于:,EXEC SQL UPDATE Student SET Sage=NULL WHERE Sdpt=CS;,例6. 某个学生退学了,现要将有关他的所有选课记录删除掉.假设该学生的姓名已赋给主变量Stdname.,EXEC SQL DELETE FROM SC WHERE Sno= (SELECT Sno FROM Student WHERE Sname=:Stdname );,另一种等价实现方法为: EXEC SQL DELETE FROM SC WHERE : Stdname = (SELECT Sname FROM Student WHERE S
11、tudent.Sno=SC.Sno );,例7. 某个学生选修了某门课程,将有关记录插入SC表中,假设学生学号已赋给主变量stdno, 课程号已赋主变量couno. gradeid=-1; EXEC SQL INSERT INTO SC(Sno,Cno,Grade) VALUES(:stdno,:couno,:gr:gradeid);,8.1.4 使用游标的SQL语句 必须使用游标SQL语句有: 查询结果为多条记录的SELECT 语句 CURRENT 形式的UPDATE语句 CURRENT 形式的DELETE语句,一. 查询结果为多条记录的SELECT 语句 使用游标的步骤: (1). 说明游
12、标 EXEC SQL DECLARECURSOR FOR ;,(2). 打开游标 EXEC SQL OPEN;,(3). 推进游标指针并取当前记录 EXEC SQL FETCH INTO; ;,(4). 关闭游标 EXEC SQL CLOSE;,补例3. 查询某个系全体学生的信息.要查的系名由用户在程序运行过程中指定,存放在主变量deptname中. EXEC SQL BEGIN DECLARE SECTION; ./*说明主变量deptname,Hsno,Hsname,Shsex,Hsage等*/ EXEC SQL END DECLARE SECTION gets(deptname); EX
13、CE SQL DECLARE SX CURSOR FOR SELECT Sno,Sname,Ssex,Sage FROM Student WHERE SDept=: deptname; EXEC SQL OPEN SX; WHILE(1) EXEC SQL FETCH SX INTO:HSno,:HSname,:Hssex,:HSage; if(sqlca.sqlcodeSUCCES) break; ; EXEC SQL CLOSE SX; .,二. CURRENT 形式的 UPDATE 语句和DELETE语句,具体步骤: (1). 用DECLARE语句说明游标。,(2). 用OPEN 语句打
14、开游标。 (3). 用FETCH 语句推进游标指针,并将当前记录从缓冲去中取出来送至主变量。,(4). 检查该记录是否是要修改或删除的记录. (5). 处理完毕用CLOSE语句关闭游标.,补例4. 查询某个系全体学生的信息.(要查的系名由主变量deptname指定),然后根据用户的要求修改其中某些记录的年龄字段. EXEC SQL BEGIN DECLARE SECTION; ./*说明主变量deptname,Hsno,Hsname,Shsex,Hsage等*/ EXEC SQL END DECLARE SECTION gets(deptname); EXCE SQL DECLARE SX C
15、URSOR FOR SELECT Sno,Sname,Ssex,Sage FROM Student WHERE SDept=: deptname FOR UPDATE OF Sage;,EXEC SQL OPEN SX; WHILE(1) EXEC SQL FETCH SX INTO:HSno,:HSname,:Hssex,:HSage; if(sqlca.sqlcodeSUCCES) break; printf(“%s, %s, %s, %d”,Sno,Sname,Ssex,Sage); printf(“UPDATE AGE? ”); scanf(“%c”, .,8.1.5 动态SQL简介
16、如果在预编译时下列信息不能确定,就必须使用动态SQL技术,如: (1) SQL语句正文 (2) 主变量个数 (3) 主变量的数据类型 (4) SQL语句中引用的数据库对象,动态SQL方法允许在程序运行过程中临时“组装”SQL语句,主要有三种形式: 1. 语句可变 2. 条件可变 3. 数据库对象、查询条件均可变,一、使用SQL语句主变量 例8 创建基本表TEST。 EXEC SQL BEGIN DECLARE SECYION ; const char *stmt=“CREATE TABLE test(a int);”; EXEC SQL END DECLARE SECTION; EXEC SQ
17、L EXECUTE IMMEDIATE :stmt;,二、动态参数 1、声明SQL语句主变量。 变量的SQL内容包含动态参数(?)。 2、准备SQL语句(PREPARE)。 EXEC SQL PREPARE FROM ; 3、执行准备好的语句(EXECUTE) EXEC SQL EXECUTE INTOUSING;,8.2 存 储 过 程,8.2.1 PL/SQL 的块结构,8.2.2 变量常量的定义 1. PL/SQL 中定义变量的语法形式是: 变量名 数据类型 NOT NULL:=初值表达式 或 变量名 数据类型 NOT NULL初值表达式,2. 常量的定义类似于变量的定义: 常量名 数据
18、类型CONSTANT:=常量表达式 3. 赋值语句 变量名称:=表达式,8.2.3 控制结构 一、条件控制语句 1. IF condition THEN sequence of- statements; END IF;,2. IF condition THEN sequence of- statements1; ELSE sequence of- statements2; END IF;,3. IF 语句可以嵌套.,二、循环控制语句 1. 最简单的循环语句 LOOP LOOP sequence of- statements; END LOOP;,2. WHILE-LOOP WHILE condition LOOP sequence of- statements; END LOOP;,3. FOR-LOOP FOR count IN REVERSE bound1bound2 LOOP sequence of- statements; END LOOP;,三、 错误处理,8.2.4 存储过程 一、存储过程的优点 P247-248,二、存储过程的用户接口 1、创建存储过程 CREATE Procedure 过程名(参数1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年物理设备考试题库及答案
- 渭南高新区安全培训课件
- 家庭财产赠与协议法律文本
- 渭南市消防安全培训课件
- 电商仓储物流项目可行性研究报告
- 高一化学(人教版)教学课件 必修二 第六章 第二节 第2课时 化学反应的限度 化学反应条件的控制
- 幼儿教育情绪管理技巧培训教材
- Flash动画传统补间制作教程
- 信息技术部门费用审批管理办法
- 电力厂职业病危害识别与防护措施
- 高考生物学二轮复习备课素材:多变量实验题的类型及审答思维
- 水电基础知识培训(二)
- 沥青沥青混合料试验作业指导书
- 保险管选型指导书
- 建筑风景速写课件
- 第五届“国药工程杯”全国大学生制药工程设计竞赛
- 三年级上册英语素材-复习要点 Join in剑桥英语
- Q∕SY 1275-2010 油田污水回用湿蒸汽发生器水质指标
- GB∕T 7758-2020 硫化橡胶 低温性能的测定 温度回缩程序(TR 试验)
- 最新烟花爆竹仓库安全风险分级管控资料
- 钢板桩支护工程投标文件(54页)
评论
0/150
提交评论