分享

SQL语言:嵌入式SQL知识笔记

 IT技术分享社区 2022-10-20 发布于江苏

             

1、概念

SQL提供了将SQL语句嵌入到某种高级语言中的使用方式,通常采用预编译的方法将SQL语句嵌入高级语言中。采用的方法由DBMS的预处理程序对源程序进行扫码、识别出SQL语句,把它们转换为主语言调用语句,这样可以让主语言编译程序能识别它,最后由主语言的编译程序将整个源程序编译成目标码。

2、SQL嵌入主语言涉及的几个问题

区分主语言语句与SQL语句:通常在SQL语句前加前缀EXEC SQL,结束标志会跟着主语言不同而不同。

主语言工作单元与数据库工作单元的通信机制

1、SQL通信区:向主语言传递SQL语句执行状态信息,使主语言能够根据此信息控制程序流程。

2、主变量:也成为共享变量。主语言向SQL语句提供参数主要通过主变量,主变量由主语言的程序定义,并用SQl的DECLARE语句说明。比如C语言中用法:

exec sql begin delcare sectionchar sno[4],cno[3]int grade;char sqlstate[7]exec sql end declare section  

根据共享变量givesno值查询学生关系students 中的学生姓名、年龄、性别

exec sql select sname,age,sexinto :Msno,:Mcno;givensnofrom studnetswhere sno:Msno;

3、游标

SQl语言主要是面向集合的,一条SQL语句可产生或处理多条记录。而主语言是面向记录的,一组主变量一次只能放一条记录,因此引入游标,通过移动游标指针来决定获取那一条记录。

3.1 定义游标:

exec sql declare<游标> cursor for   <select 查询语句>endexec

3.2 打开游标

exec sql open <游标名> endexec


该语句执行游标定义中的select语句,同时游标处于活动状况。游标是一个指针,此时指向查询结构的第一行之前。

3.3 推进游标

exec sql fetch from <游标名> into <变量表> endexec

该语句使用时,游标推进一行,并把游标指向的行中的值取出来,送到共享变量中去。

3.4 关闭游标

exec sql close <游标名> endexec

3.5游标完整例子

---游标更新删除当前数据---1.声明游标declare orderNum_03_cursor cursor scrollfor select OrderId ,userId from bigorder where orderNum='ZEORD003402'--2.打开游标open orderNum_03_cursor--3.声明游标提取数据所要存放的变量declare @OrderId int ,@userId varchar(15)--4.定位游标到哪一行fetch First from orderNum_03_cursor into @OrderId,@userId  --into的变量数量必须与游标查询结果集的列数相同while @@fetch_status=0  --提取成功,进行下一条数据的提取操作  begin   if @OrderId=122182     begin     Update bigorder Set UserId='123' Where Current of  orderNum_03_cursor  --修改当前行     end   if @OrderId=154074      begin      Delete bigorder Where Current of  orderNum_03_cursor --删除当前行      end   fetch next from orderNum_03_cursor into @OrderId ,@userId --移动游标 end

IT技术分享社区

个人博客网站:https://

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多