admin管理员组

文章数量:1534361

2023年12月24日发(作者:)

第8章 数据库编程(2课时)

建立数据库后,就要开发应用系统了。在应用系统中如何使用编程方法对数据库进行操作是本章研究的重点。

SQL的优点:是非过程化的查询语言,具有操作统一、面向集合、功能丰富、使用简单等多项优点。

SQL的缺点:和程序设计语言相比,缺少流程控制能力,难以实现应用业务中的逻辑控制。

SQL编程技术可以有效克服SQL语言实现复杂应用方面的不足,提高应用系统和RDBMS间的互操作性。应用系统中使用SQL编程来访问和管理数据库中数据的方式主要有:

 嵌入式SQL(Embedded SQL,ESQL)

 ODBC(Open Data Base Connectivity)编程

 JDBC(Java Data Base Connectivity)编程

 OLEDB(Object Linking and Embedding DB)编程

 PL/SQL

8.1 嵌入式SQL

SQL的特点之一是两种使用方式:交互式和嵌入式,两种方式下语法结构基本一致。在程序设计环境下,SQL语句要做某些必要的扩充。

8.1.1 嵌入式SQL的处理过程

嵌入式SQL(ESQL)是将SQL语句嵌入程序设计语言中,被嵌入的程序设计语言,称为宿主语言,简称主语言。

对ESQL,RDBMS采用预编译方法处理,即由RDBMS的预处理程序对源程序进行扫描,识别ESQL语句,把它们转换成主语言调用语句,以使主语言编译程序能识别它们,然后由主语言的编译程序编译成目标程序。

为了区分SQL语句与主语言语句:

 必须加前缀 EXEC SQL

 结束标志:随主语言的不同而不同(C语言为“;”)

EXEC SQL ;

8.1.2 嵌入式SQL语句与主语言之间的通信

将SQL嵌入到高级语言中混合编程,SQL语句负责操纵数据库,高级语言语句负责控制程序流程。它们之间的通信主要包括:

(1)向主语言传递SQL语句的执行状态信息,使主语言能够据此信息控制程序流程,主要用SQL通信区(SQL Communication Area,SQLCA)实现。

(2)主语言向SQL语句提供参数,主要用主变量实现。

(3)将SQL语句查询数据库的结果交主语言处理,主要用主变量和游标实现。

SQL通信区

SQL语句执行后,系统要反馈给应用程序若干状态信息,这些信息将关到SQLCA中,应用程序从SQL中取出这些信息,据此决定接下来执行什么。

SQLCA在应用程序中用EXEC SQL INCLUDE SQLCA加以定义。SQLCA中有一个变量SQLCODE,用来存放每次执行SQL语句后返回的代码。

应用程序每执行完一条SQL语句之后,都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理。如果SQLCODE等于预定义的常量SUCCESS,则表示SQL语句执行成功,否则SQLCODE存放错误代码。

主变量

嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据。SQL语句中使用的主语言程序变量简称主变量。主变量根据其作用的不同,分为输入主变量和输出主变量。输入主变量由应用程序对其赋值,SQL语句引用;输出主变量由SQL语句对其赋值,或设置状态信息,返回给应用程序。一个主变量有可以既是输入主变量又是输出主变量。

一个主变量可以附带一个任选的指示变量。指示变量是一个整型变量,用来指示所指主变量的值或条件。

主变量和指示变量必须在SQL语句BEGIN DECLARE SECTION与END DECLARE

SECTION之间进行说明。说明之后,主变量可以在SQL语句中任何一个能够使用表达式的地方出现。为了与数据库对象(表名、视图名、列名等)区分,SQL语句中的主变量名和指示变量名前要加冒号作为标志。

游标

SQL是面向集合的,而主语方是面向记录的,一组主变量一次只能存放一条记录。为了解决这一矛盾,SQL引入了游标的概念,用游标来协调这两种不同的下理方式。

游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。用户可以通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。

建立和关闭数据库连接

嵌入式SQL程序要访问数据库必须先连接数据库。RDBMS根据用户信息对连接请求进行合法性验证,只有通过了身份验证,才能建立一个可用的合法能连接。

