当前位置: 首页 > 图文教程 > 数据库 > Oracle > 基于Oracle高性能动态SQL程序开发

Oracle
常见的一些Oracle初学者的问题
ORACLE认证系统概述
数据库考试简介:Oracle认证
Oracle认证基础知识介绍
ADO连接Oracle Access示例及记录集处理源码
SQL Server和MySQL的安全性分析
用Oracle和SQL Server数据库组合利弊分析
Oracle 11g分区功能新革命
Flashback Query 恢复误删除的数据
基于Oracle高性能动态SQL程序开发
怎样在Oracle 9i中正确的转换时区
Oracle 10g导出的数据库能否导入Oracle 9i?
增加Distinct后查询效率反而提高
Oracle限制返回结果集的大小
Java语言数据库操作的基本流程
美国甲骨文(ORACLE)公司入驻渝中区大都会商厦
RHEL AS4上安装oracle 10R2 的方法
DB中如何查询Table占用空间的大小
编写高质量高性能的MySQL语法
Oracle数据库自动备份的具体实现步骤

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 100 ::
收藏到网摘: n/a

1.静态SQLSQL与动态SQL

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

2. 动态SQL程序开发:

 

 

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

对这一语句作如下说明:

(1) 动态SQL是指DDL和不确定的DML(即带参数的DML)。

(2) 绑定参数列表为输入参数列表,即其类型为in类型,在运行时刻与动态SQL语句中的参数(实际上占位符,可以理解为函数里面的形式参数)进行绑定。

(3) 输出参数列表为动态SQL语句执行后返回的参数列表。

(4) 由于动态SQL是在运行时刻进行确定的,所以相对于静态而言,其更多的会损失一些系统性能来换取其灵活性。

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

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

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;

过程二:

create or replace procedure find_info(p_id number)
asv_name varchar2(10);v_salary number;beginexecute
immediate 'select name,salary from empwhere id=:1'
using p_idreturning into v_name,v_salary;
--动态SQL为查询语句dbms_output.put_line
(v_name ||'的收入为:'||to_char(v_salary));
exceptionwhen others thendbms_output.put_line('找不到相应数据');
end find_info;

过程三:

create or replace procedure find_emp(p_salary number)
asr_emp emp%rowtype;type c_type is ref cursor;c1 c_type;
beginopen c1 for 'select * from empwhere salary >:1'
using p_salary;loopfetch c1 into r_emp;exit when
c1%notfound;dbms_output.put_line
('薪水大于‘||to_char(p_salary)||’的员工为:‘);
dbms_output.put_line('ID为'to_char(r_emp)||'
其姓名为:'||r_emp.name);end loop;close c1;end create_table;