免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2253 | 回复: 0
打印 上一主题 下一主题

有关全动态SQL,在DB2的SQL过程中能使用SQLDA吗?如果能怎么用? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-10 16:49 |只看该作者 |倒序浏览
全动态的SQL 语句是指这样的语句:在写程序时并不知道SELECT语句的选择项是什么或有多少个,也不知道SQL语句中包含了多少个变量,它们是变化的。全动态SQL支持临时生成的SQL。
我急需在DB2的SQL Stored Procedure中实现全动态SQL,请高手告诉我如何实现。下面是在PB中实现全动态SQL的例子,我需要在DB2的SQL过程中实现类似的功能,我已经山穷水尽了,请高手指点!!

PB中实现的例子:

下面是一个使用动态SQL的例子,此例有一个字符串输入参数,但输出参数的类型和个数不定。

    string ls_sql,ls_val

    integer i,li_boolean

    ls_sql="SELECT * FROM auths WHERE auths_id=?"

    DECLARE c1 DYNAMIC CURSOR FOR SQLSA;

    PREPARE SQLSA FROM :ls_sql;

    DESCRIBE SQLSA INTO SQLDA;

    //若DESCRIBE成功,则输入描述符数组将包含一个输入描述符,

    //在打开游标前必须先给输入描述符赋值。

    SetDynamicParm(SQLDA,1,'A00001')     //这里的“1”表示第一个参数

    OPEN DYNAMIC c1 USING DESCRIPTOR SQLDA;

    lable:

    FETCH c1 USING DESCRIPTOR SQLDA;

    IF SQLCA.SQLCODE=0 THEN //若FETCH成功

     FOR i=1 to SQLDA.NumOutputs  

        //SQLDA.NumOutputs含有输出参数的个数

        CHOOSE CASE SQLDA.OutParmType

        CASE TypeString!

             ls_val=GetDynamicString(SQLDA,i)

        CASE TypeDate!

             ls_val=string(GetDynamicDate(SQLDA,i),'dd mm yyyy')

        CASE TypeTime!

             ls_val=string(GetDynamicTime(SQLDA,i),'hh:mm:ss')

        CASE TypeDataTime!

             ls_val=string(GetDynamicDateTime(SQLDA,i),&

                            'dd mm yyyy hh:mm:ss')

        CASE TypeInteger!,TypeLong!,TypeDecimal!,TypeDouble!,TypeReal!

             ls_val=string(GetDynamicNumber(SQLDA,i))

        CASE TypeBoolean!

             li_boolean=GetDynamicNumber(SQLDA,i)

             IF li_boolean=1 THEN

                ls_val="TRUE"

             ELSE

                ls_val="FALSE"

             END IF

        END CHOOSE

        …… //进行相应处理

     NEXT

     GOTO lable  //取下一条记录

     ENF IF

     CLOSE c1;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP