CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

数据库 | Oracle | DB2 | SQL Server | MySQL | 商业智能 | BI | DBA | Sybase| SQL Server 2008

您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

讲解基于Oracle高性能动态SQL程序开发

作者: ,  出处:IT专家网社区, 责任编辑: 叶江, 
2007-05-29 08:08
  本文讲解基于Oracle高性能动态SQL程序开发……

  1.静态SQLSQL与动态SQL:

  Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型;另外一种是后期联编(late binding),即SQL语句只有在运行阶段才能建立,例如当查询条件为用户输入时,那么Oracle的SQL引擎就无法在编译期对该程序语句进行确定,只能在用户输入一定的查询条件后才能提交给SQL引擎进行处理。通常,静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式。

  本文主要就动态SQL的开发进行讨论,并在最后给出一些实际开发的技巧。

  2. 动态SQL程序开发:

  理解了动态SQL编译的原理,也就掌握了其基本的开发思想。动态SQL既然是一种”不确定”的SQL,那其执行就有其相应的特点。Oracle中提供了Execute immediate语句来执行动态SQL,语法如下:

  Excute immediate 动态SQL语句 using 绑定参数列表 returning into 输出参数列表;

  对这一语句作如下说明:

  •   1) 动态SQL是指DDL和不确定的DML(即带参数的DML)。
  •   2) 绑定参数列表为输入参数列表,即其类型为in类型,在运行时刻与动态SQL语句中的参数(实际上占位符,可以理解为函数里面的形式参数)进行绑定。
  •   3) 输出参数列表为动态SQL语句执行后返回的参数列表。
  •   4) 由于动态SQL是在运行时刻进行确定的,所以相对于静态而言,其更多的会损失一些系统性能来换取其灵活性。

  为了更好的说明其开发的过程,下面列举一个实例:

  设数据库的emp表,其数据为如下:

  ID NAME SALARY
  100 Jacky 5600
  101 Rose 3000
  102 John 4500

  要求:

  •   1.创建该表并输入相应的数据。
  •   2.根据特定ID可以查询到其姓名和薪水的信息。
  •   3.根据大于特定的薪水的查询相应的员工信息。

  根据前面的要求,可以分别创建三个过程(均使用动态SQL)来实现:

  过程一:

  create or replace procedure create_table
  asbeginexecute immediate 'create table emp
  (id number,name varchar2(10)salary number; )';

  --动态SQL为DDL语句

  insert into empvalues (100,'jacky',5600);
  insert into empvalues (101,'rose',3000);
  insert into empvalues (102,'john',4500);end create_table;

共2页。 1 2 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅


    
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2007, ChinaByte
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i