前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

浅析PowerBuilder下动态SQL语句 - 51CTO.COM 首页技术频道51CTO旗下网站地图 社区:学院下载论坛博客更多 网络 安全 开发 数据库 服务器 系统 虚拟化 云计算 嵌入式 移动开发 51CTO.COM CIOage.com WatchStor.com HC3i.cn 灵客风LinkPhone 首页 | Java | .NET | Web | XML | 语言工具 | 测试 | 游戏 | 移动 | 架构 | 项目管理 | 全部文章 您所在的位置:开发 > 语言&工具 > 浅析PowerBuilder下动态SQL语句 浅析PowerBuilder下动态SQL语句 2005-09-21 11:23 51cto.com整理 51cto.com 我要评论(0) 字号:T | T 动态SQL的特点是功能强,使用灵活,完全可以在程序代码中动态地生成具体要执行的SQL语句,是嵌入式SQL无法比拟的 AD: PowerBuilder是目前最流行的数据库开发工具之一。PowerBuilder提供了在程序代码中加入嵌入式SQL语句的功能来支持对数据库的访问。但这种嵌入式SQL语句只能支持一些固定的标准的SQL语句,即在进行程序代码编译处理时这些SQL语句必须是确定的,另外这种方式也不能执行像Creat Table,Creat Database等这些数据库定义的语句(DDL)。因此这种嵌入式SQL语句在实际应用中有一定的局限性。为克服这种方式的局限性,可以使用PowerBuilder提供的动态SQL语句,这种对数据库访问的方式可以完成嵌入式SQL语句无法实现的功能。如建库、建表这一类的数据库定义语句(DDL);其次,由于动态SQL语句允许在执行时才确定到底要执行怎样的SQL语句,因此使用动态SQL语句可以使程序实现参数化设计,具有很大的灵活性和通用性。一、动态SQL语句的应用分析 PowerBuilder提供了四种格式的动态SQL语句,每种格式都有自己不同的特点和作用。(一)第一种格式当执行没有输入参数并且没有返回结果集的SQL语句时可以使用这种格式,这种格式使用比较简单,其实现的操作也比较少。1语法EXECUTE IMMEDIATE SQLStatement{USING TransactionObject};其中SQLStatement是要执行的SQL语句,可以直接用引号将要执行的SQL引起来用,或者用字符串变量的形式提供SQL语句。通过使用字符串变量可以在具体执行的时候才指定要执行什么样的SQL语句。TransactionObject是用户所使用的事务对象,缺省为SQLCA。2应用实例①建立一张数据库表(base),SQL语句的表述用引号引起来直接使用。EXECUTE IMMEDIATE‘CREATE TABLE base(code char(6),name char(30))’USING SQLCA;②执行对数据库记录的操作,在表base中插入一条记录,SQL语句通过字符串变量传递执行语句。STRING lsSQLLsSQL=”INSERT INTO TABLE base VALUES(’320201’,’市中区支行’)”EXECUTE IMMEDIATE:lsSQL;(二)第二种格式当执行带输入参数但没有返回结果集时的SQL语句可以采用第二种格式。该格式不仅可以动态地指定要执行的SQL语句,同时还可以动态地确定SQL语句所需要的参数值。1语法PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};EXECUTE DynamicstagingArea{USING Parameterlist};其中:DynamicstagingArea是PowerBuilder提供的一种数据类型。PowerBuilder本身提供了一个名字为SQLSA的DynamicstagingArea类型的全局变量,用于保存要执行的动态SQL语句信息。2应用实例删除base表中的满足一定条件的记录。STRING lsCodelsCode=”320101”PREPARE SQLSA FROM“DELETE base WHERE code=?”;EXECUTE SQLSA USING:lsCode; (三)第三种格式当执行有输入参数并且返回结果集的格式在编译时可以确定的SQL语句时可以使用第三种格式。这种格式语法比较复杂,但要比前面两种功能强,可以返回结果集。在返回结果时由于不知道满足过滤条件的记录到底有多少条,因此第三种格式通常采用游标的形式。1语法DECLARE cursor DYNAMIC CURSOR FOR DynamicStagingArea;PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};OPEN DYNAMIC cursor {USING Parameterlist};FETCH cursor INTO VariableList;CLOSE cursor;其中cursor是用户所定义的游标的名字。2应用实例将表base中的code字段中间两位为”01”的所有记录读取出来并分别进行相应处理。STRING lsSQL,lsCode,lsName,lsFilterLsFilter=”01”LsSQL=”SELECT code,name FROM base WHERE substring(code,3,2)=?”DECLARE cursor_base DYNAMIC CURSOR FOR SQLSA;PREPARE SQLSA FROM:lsSQL;OPEN DYNAMIC cursor_base USING:lsFilter;FETCH cursor_base INTO:lsCode,:lsName;DO WHILE SQLCA.SQLCODE=0 . ∥对满足条件的记录根据要求分别进行处理 . FETCH cursor_base INTO:lsCode,:lsName;LOOPCLOSE cursor_base; (四)第四种格式当执行有输入参数并且返回结果集的格式在编译时无法确定的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,lsColumnINT liIntDATETIME liTimeLsSQL=”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 TypeDateTimeLsDateTime=GetDynamicDateTime(SQLDA,liInt)∥处理该日期型的字段... ∥处理其他类型的字段... END CHOOSENEXT∥将一条记录的所有字段取完后作相应的处理FETCH cursor_base USING DESCRIPTOR SQLDA;LOOPCLOSE cursor_base;二、结束语从上面的说明和举例中可以看出动态SQL的特点是功能强,使用灵活,完全可以在程序代码中动态地生成具体要执行的SQL语句,是嵌入式SQL无法比拟的。当然动态SQL语句在运行速度上可能要比嵌入式SQL语句略慢一点,但随着计算机处理速度的大幅度提高,现在来说这一点已不成什么问题。因此,使用动态SQL语句仍是一种非常可取的处理方法 给力 (0票) 动心 (0票) 废话 (0票) 专业 (0票) 标题党 (0票) 路过 (0票) 原文:浅析PowerBuilder下动态SQL语句 返回开发首页 分享到: --> 收藏|打印|复制 关于SQL的更多文章 6.13 小结6.12 别"重造轮子"6.11.3 错误和数据库事件触发6.11.2 挂起事件触发器6.11.1 服务器错误触发器 网站常见的攻击与防御 【导读】网站已成为黑客攻击的主要目标,有效地防范成为亟待解决[详细] 网友评论TOP5 查看所有评论() 提交评论 栏目热门 更多>> 2012年1月编程语言排行榜:Objective-C成为 十种可能改变IT行业走向的编程语言 回顾过去一年中编程语言领域的起起落落 2012最受企业欢迎的开发技能Top10 一个站在技术之巅的女游戏程序员 同期最新 更多>> 构建JSP、PHP与JAVA融为一体的开发环境 在PB中使用FoxPro数据库的方法 pb中压缩整理access数据库文件(mdb) 使用PowerBuilder同时访问多个数据库 分布式PowerBuilder工作原理和流程 开发 频道导航 Java Java开发|Java基础|Java EE开发|Java框架|设计模式 WEB开发 PHP开发|Python|Ruby|JSP|HTML 5|DIV+CSS 综合 .NET开发|嵌入式开发|项目管理|架构设计 热点推荐 Android开发应用详解 那些性感的让人尖叫的程序员 HTML5 下一代Web开发标准详解 高性能WEB开发应用指南 Ubuntu开源技术交流频道 热门标签: windows频道移动开发云计算objective-ctp-link路由器设置图解html5 头条 《开发月刊》2013年11月刊发布 设备和服务体验有了根本性的变革,才能改变行业对软件开发的处理方式。本期《开发月刊》… 《开发月刊》2013年10月刊发布《开发月刊》2013年8月刊发布 文章排行 本月本周24小时 那些出现在电影中的程序代码 Eclipse插件大全 挑选最牛的TOP30 天猫程序猿高端算法找妹子 Java数组声明、创建、初始化 十步完全理解SQL 详解Java解析XML的四种方法 浏览器中关于事件的那点事儿 Linux安装JDK详细步骤 Java之父逐个评价甲骨文对Sun技术的处 被高估人士的七个习惯 那些出现在电影中的程序代码 Java之父逐个评价甲骨文对Sun技术的处 浏览器中关于事件的那点事儿 Zeus作者-淘宝徐恒飞访谈实录 为网页设计师准备的10个在线的HTML5设 Java 8最终发布日期敲定,有bug也要发 如果创业成功靠的是运气 学会说No!你该在什么时刻真正放弃一位 软件开发中团队首领的好坏之分 极客公园创新2014:新硬件互联网精神路 天猫程序猿高端算法找妹子 别再羡慕硅谷的食堂了,那是个“阴谋” 熊猫烧香作者的人生病毒 变身成功独立软件开发人的十五条秘诀 原生JavaScript技巧大收集100(上) 动手探究Java内存泄露问题 那些出现在电影中的程序代码 各式各样的极品程序员,你属于哪一种 2014年1月编程语言:Transact-SQL登年度 从编程语言排行看程序员信仰 热点专题 更多>> Java Swing编程基础与 Swing是一个用于开发Java应用程序用户界面的开发工具 JVM垃圾回收与性能调 什么是性能调优?对性能调优,不同的人有不同的理解, HTML 5的SEO探索 如果在过去的几个月里你比较关注WEB的发展的话,你一 热点标签 编程语言排行榜 敏捷开发 Eclipse 3.6 PHP设计模式 NetBeans 7 Java7 Scala编程语言 Python编程世界 Ruby On Rails开发 LINQ ASP.NET视频教程 Visual Studio 智能手机 软件下载 点击这里查看样刊 全站热点 Sun Java在Ubuntu上依然绽放光芒 浏览器正在成为你的新视界吗? .NET应用架构设计:原则、模式与实践 有为才有位 话语操纵术II 别找了,成功的钥匙就在你身上 赛门铁克:“分期付款”非官方行为 读书 网管员必读—-网络安全 本书共10章,介绍的内容包括恶意软件(包括病毒、木马和蠕虫等)的深度防御方法,黑客的主要类型和防御方法,企业网络内、外部网 PHP程序开发范例宝典 SQL Server 2005中文版精粹 精通JavaScript动态网页编程(实例版) 征服Python—语言基础与典型应用 博文推荐 更多>> asp.net MVC2 初探十四详解网络系统的搭建案例使用xen-shell来管理xen vps组策略 从入门到精通 (八)使客户端 最新热帖 更多>> 【绝对精品】H3CIE 吕大师之BGP路由【绝对精品】H3CIE 吕大师之BGP路由H3C模拟器 simware咱公司的那位CCIE,让我好寒心H3CSE最新5.1培训课件 51CTO旗下网站 领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 移动互联网生活门户 灵客风LinkPhone