您的位置: 旅游网 > 明星

浅析PowerBuilder下动态SQL语句

发布时间:2019-12-05 06:38:13

(四)第四种格式

当执行有输入参数并且返回结果集的格式在编译时无法确定的SQL语句时可以使用第四种格式。有时候我们执行一些SQL语句时,不仅带有参数而且返回的结果集中有多少个字段,每个字段是什么类型的数据都不确定,这时只能使用第四种格式来实现。

1语法

PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};

DESCRIB DynamicStagingArea INTO DynamicDescriptionObject;

DECLARE cursor DYNAMIC CURSOR FOR DynamicDescriptionObject;

OPEN DYNAMIC cursor USING DESCRIPTOR DynamicDescriptionObject;

FETCH cursor USING DESCRIPTOR DynamicDescriptionObject;

CLOSE cursor;

其中:DynamicDescriptionObject是PowerBuilder提供的一个数据类型,在PowerBuilder中提供了一个DynamicDescriptionObject类型的全局数据类型SQLDA,用来存放动态SQL语句的输入输出参数。

2应用实例

将一个表中满足过滤条件的记录的所有字段取出来分别进行处理,表名在程序运行中由字符串变量传递,字段信息是不确定的。这里我们假设通过字符串变量中传递的表名是base。

STRING lsString,lsSQL,lsTable,lsColumn

INT liInt

DATETIME liTime

LsSQL=”SELECT*FROM base WHERE code like?”

PREPARE SQLSA FROM lsSQL;

DESCRIB SQLSA INTO SQLDA;∥SQLDA中含有输入参数的描述

DECLARE cursor_base DYNAMIC CURSOR FOR SQLSA;

SetDynamicparm(SQLDA,1,”32%”)∥传递参数值

OPEN DYNAMIC cursor_base USING DESCRIPTOR SQLDA;

FETCH cursor_base USING DESCRIPTOR SQLDA;

DO WHILE SALCA.SQLCODE=0

FOR liInt=1 TO SQLDA.NumOutPuts

CHOOSE CASE SQLDA.OutParmType[liInt]

CASE Typestring!

lsString=GetDynamicString(SQLDA,liInt)

∥处理该字符型的字段

CASE TypeDateTime

LsDateTime=GetDynamicDateTime(SQLDA,liInt)

∥处理该日期型的字段

... ∥处理其他类型的字段

... END CHOOSE

NEXT

∥将一条记录的所有字段取完后作相应的处理

FETCH cursor_base USING DESCRIPTOR SQLDA;

LOOP

CLOSE cursor_base;

二、结束语

从上面的说明和举例中可以看出动态SQL的特点是功能强,使用灵活,完全可以在程序代码中动态地生成具体要执行的SQL语句,是嵌入式SQL无法比拟的。当然动态SQL语句在运行速度上可能要比嵌入式SQL语句略慢一点,但随着计算机处理速度的大幅度提高,现在来说这一点已不成什么问题。因此,使用动态SQL语句仍是一种非常可取的处理方法。

查看本文来源

心律失常乏力吃什么药
吃立可安能改善肠道感染吗
康缘药业总部在哪里
儿童用咳嗽药无禁忌成分
猜你会喜欢的
猜你会喜欢的