游标在PowerScript程序中的用法

时间:2022-10-04 02:02:10

游标在PowerScript程序中的用法

摘要:PowerScript是PowerBuilder的专用语言,它面向过程,需逐条地接收和处理语句。而嵌入式SQL是描述型语言,它面向的是集合。当在PowerScript程序中使用SELECT语句时,问题就来了:SQL只能检索到一条记录,有时希望SQL语句与DataWindow语句一样,能够检索到多条记录并逐行处理。这种情况下,使用游标是个好的解决方案。该文主要介绍PowerScript程序中游标的用法。

关键词:数据库;游标;SQL;PowerScript;PowerBuilder

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)23-5564-02

The Usage of Cursor in PowerScript Programming

XING Xiao-ping

(PLA Commanding Communications Academy, Wuhan 430010, China)

Abstract:PowerBuilder PowerScript is a special programming language, because of its process-oriented, it can only receive and process the statement one by one. And the embedded SQL is a describe language, it produces a collection of data. The problems arise that SQL can only retrieve one record, while we hope that the SQL statement can be as flexible as DataWindow statement which can retrieve multiple records and process line by line when one uses a SELECT statement in PowerScript program. In that case, using cursors is a good solution, this paper describes the usage of cursors in PowerScript.

Key words:database; cursors; SQL; PowerScript; PowerBuilder

1 游标与PowerScript程序的结合过程

先明确两个概念:结果集与游标指针。所谓结果集指的是游标用SELECT语句执行后所产生的“数据集合”;而游标指针指的是游标在执行语句时的“当前位置”。游标在实际动作过程中主要完成两个步骤,一是利用SELECT语句把数据收集到结果集之中,二是通过挪动它的指针来逐条访问集合中的数据,见图1。

在游标中,SELECT的取值决定了结果集的内容,它逐条取出查询结果集,取值结果赋值给变量,并送给PowerScript语句进行加工处理,因此PowerScript的游标不但控制着这个集合,而且规定了结果集记录的顺序。可以这样说,游标是一条通道,是SQL查询结果集合与PowerScript顺序处理之间的一条通道。通过这条通道,实现PowerScript顺序处理与嵌入式SELECT 查询结果集之间的结合。

2 一段关于游标应用的代码

这是一个关于SELECT语句在游标中查询多行的数据处理的例子。其语法为:

String name

String U1=’A%’

DECLARE C1 CUESOR FOR //定义游标,游标名为C1

SELECT name FROM book//游标所对应的SELECT语句

WHERE book_code like:U1 //变量U1

OPEN C1;//打开游标,并执行此游标所对应的SELECT语句。

Lab1:

FETCH C1 INTO:name;//取出记录,并将游标往后挪动一位

If SQLCA.SQLCODE=0 then //如果取记录成功的话

Goto Lab1 //返回到Lab1处,继续循环过程,直到SQLCODE的值不为零

End If

CLOSE C1;//关闭游标

执行上述代码段,当程序打开游标时,变量U1被’A%’通配符代替,因此,该段代码的执行效果为:

SELECT name

FROM book

WHERE book_code like’A%’

当程序执行完该语句后,把游标指针移到查询结果集中的第一条,并且每次都执行FETCH语句:FETCH C1 INTO:name;

这样顺序循环,游标每取出一个数据,赋值给变量,并把游标的指标后移一位,值到取值结果。有时候,我们希望程序能够按要求的次序进行取值,这种情况下,就需要在SELECT语句中用 ORDER BY 子句把结合集先整理一下,再进行取值。

3 游标的定义与使用

在PowerScript程序中,游标的定义与使用通常分为下面几个步骤进行:声明游标(DECLARE CURSOR)、打开游标(OPEN CURSOR)、推进游标(FETCH CURSOR)和关闭游标(CLOSE CURSOR)。

1)定义游标

其语法格式为:DECLARE Cursor_Name CURSOR FOR SelectStatement {USING TransactionObject};

其中, Cursor_Name 为游标的名称(可以是任意有效的标识符) ,SelectStatement 为SELECT语句,TransactionObject为数据库事务处理对象(PowerBuilder的默认全局事务处理对象为SQLCA)。

该语句只是定义了一个游标,游标中的SELECT语句没有执行,类似于变量的说明。

2)打开游标

其语法格式为:OPEN Cursor_Name;

其中,Cursor_Name是将要打开的游标名,与定义游标不一样的是,该语句执行游标中的SELECT语句,并产生相应的查询结果集。

3)推进游标

其语法格式为:FETCH Cursor_Name INTO VariableList;

其中,Cursor_Name为游标名,VariableList为PowerScript中的变量列表,用于接收游标中当前记录的返回值,应与SELECT指定字段逐一匹配。当执行FETCH 语句后,游标指针后移一位,指向下一条记录。需要注意以下几点:

一是对事务处理对象属性值的判断。对于每次的FETCH执行,需要及时检查事务处理对象的SQLCode属性值,用以判定执行情况,并进行适当的处理。如果SQLCode=0,则表示记录提取成功;如果SQLCode=100, 则表示记录已提取完毕。

二是事务处理对象的使用时机。不能在FETCH语句中使用 USING TransObject子句,正确的使用方法是在DECLARE语句中指定事务处理对象。

三是关于FETCH的语法格式问题。除了默认格式(即,FETCH NEXT)外,还可以使用DBMS所支持的其它格式,比如:FETCH FRIST、FETCH PRIOR或FETCH LAST等,使程序执行更加灵活。

4)关闭游标

其语法格式为:CLOSE Cursor_Name;

其中,Cursor_Name为游标名。使用该语句需要注意的是:被关闭的游标必须是一个已经打开的游标。

4 结束语

作为嵌入式语言的一部分,游标在PowerScript程序中非常有用。如果能从基础入手,不断实践,掌握其方法,必能举一反三,提高编程效率。

参考文献:

[1] 卢守东.PowerBuilder中游标的应用技术[J].电脑开发与应用,2009,22(1):79.

[2] 康博创作室(译).PowerBuilder6.0程序设计大全[M].北京:机械工业出版社,1998.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

上一篇:基于C#的歌曲播放屏幕保护程序设计 下一篇:基于云计算的安全技术研究