天道酬勤,恒者能胜。追求卓越,成功就会在不经意间追上你。

数据库SQL语言之嵌入式SQL(五.1)

上一篇 / 下一篇  2013-01-09 16:47:43 / 精华(1) / 置顶(1) / 个人分类:Oracle数据库

有一死党月光族,经常打电话来叫请吃饭。
于是有一次我接了电话就说:对不起您的手机已欠费。
停了几秒不知道后面怎么说,她不说话也没挂电话。然后我又说orry your cellular phone have no money
我反复说了几遍后,她突然冒了一句,你玩够没有。玩够了出来请我吃饭

 

数据库中的游标主要是用于嵌入式SQL里面,解决SQL的集合处理方式与主语言单记录处理方式之间的协调问题。

1、 嵌入式SQL定义:SQL不能提供屏幕控制、菜单管理、图像管理、报表生成等功能,这些只能通过CJava等主语言实现,在主语言中使用SQL结构(嵌入在主语言的程序中使用的SQL)称为嵌入式SQL

2、 嵌入式SQL的两种实现方式

a)        扩充主语言的编译程序,使之能处理SQL语句(很少用)

b)        采用预处理方式,是先用预处理程序对源程序进行扫描,识别出SQL语句,并处理成主语言的函数形式,然后再用主语言的编译程序编译成目标程序(目前多数系统采用的方式)

共享变量:数据库和主语言程序间的信息传递是通过共享变量实现的,这些共享变量用declare语句说明,共享变量是SQL和主语言的接口。SQL_STATE是一个特殊共享变量,起着解释语句执行状况的作用,它由5个字符组成的字符数组,全零表示成功,非全零表示各种错误。

3、 嵌入式SQL的使用规定

a)        在程序中要区分SQL语句和主语言语句

                        i.             所有主语言中的SQL语句必须加上标识Exec SQL开始,End_EXEC结束”

                      ii.             嵌入的SQL语句的语法:

EXEC SQL <SQL语句> END_EXEC

b)        允许嵌入的SQL语句引用主语言的程序变量(即共享变量)

                        i.             引用时,共享变量前必须加冒号:,作为前缀标识,以示与数据库中变量的区别;

                      ii.             共享变量要用SQLDeclare语句说明,语法:

EXEC SQL BEGIN DECLARE SECTION

<共享变量定义>

EXEC SQL END DECLARE SECTION

c)        SQL的集合处理方式与主语言单记录处理方式之间的协调

                        i.             SQL语句处理的是记录集合,而主语言语句一次只能处理一个记录,所以需要用游标机制(cursor)来协调SQL和主语言之间的处理方式。在推进时沿查询结果中元组顺序从头到尾一行行推进,并且不能返回,这就是游标技术

                      ii.             游标定义语句(declare

EXEC SQL DECLARE <游标名> CURSOR FOR <Select语句>  END_EXEC

                     iii.             游标打开语句(open

EXEC SQL  

OPEN <游标名>  

END_EXEC

                     iv.             游标推进语句(fetch

EXEC SQL

FETCH FROM<游标名>INTO <变量表>

 END_EXEC

                      v.             游标关闭语句(close

EXEC SQL

 CLOSE <游标名>

END_EXEC

d)        SQL的集合处理方式与主语言单记录处理方式之间的协调的增强版(卷游标的使用)

                        i.             为了解决游标不能返回的问题,SQL2中提供了卷游标,在推进时沿查询结果中元组可以进退自如。

                      ii.             卷游标定义语句(declare

EXEC SQL

DECLARE <游标名>  SCROLL CURSOR FOR <Select语句>  

END_EXEC

                     iii.             卷游标打开语句(open

EXEC SQL  

OPEN <游标名>  

END_EXEC

                     iv.             卷游标推进语句(fetch

EXEC SQL

FETCH

Next从当前位置推进一行

Prior从当前位置返回一行

First移向第一行

Last移向最后一行

Relative<整数>从当前位置推进n行,正数代表推进,负数代表返回或Absolute<整数>移向查询结果的第n行,正数代表正数,负数代表倒数

FROM<游标名>INTO <变量表> END_EXEC

                      v.             卷游标关闭语句(close

EXEC SQL CLOSE <游标名>

 END_EXEC

                        零测试


TAG: 零测试 嵌入式SQL declare fetch 游标 卷游标

 

评分:0

我来说两句

Open Toolbar