科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件浅析PowerBuilder下动态SQL语句

浅析PowerBuilder下动态SQL语句

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

动态SQL的特点是功能强,使用灵活,完全可以在程序代码中动态地生成具体要执行的SQL语句,是嵌入式SQL无法比拟的。

作者:51cto.com整理 来源:51cto.com 2007年9月15日

关键字: 软件

  • 评论
  • 分享微博
  • 分享邮件

(四)第四种格式

当执行有输入参数并且返回结果集的格式在编译时无法确定的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语句仍是一种非常可取的处理方法。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章