(1)建立数据库连接

建立边接的ESQL语句是:

EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];

说明:

 target是要连接的数据库服务器 常见的服务器标识串,如@:或者是包含服务器标识的SQL串常量,也可以是

DEFAULT。

 connection-name 可选的连接名,是连接的标识符,在整个程序内只有一个连接时可以不指定连接名。

 user-name 用户名。

(2)关闭数据库连接

当某个连接上的所有数据库操作完成后,应用程序应该主动释放所占用的连接资源,即关闭连接。

EXEC SQL DISCONNECT [connection];

程序实例(p239)

8.13 不用游标的SQL语句

有的ESQL语句不需要使用游标,它们是:数据定义语句、数据控制语句、查询结果为单记的SELECT语句、非CURRENT形式的增删改语句、说明性语句(说明性语句是专为在嵌入式SQL中说明主变量、SQLCA等而设置的)。

8.1.4 使用游标的SQL语句

必须使用游标的SQL语句有:查询结果为多条记录的SELECT语句、CURRENT形式的UPDATE和DELETE语句。

(1)使用游标的步骤

[1]说明游标(DECLARE语句)

[2]打开游标(OPEN语句)

[3]推进游标指针并读取当前记录(FETCH语句)

[4]关闭游标(CLOSE语句)

(2)CURRENT形式的UPDATE和DELETE语句。

UPDATE语句和DELETE语句都是集合操作。要修改或删除某一个记录,则要通过游标,利用CURRENT形式的UPDATE和DELETE语句来实现。即UPDATE语句或DELETE语句中要用子句:

WHERE CURRENT OF <游标名>

8.1.5动态SQL

(P244)

8.2 存储过程

分析C/S或B/S模型的数据处理过程。

PL/SQL(Procedural Language/SQL,过程化SQL,是Oracle对标准SQL的扩展)是编写存储过程的一种过程语言,它结合了SQL的数据操作能力和过程化语言的流程控制能力。

ESQL和PL/SQL的比较。ESQL是将SQL语句嵌入程序设计语言,借助高级语言的控制功能实现过程化;PL/SQL是对SQL的扩展,使其增加了过程化语句的功能。

8.2.1 PL/SQL的块结构

PL/SQL程序的基本结构是块。所有的PL/SQL程序都是由块组成,这些块之间可以互相嵌套,每个块完成一个逻辑操作。基本结构见图8.2(p246)。

8.2.2 变量常量定义

P245。

8.2.3 控制结构

P246。

8.2.4 存储过程

概念。

存储过程是一种数据库对象,由一组预编译的SQL语句组成,这些语句在一个名称下

存储,并作为一个单元进行处理。存储过程类似于其他编程语言中的函数或过程:能够使用传递给它的参数,能够调用其它存储过程甚至本身,能够返回一个状态码来表示是否成功执行。

优点。

 模块化编程。一旦创建了一个存储过程,就可以在应用程序中多次调用它,而且由于存储过程独立于应用程序,所以可以在不影响应用程序源代码的前提下修改它。

 加快执行速度。在创建一个存储过程时,SQL Server要对它进行分析和优化,以获得最好的执行性能;当一个存储过程被首次执行后,它就会驻留内存,当再次调用时,就不必再加载了,从而提高了整个系统的执行速度。

 减少网络通信量。使用存储过程,客户端的应用程序可以通过一条简单的执行命令来执行存放在服务器端的存储过程,而不必传输成百上千行的SQL语句代码,因此可以大大减少网络阻塞。

 提供安全机制。可以通过存储过程来间接将某些权限赋给用户。

 复杂业务规则和约束的一致性实现。存储过程足够强大,甚至能够实现最复杂的业务规则,这是因为存储过程可以同时合并过程语句和面向集合的语句。

创建存存过程。

CREATE PROCEDURE procedure_name(参数表)

AS

执行存存过程

不同的DBMS有不同的方法。

删除存储过程

DROP PROCEDURE procedure_name

本文标签: 语句语言过程变量