`
zjut_xiongfeng
  • 浏览: 280176 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Power Builder 中动态SQL语句的写法

阅读更多

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 lsSQL
  LsSQL=”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 lsCode
  lsCode=”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,lsFilter
  LsFilter=”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;
  LOOP
  CLOSE 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,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语句仍是一种非常可取的处理方法。根据我们在实际编程中的体会,正确使用动态SQL语句可使程序代码简练、灵活、通用,不仅降低了初次编程的工作量,而且也降低以后对代码的维护量,能够取得事半功倍的效果。

+++++++++

若在c语言中用到 SQL语句,则要加上exec sql 即可

分享到:
评论

相关推荐

    PowerBuilder下动态SQL语句的使用.pdf

    动态SQL语句在PowerBuilder下的应用非常广泛,例如在农业银行的信贷管理系统和上报人行的信贷登记咨询系统的开发中 đều使用了PowerBuilder和动态SQL语句。 动态SQL语句在PowerBuilder下的使用可以使程序更加灵活...

    PowerBuilder中动态SQL语句的使用.pdf

    在PowerBuilder中,动态SQL语句可以通过 CLOSE、DECLARE、FETCH、OPEN 和 EXECUTE 等语句的动态形式实现。PowerBuilder提供了DynamicStagingArea和DynamicDescriptionArea这两种数据类型来支持动态SQL的使用。...

    PowerBuilder下动态SQL语句的实现.pdf

    标题:“PowerBuilder下动态SQL语句的实现” 描述:“PowerBuilder下动态SQL语句的实现” 标签:“SQL 数据库 数据处理 参考文献 专业指导” 部分内容:“PowerBuilder下动态SQL语句的实现” 知识点: 1. 动态SQL...

    PowerBuilder中动态SQL语句的应用.pdf

    在PowerBuilder中,动态SQL语句是一种重要的技术,它允许程序员在程序运行时构造和执行SQL语句,而不是在编译时确定,这为开发提供了灵活性。 动态SQL语句主要有四种类型,每一种类型针对不同的应用场景,下面是...

    浅析PowerBuilder下动态SQL语句.pdf

    PowerBuilder 动态SQL语句应用分析 PowerBuilder 是目前最流行的开发工具之一,广泛应用于各个行业,包括银行、证券、保险等金融行业。PowerBuilder 提供了动态 SQL 语句的功能来支撑对数据库的访问。但是,传统的...

    PowerBuilder中动态SQL语句的实现 (1).pdf

    在PowerBuilder中,动态SQL语句的实现是解决编译时不确定SQL参数问题的关键技术,它使得程序设计更具灵活性和通用性。以下将详细介绍PowerBuilder中的动态SQL语句及其应用格式。 1. 动态SQL语句的应用格式: 动态...

    PowerBuilder中动态SQL的实现.pdf

    动态SQL在数据库操作中是非常重要的概念,尤其在PowerBuilder这样的数据库开发工具中,它允许开发者在程序运行时动态地构造SQL语句,从而提高了程序的灵活性和适应性。在张长伟所著的《PowerBuilder中动态SQL的实现....

    PowerBuilder动态SQL语句及在组合查询中的应用.pdf

    "PowerBuilder动态SQL语句及在组合查询中的应用" 本文主要介绍PowerBuilder中的动态SQL语句的使用和在组合查询中的应用。PowerBuilder不仅支持在PowerScript中使用标准嵌入式SQL语句,而且支持使用动态SQL语句。...

    在PowerBuilder中使用动态SQL语句访问数据库.pdf

    本文将详细介绍在PowerBuilder中如何使用动态SQL语句访问数据库,并对其语法格式和使用方法展开讨论。 首先,文章指出PowerBuilder传统上提供的嵌入式SQL语句虽然能够支持标准SQL语句的执行,但具有局限性,例如...

    在PowerBuilder中使用动态SQL.pdf

    在 PowerBuilder 中,开发者可以通过使用 EXECUTE IMMEDIATE 语句来执行动态 SQL 语句,并且可以使用 DynamicStagingArea 和 DynamicDescriptionArea 两种数据类型来实现动态 SQL。通过了解动态 SQL 的基础知识和...

    PowerBuilder9.0基础开发篇第05章使用sql语句.pdf

    此章为PowerBuilder9.0基础开发篇05使用sql语句.pdf 此章为PowerBuilder9.0基础开发篇05使用sql语句.pdf此章为PowerBuilder9.0基础开发篇05使用sql语句.pdf

    powerbuilder11.0动态库

    综上所述,"powerbuilder11.0动态库"是PowerBuilder 11.0开发环境中不可或缺的部分,包含了运行PowerBuilder应用所需的全部运行时支持。这个压缩包中的文件11.0动态库应该包含了一系列的DLL文件,它们是PowerBuilder...

    Powerbuilder 嵌入式SQL常规用法

    总结来说,在PowerBuilder中使用嵌入式SQL时,需要注意正确设置数据库连接、合理控制自动提交功能、妥善处理异常情况,并在操作前后做好必要的数据验证工作。这样不仅能提高程序的健壮性和用户体验,还能确保数据库...

    PB动态SQL语句

    PB 动态 SQL 语句是 PowerBuilder 中的一种重要功能,可以克服嵌入式 SQL 语句的局限性,实现参数化设计和灵活性。动态 SQL 语句可以在执行时确定要执行的 SQL 语句,具有很大的灵活性和通用性。 一、动态 SQL 语句...

    powerbuilder sqlserver 数据库备份

    在PowerBuilder中进行SQL Server数据库备份,你需要使用SQL语句或者通过DataWindow对象来实现。SQL Server支持多种备份类型,包括完整备份、差异备份、日志备份等。完整备份会复制所有数据库的数据和日志,而差异...

    PB中动态SQL语句研究与应用.pdf

    在PB(PowerBuilder)中,动态SQL语句是处理数据库交互操作中非常重要的一种技术。动态SQL允许开发者在程序运行时构建SQL语句,并且可以执行那些嵌入式SQL不支持的特定数据库管理系统的SQL语句。本文将分析和研究四...

    基于PowerBuilder前端的SQL Server网络数据库开发(二) (1).pdf

    数据窗口是PowerBuilder中的一个对象,它可以根据用户的要求自动生成一组嵌入式SQL语句,从SQL Server数据库的表中提取数据,并将结果以用户设定的格式显示在客户机上,同时可以对表格进行插入、修改、删除、统计等...

    powerbuilder11.5连接Oracle数据库的通用方法。

    ### PowerBuilder 11.5 连接 Oracle 数据库与 SQL Server 2000 的通用方法 在软件开发过程中,数据库的连接是至关重要的一步。PowerBuilder 是一款功能强大的快速应用开发工具,广泛应用于企业级应用开发。本文将...

    基于动态SQL语句生成的数据检索技术.pdf

    4. PowerBuilder中动态SQL语句的四种类型:Execute Immediate、Prepare Dynamic Staging Area、Declare Dynamic Cursor和Describe Dynamic Staging Area。 5. 动态SQL语句技术的实现原理:通过动态生成SQL语句,...

Global site tag (gtag.js) - Google Analytics