暂无 |

4 Cursors

如果stored routines需要针对一个查询结果中的每一笔纪录执行需要的处理工作,你可以宣告一个「cursor」来代表一个查询的结果,并且使用cursor依序处理所有纪录资料。下列是在区块中宣告cursor的位置:

mysql_15_snap_27

宣告好cursors以后,可以使用「OPEN」叙述来开启,接着使用「FETCH」叙述读取资料,最后要使用「CLOSE」叙述关闭用完的cursor:

mysql_15_snap_28

宣告cursor时所指定的查询叙述,与使用「FETCH」读取资料时,要特别注意相对的顺序:

mysql_15_snap_29

一般来说,都会把cursor称为「游标」或「指标」。当你宣告好一个需要的cursor以后,接着使用「OPEN」叙述开启cursor,这时会有一个游标指向查询结果的第一笔纪录:

mysql_15_snap_30

当你使用「FETCH」叙述时,除了读取目前游标的纪录资料外,还会将游表指向下一笔纪录:

mysql_15_snap_46

以上列宣告的cursor来说,从开启到读取所有纪录资料的游标状况会像这样:

mysql_15_snap_32

在stored routines中使用cursor,通常需要下列的流程:

mysql_15_snap_33

下列是流程与对应的叙述:

mysql_15_snap_34

为了读取cursor中所有的纪录资料,要另外宣告handler来控制在没有资料读取时可以离开回圈:

mysql_15_snap_35

除了使用「EXIT HANDLER」外,也可以使用「CONTINUE HANDLER」来控制在没有资料读取时可以离开回圈:

mysql_15_snap_36

下列的说明表示没有资料可以读取时的流程:

mysql_15_snap_37

在资料库的应用中,通常是需要针对一个查询的结果执行比较复杂的工作,才会在sotred routines中宣告与使用cursor。如果你常常需要查询月薪在某个金额以上的员工资料,而且要把这些员工资料储存到一个表格中。这样的需求包含执行查询与处理新表格的工作,你就可以考虑使用包含cursor的procedure来完成这些工作。

下列的范例可以将月薪在指定金额以上的员工资料储存到「cmdev.topemp」表格中:

mysql_15_snap_38

java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
C语言
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论