1、确保比较运算中的数据类型相同
下面例子比较了采用不同数据类型的代价,也就是在if语句中将一个数字类型的数据类型和
字符值进行比较。
程序1:
create or replace procedure test_if(p_condition_num number) as
lv_temp_num number := 0;
lv_temp_cond_num number := p_condition_num;
begin
for lv_cont_num in 1..100000 loop
if lv_temp_cond_num = '1' then
lv_temp_num := lv_temp_num + 1;
elsif lv_temp_cond_num='2' then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num='3' then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num='4' then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num='5' then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num='6' then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num='7' then
lv_temp_num :=lv_temp_num+1;
else
lv_temp_num :=lv_temp_num+1;
end if;
end loop;
end;
SQL> exec test_if(8);
PL/SQL procedure successfully completed.
Elapsed: 00:00:17.43
将上面过程中参与比较的数值采用相同的数据类型,执行速度明显加快
程序2:
create or replace procedure test_if(p_condition_num number) as
lv_temp_num number := 0;
lv_temp_cond_num number := p_condition_num;
begin
for lv_cont_num in 1..10000000 loop
if lv_temp_cond_num = 1 then
lv_temp_num := lv_temp_num + 1;
elsif lv_temp_cond_num=2 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=3 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=4 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=5 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=6 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=7 then
lv_temp_num :=lv_temp_num+1;
else
lv_temp_num :=lv_temp_num+1;
end if;
end loop;
end;
SQL> exec test_if(8);
PL/SQL procedure successfully completed.
Elapsed: 00:00:12.77
如果确保同属于一类数值类型的比较值具有相同的子数据类型,因此,在程序2中if语句中的
比较量和1、2、3等进行比较,也就是将number类型与pls_integer类型进行比较。这仍然
将导致Oracle类型转化的开销,要消除这种开销,应当将1、2、3等数改成1.0、2.0、3.0
等值,这样速度就能进一步提高:
程序3:
create or replace procedure test_if(p_condition_num number) as
lv_temp_num number := 0;
lv_temp_cond_num number := p_condition_num;
begin
for lv_cont_num in 1..10000000 loop
if lv_temp_cond_num = 1.0 then
lv_temp_num := lv_temp_num + 1;
elsif lv_temp_cond_num=2.0 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=3.0 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=4.0 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=5.0 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=6.0 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=7.0 then
lv_temp_num :=lv_temp_num+1;
else
lv_temp_num :=lv_temp_num+1;
end if;
end loop;
end;
SQL> exec test_if(8);
PL/SQL procedure successfully completed.
Elapsed: 00:00:08.07
2、使用pls_integer数据类型进行整数运算
声明数值类型的通用标准是使用number类型,在pl/sql 2.2版本中,oracle引入了pls_integer
数据类型。这种数据类型可以用于代替各种数值数据系列类型的声明,只要变量的值是一个整数,
并且在-2147483647到+2147483647的范围内。pls_integer可以使用更少的内部命令来处理,所以
使用这种数据类型就可以提高性能。
下面将前面的例子中的number数据类型改为pls_integer
程序4:
create or replace procedure test_if(p_condition_num pls_integer) as
lv_temp_num pls_integer := 0;
lv_temp_cond_num pls_integer := p_condition_num;
begin
for lv_cont_num in 1..10000000 loop
if lv_temp_cond_num = 1 then
lv_temp_num := lv_temp_num + 1;
elsif lv_temp_cond_num=2 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=3 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=4 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=5 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=6 then
lv_temp_num :=lv_temp_num+1;
elsif lv_temp_cond_num=7 then
lv_temp_num :=lv_temp_num+1;
else
lv_temp_num :=lv_temp_num+1;
end if;
end loop;
end;
SQL> exec test_if(8);
PL/SQL procedure successfully completed.
Elapsed: 00:00:05.61
附注:如果将一个带有小数的数字赋值给一个pls_integer变量,那么这个值将取整为一个
整数,就像对这个数字运行了round取整函数一样。
分享到:
相关推荐
综上所述,《PL/SQL开发手册》不仅涵盖了PL/SQL的基本语法和编程技巧,还深入探讨了数据库对象管理、性能优化、测试调试等多个方面,为Oracle初学者提供了一站式的开发指南。无论是希望提升数据库技能的专业人士,...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与Procedural Language的控制结构,用于在Oracle数据库环境中...通过深入学习和实践,你可以提升在Oracle数据库环境中使用PL/SQL进行开发和优化的能力。
总的来说,"ORACLE PL/SQL 804+中文补丁"是为了优化中文用户在8.0.4版本下使用PL/SQL进行数据库开发的体验,确保语言环境的顺畅,同时保留PL/SQL的强大功能,帮助开发人员更高效地完成数据库应用的开发和维护工作。
它由Oracle公司开发,主要在Oracle数据库环境中使用。通过PL/SQL,用户可以编写存储过程、函数、触发器等复杂的业务逻辑,提高数据处理的效率和安全性。 ### 二、PL/SQL 8.0版本特性 PL/SQL 8.0是PL/SQL的一个重要...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和Procedural Language的控制结构,使得数据库管理员和开发人员能够创建复杂的数据处理逻辑和应用程序。本篇将深入探讨Oracle PL/SQL的最佳实践,...
PL/SQL Developer 支持对 XMLTYPE 数据类型的处理。 ##### 6.8 直接查询导出 导出查询结果到文件中。 ##### 6.9 保存 SQL 脚本 保存编写的 SQL 语句作为脚本文件。 ##### 6.10 创建标准查询 创建经常使用的查询...
- **定义**: 在 SQL 或 PL/SQL 代码中使用特殊符号来表示变量。 - **用途**: 用于在运行时动态替换变量值,增强代码灵活性。 #### 四、测试程序 ##### 4.1 创建测试脚本 - **脚本**: 用于验证 PL/SQL 对象功能正确...
PL/SQL程序在解释时会检查引用的表名、列名和数据类型,确保程序的正确性。它可以被SQL*PLUS直接使用,也可以在高级语言中嵌入,或者在Oracle的开发工具中运行,甚至其他开发工具如PowerBuilder也能调用PL/SQL过程和...
理解并正确使用这些数据类型是编写有效PL/SQL程序的基础。 5. **流程控制语句**:PL/SQL提供了IF...THEN...ELSE、CASE、FOR循环、WHILE循环等流程控制结构,用于根据条件执行不同的代码段或重复执行某段代码。 6. ...
总结而言,《PL/SQL Developer 7.1用户手册》全面介绍了这款软件的各项功能和使用技巧,对于希望在Oracle数据库环境中高效开发和管理数据库应用程序的开发者而言,是一份不可或缺的操作指南。通过学习和掌握手册中的...
#### 5.4 在PL/SQL中使用SQLCODE, SQLERRM SQLCODE和SQLERRM是两个系统变量,分别用于返回最后执行的SQL语句的错误代码和错误消息。这些变量可以用于调试和日志记录目的。 ### 第六章 存储函数和过程 #### 6.1 ...
- 在控制面板中选择“卸载程序”,找到 PL/SQL Developer 并进行卸载操作。 #### 三、登录到 Oracle 数据库 - 启动 PL/SQL Developer 后,需要连接到 Oracle 数据库。 - 输入用户名、密码以及数据库连接字符串等...
- **替换变量**:在PL/SQL Developer等开发环境中,替换变量允许用户在运行时输入动态值。 - **绑定变量**:绑定变量用于在SQL语句中代替具体的值,可以提高性能并防止SQL注入攻击。 综上所述,掌握这些PL/SQL最佳...
- **PL/SQL Developer**是一款专为Oracle数据库设计的强大集成开发环境(IDE),它提供了丰富的功能来帮助开发者高效地进行PL/SQL编程。 - 该版本(7.0)发布于2006年1月,旨在提升Oracle应用开发者的生产力。 ####...
在PL/SQL开发环境中,当遇到不熟悉的概念或者需要查询特定函数用法时,通常可以通过按F1快捷键来获取帮助。如果当前环境没有内置的PL/SQL帮助文档,用户可以主动下载。描述中提到的"download"步骤就是指这个过程,即...
在PL/SQL中,可以定义各种数据类型,包括标准数据类型如NUMBER、VARCHAR2、DATE,以及自定义的复合数据类型。 复合数据类型,如`emp_record_type`,通常是在PL/SQL块中定义的记录类型,可以包含多个字段,每个字段...
《PL/SQL语言优化以及编程培训教材》是一份详尽且深入的学习资源,旨在帮助用户提升在Oracle数据库环境中使用PL/SQL的技能和效率。PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库系统...
在IT领域,特别是数据库管理与开发中,PL/SQL(Procedural Language for SQL)是一种增强版的SQL语言,主要用于Oracle数据库,它结合了过程化编程语言的特点与SQL的数据操作能力,使得数据库开发者能够编写复杂的...
### PL/SQL Developer 6.0:...通过上述介绍可以看出,PL/SQL Developer 6.0 不仅是一个强大的开发工具,还提供了丰富的功能来支持整个开发周期中的不同阶段。无论是初学者还是经验丰富的开发者,都可以从中受益。