教材:王珊 萨师煊 编著 数据库系统概论(第5版) 高等教育出版社
注:文档高清截图在后
第8章 数据库编程
标准SQL是非过程化的查询语言,操作统一、面向集合、功能丰富、使用简单。非过程化语言是相对于过程化语言而言的,语言的使用者只需给出输入,计算机执行并输出,使用者无需干预执行过程。相对地,关系代数是过程化的,使用者必须一步一步指定执行过程。高度非过程化的语言的一个弱点是:缺少流程控制能力,难以实现应用中的逻辑控制。SQL编程技术可以有效克服SQL语言的复杂应用的不足,提高应用系统和DBMS的互操作性。
8.1 嵌入式SQL
1、嵌入式SQL,是指将SQL语句包含到程序设计语言中去。被嵌入的程序设计语言,如C / CPP / Java等,称为宿主语言,简称主语言。对嵌入式SQL,DBMS一般采用预编译方法处理,即DBMS的预处理程序对源程序扫描,识别出嵌入式SQL语句并转换成主语言的语句,主语言的编译器就能识别它们并连通代码的其它部分进行编译。
对编程语言的语法部分的细节不会被写入本归纳梳理中。
2、SQL通信区(SQL Communication Area,SQLCA)是一片内存空间,主要包括描述当前工作状态和运行环境的各种数据。SQL语句执行后,相应的信息会传入SQLCA。应用程序据此决定接下来的执行语句。SQLCA中的变量SQLCODE存放每次执行SQL语句后返回的代码。每执行完一条SQL语句,都应该测试SQLCODE的值,了解执行情况并作相应处理。一般而言0为成功,非0为出错。程序员可以根据SQLCODE的错误代码查找问题。
3、嵌入式SQL语句可以使用整份代码的SQL语句以外的变量,即主语言的程序变量来输入输出。SQL语句中使用的来自主语言程序的变量简称主变量(host variable),分为输入主变量和输出主变量。输入主变量由应用程序赋值,SQL语句引用;输出主变量由SQL语句赋值或设置状态信息,返回给应用程序。
一个主变量可附带一个任选的指示变量(indicator variable),它是整型的,用于“指示”所指主变量的值或条件。例如:指示输入主变量是否为空,检测输出主变量是否为空,值是否被截断。
4、SQL面向集合,一条SQL语句可以产生或处理多条记录;主语言是面向记录的,一组主变量一次只能存放一条记录。嵌入式SQL引入了游标(cursor),通过在多条记录中移动游标,可以将指向的记录传给主变量。游标的本质是数据缓冲区,存放SQL语句的执行结果。每个游标区都有命名。
5、嵌入式SQL程序访问数据库时必须首先连接数据库,RDBMS根据用户信息对连接进行合法性验证,通过身份验证才能建立可用的合法连接。当某个连接上的所有数据库操作完成后,应用程序应该主动释放占用的连接资源。
6、当嵌入式SQL语句中使用的主变量、查询的目标列和条件等都是固定的时候,SQL语句属于静态SQL语句。而某些应用可能需要在执行过程中才能确定需要执行的SQL语句和查询的条件,这时候需要使用动态SQL语句解决这类问题。动态SQL方法允许在程序运行过程临时“构造”SQL语句。动态SQL支持动态组装SQL语句和动态参数两种形式,给开发者提供设计任意SQL语句的能力。