数据库原理第8章数据库编程.ppt
例题(续)*第8章数据库编程*......1......2};3EXECSQLCLOSESX;/*关闭游标*/4......5...... 68.1.5动态SQL简介*第8章数据库编程*动态嵌入式SQL静态嵌入式SQL一、静态SQL的特点*第8章数据库编程*用户可以在程序运行过程中根据实际需要输入WHERE子句或HAVING子句中某些变量的值。01语句中主变量的个数与数据类型在预编译时都是确定的,只有是主变量的值是程序运行过程中动态输入的。02静态SQL的不足*第8章数据库编程*静态SQL语句提供的编程灵活性在许多情况下仍显得不足,不能编写更为通用的程序。例,对SC:需求*第8章数据库编程*任课教师想查选修某门课程的所有学生的学号及其成绩班主任想查某个学生选修的所有课程的课程号及相应成绩学生想查某个学生选修某门课程的成绩即:查询条件是不确定的,要查询的属性列也是不确定的二、动态SQL*第8章数据库编程*动态SQL方法允许在程序运行过程中临时“组装”SQL语句。什么是动态嵌入式SQL在预编译时下列信息不能确定时SQL语句正文主变量个数主变量的数据类型SQL语句中引用的数据库对象(列、索引、基本表、视图等)应用范围动态SQL的形式动态SQL(续)*第8章数据库编程*语句可变01临时构造完整的SQL语句02条件可变03WHERE子句中的条件04HAVING短语中的条件05数据库对象可变06SELECT子句中的列名07FROM子句中的表名或视图名08动态SQL(续)*第8章数据库编程*使用动态SQL技术更多的是涉及程序设计方面的知识,而不是SQL语言本身动态SQL支持的两种形式动态组装SQL语句动态参数010302一、动态组装SQL语句*第8章数据库编程*特点:程序主变量为SQL语句主变量[例9]创建基本表TEST。EXECSQLBEGINDECLARESETION;Constchar*stmt=“CREATETABLETEST(a,int)”;/*定义SQL语句主变量*/EXECSQLENDDECLARESECTION;......EXECSQLEXECUTEIMMEDIATE:stmt;例题*第8章数据库编程*例1查询某个系全体学生的信息(学号、姓名、性别和年龄)。要查询的系名由用户在程序运行过程中指定,放在主变量deptname中......EXECSQLBEGINDECLARESECTION;......EXECSQLINCLUDESQLCA;12345例题(续)*第8章数据库编程*....../*说明主变量deptname,HSno,HSname,HSsex,HSage等*/............EXECSQLENDDECLARESECTION;............gets(deptname);/*为主变量deptname赋值*/......例题(续)*第8章数据库编程*STEP5STEP4STEP3STEP2STEP1EXECSQLDECLARESXCURSORFORSELECTSno,Sname,Ssex,SageFROMStudentWHERESDept=:deptname;/*说明游标*/EXECSQLOPENSX/*打开游标*/例题(续)*第8章数据库编程*WHILE(1)/*用循环结构逐条处理结果集中的记录*/{EXECSQLFETCHSXINTO:HSno,:HSname,:HSsex,:HSage;/*将游标指针向前推进一行,然后从结果集中取当前行,送相应主变量*/例题(续)*第8章数据库编程*if(sqlca.sqlcodeSUCCESS)1break;2/*若所有查询结果均已处理完或出现3SQL语句错误,则退出循环*/4/*由主语言语句进行进一步处理*/5......6......7};8例题(续)