动态SQL语句的应用分析

转载 2007年09月26日 14:56:00

动态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是在编写PL/SQL过程时经常使用的方法之一。很多情况下,比如根据业务的需要,如果输入不同查询条件,则生成不同的执行 SQL查询语句,对于这种情况需要使用动态SQL来完成。再比如,对于...
  • zy_281870667
  • zy_281870667
  • 2016年06月15日 16:45
  • 2513

Mybatis使用之动态SQL语句

摘要: Mybatis动态SQL语句可帮助我们根据需要动态拼接SQL语句。主要在配置文件中使用 标签来实现。...
  • chenghuaying
  • chenghuaying
  • 2015年05月20日 22:21
  • 2017

PB动态SQL语句

PowerBuilder的嵌入式SQL语句只能支持一些固定的标准的SQL语句,即在进行程序代码编译处理时这些SQL语句必须是确定的,另外这种方式也不能执行像Creat Table,Creat Data...
  • u013274086
  • u013274086
  • 2016年01月18日 10:20
  • 1268

MyBatis学习总结(11)——MyBatis动态Sql语句

MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if cho...
  • u012562943
  • u012562943
  • 2016年01月05日 11:23
  • 2135

Oracle 动态SQL语句

EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包.  它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,E...
  • G15738290530
  • G15738290530
  • 2016年07月04日 12:18
  • 5033

简化动态MERGE的SQL计算

MSSQL,ORACLE等数据库支持MERGE语句更新表,但表结构未知时,由于缺乏集合类数据,用存储过程获得表结构再动态拼出SQL非常麻烦,代码会有几十行之多;同样原因,用Java等高级语言实现也不简...
  • u012388497
  • u012388497
  • 2015年08月18日 08:23
  • 664

SQL语句执行效率及分析

 1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 20...
  • Liu_jinchun
  • Liu_jinchun
  • 2017年01月03日 15:04
  • 1664

MYSQL sql 语句性能分析

在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描,这些都需要通过E...
  • u011244446
  • u011244446
  • 2017年03月06日 23:08
  • 1346

配置Mybatis的动态sql语句

今天项目经理让我们做一个Mybatis的动态sql语句配置文件 要求如下: (1).提交个多个(3个以上)条件的查询的mapper配置文件。 当参数不传则不作为查询的条件 (2).insert ,u...
  • yesz12358
  • yesz12358
  • 2016年08月03日 13:32
  • 932

详解利用EXPLAIN分析sql语句的性能

explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 先解析一条sql语句,看出现什么内容 EXPLAINSELECTs.ui...
  • Solmyr_biti
  • Solmyr_biti
  • 2017年01月09日 21:55
  • 5215
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态SQL语句的应用分析
举报原因:
原因补充:

(最多只允许输入30个字)