嵌入式SQL语句

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43909184/article/details/90175703

为了区分SQL语句与主语言语句,所有SQL 语句必须加前缀EXEC SQL
处理过程:

  • 含嵌入式SQL语句的主语言程序
  • 预编译程序转换嵌入式SQL语句为函数调用
  • 转换后的主语言程序(形式上消除了SQL)
  • 主语言编译程序编译处理
  • 目标语言程序
    主语言访问数据库基本步骤:
  • 第一步:打开数据库
  • 第二步:定义必要的主变量和数据通信去
  • 第三步:用SQL访问数据库,并对返回结果进行处理
  • 第四步:关闭数据库
    1.建立数据库连接
EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];
//target 是要连接的数据库服务器的名字
//connect-name是可选的连接名 ,连接名必须是一个有效的标识符
//程序运行过程中可以修改当前连接
EXEC SQL SET CONNECTION connection-name
		|DEFAULT;

2.定义主变量与数据通讯区

  • 向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程,主要用SQL通信区实现
  • 主语言向SQL语句提供参数,主要用主变量实现
  • 将SQL语句查询数据库的结果返回给主语言处理,主要用主变量和游标实现
    1.通信区
    使用SQLCA
    (1)SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE
    (2)如果SQLCODE等于预定义的常量SUCCESS,则表示SQL语句成功,否则表示出错
    (3)应用程序每执行完一条SQL语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理
    2.主变量
    (1)输入主变量 ——————由应用程序对其赋值,SQL语句引用
    (2)输出主变量 ——————由SQL语句对其赋值或设置状态信息,返回给应用程序
EXEC SQL BEING DECLARE SECTION;
		char Deptname[20];
		char Hsno[9];
		char Hsname[20];
		char Hssex[2];
		int Hsage;
		int NEWAGE;
EXEC SQL END DECLARE SECTION;
long SQLCODE;
EXEC SQL INCLUDE SQLCA;

(3)指示变量 ——————整型变量,指示所指主变量的值或条件,
指示变量用途——1.指示输入主变量是否为空值,2.检测输出变量是否为空值,值是否被截断

//查询某个学生选修某门课程的成绩
EXEC SQL SELECT Sno,Cno,Grade
		INTO :Hsno,:Hcno,:Hgrade:Gradeid /*指示变量Gradeid*/
		FROM SC
		WHERE Sno=:givesno AND Cno=:givecno;
		//如果Gradeid<0,不论Hgrade为何值,均认为该学生成绩为空值。

(INTO子句、WHERE子句和HAVING短语的条件表达式中均可以使用主变量)

EXEC SQL SELECT Sno,Sname,Ssex,Sage,Sdept
INTO :Hsno,:Hname,:Hsex,:Hage,:Hdept
FROM Student
WHERE Sno=:givensno;
//前面带“:”标识的变量为主变量,也就是主语言的变量

//修改某个学生选修1号课程的成绩
EXEC SQL UPDATE SC
			SET Grade=:newgrade
			WHERE Sno=:givesno AND Cno="1";

在SQL语句之外使用主变量和指示变量直接使用,不必加冒号
4.关闭数据库连接

EXEC SQL DISCONNECT [connection];

游标

  • 游标是数据库系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果
  • 每个游标区都有一个名字,也可以理解为该数据区的指针
  • 可以用SQL语句逐一从游标中(指针所指示的位置)获取记录,并赋给主变量,交由主语言进一步处理
  • SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录,主语言是面向记录的,一组主变量一次只能存放一条记录,嵌入式SQL引入了游标的概念,用来协调两种不同的处理方式
  • 必须使用游标的SQL语句1.查询结果为多条记录的SELECT语句 2.CURRENT形式的UPDATE语句 3.CURRENT形式的DELETE语句
    使用游标
    (1)申明游标
EXEC SQL DECLARE <游标名> CURSOR
					FOR <SELECT语句>;
//功能:是一条说明性语句,这是关系数据库管理系统并不执行SELECT语句,而是向系统申请一个数据空间,用于存放未来执行select的结果数据集

(2)打开游标

EXEC SQL OPEN <游标名>;
//功能:打开游标实际上执行相应的SELECT语句,把查询结果取到缓冲区中,这是游标处于活动状态,指针指向查询结果集中的第一条记录

(3)推进游标指针并取当前记录

EXEC SQL FETCH <游标名>
					INTO<主变量>[<指示变量>]
							[,<主变量>[<指示变量>]]……;
//功能:指定方向推动游标指针,同时将缓冲区中的当前记录取出来送至主变量供主语言进一步处理

(4)关闭游标

EXEC SQL CLOSE <游标名>;
//功能:关闭游标,释放结果占用的缓冲区及其他资源
游标被关闭后,就不再和原来的查询结果集相联系
被关闭的游标可以再次被打开,与新的查询结果相联系

猜你喜欢

转载自blog.csdn.net/qq_43909184/article/details/90175703