存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
1. 为什么使用绑定变量?
这是解决Oracle应用程序可伸缩性的一个关键环节;而Oracle的共享池就决定了开发人员必须使用绑定变量;如果想要Oracle 运行减慢,甚至完全终止,那就可以不用绑定变量;
这里举例说明上述问题;
为了查询一个员工代号是123,你可以这样查询:
select * from emp where empno=’123’;
你也可以这样查询:
select * from emp where empno=:empno;
象我们往常一样,你查询员工’123’一次以后,有可能再也不用;接着你有可能查询员工’456’,然后查询’789’等等;如果查询使用象第一个查询语句,你每次查询都是一个新的查询(我们叫它硬编码的查询方法);因此,Oracle每次必须分析,解析,安全检查, 优化等等;
第二个查询语句提供了绑定变量:empno,它的值在查询执行时提供,查询经过一次编译后,查询方案存储在共享池中,可以用来检索和重用;在性能和伸缩性方面,这两者的差异是巨大的,甚至是惊人的;通俗点讲,就不是一个级别;
第一个查询使用的频率越高,所消耗的系统硬件资源越大,从而降低了用户的使用数量;它也会把优化好的其它查询语句从共享池中踢出;就象一个老鼠坏了一锅汤似的,系统的整体性能降低; 而执行绑定变量,提交相同对象的完全相同的查询的用户(这句话,大家听起来比较难理解,随后我会给出详细的解释),一次性使用就可重复使用,其效率不言耳语; 打个形象的比喻来说,第一个查询就象一次性使用的筷子,而第二个查询象是铁筷子,只要洗干净,张三李四都能用,合理有效地使用了资源;
2、关于Oracle数据库的参数绑定性能实践的一个实例简介。
AD:
从Oracle的SGA的构成来看,它是推崇使用参数绑定的。使用参数绑定可以有效的使用Share
Pool,对已经缓存的SQL不用再硬解析,能明显的提高性能。
具体实践如下:
SQL>create table test (a number(10));<
再创建一个存储过程:
create or replace procedure p_test is
i number(10);
begin
i := 0;
while i <= 100000 loop
execute immediate ' insert into test values (' || to_char(i) || ')';
i := i + 1;
end loop;
commit;
end p_test;
先测试没有使用参数绑定的:
运行 p_test 后,用时91.111秒。
再创建一个使用参数绑定的:
create or replace procedure p_test is
i number(10);
begin
i := 0;
while i <= 100000 loop
execute immediate ' insert into test values (:a)'
using i;
i := i + 1;
end loop;
commit;
end p_test;
运行 p_test 后,用时55.099秒。
从上面的运行时间可以看出,两者性相差 39.525%,可见,用不用参数绑定在性能上相差是比较大的。
3、那么使用语句参数的方式,和使用字符串处理函数的方式相比,有什么好处呢?主要有以下三点:
(1) 使用“语句参数”方式,具有更高的安全性,可以有效防止“SQL注入攻击”。 “SQL注入攻击”要想达到目的,就必须让attack value随着SQL命令字符串一起传送进SQL解析器。黑客如果在一条SQL命令字符串被送入到sqlite3_prepare函数之前,利用c字符串处理函数等途径将attack value注入其中,而在sqlite3_prepare函数之中进行解析(parse),就可以达到攻击目的。而使用“语句参数”方式,被传送到sqlite3_prepare函数的只是SQL命令字符串中的参数符号(如:“?”),而不是具体的值。在sqlite3_prepare函数执行之后,才会使用bind函数给参数符号绑定具体的值,这就可以避免attack value随着SQL命令字符串一起在sqlite3_prepare函数中被解析,从而有效躲避“SQL注入攻击”。
(2)使用“语句参数”方式,可以更快的完成值替换。
(3)使用“语句参数”方式,更节省内存。原因是使用如snprintf函数,需要一个SQL命令模板,一块足够大的输出缓存,而且字符串处理函数需要工作内存(working memory),除此之外对于整形,浮点型,特别是BLOBs,经常会占用更多的空间。
相关推荐
2. **Layer与数据库的绑定**:在连接成功后,需要使用`Map.Datasets.Add`方法来建立图层与数据库表之间的联系。此方法接受多个参数,每个参数都有特定的功能: - `Type`:指定数据源类型,例如miDataSetADO表示...
为什么使用绑定变量? 绑定变量是解决 Oracle 应用程序可伸缩性的一个关键环节。如果不使用绑定变量,每次查询都是一个新的查询,这将导致 Oracle 需要分析、解析、安全检查、优化等一系列操作。这些操作将消耗大量...
数据绑定在IT领域,特别是在数据库管理和应用程序开发中,是一个至关重要的概念。它涉及到将数据源与用户界面元素关联起来,使数据的更改能够实时反映在界面中,反之亦然。在“数据绑定应用”这个主题中,我们将会...
本文将深入探讨“如何绑定数据库”的主题,从理解基本概念到实际操作流程,再到使用报表制作软件进行数据库绑定的实践指南。 ### 数据库绑定的基本概念 数据库绑定指的是将应用程序与特定的数据库实例建立连接的...
7. **参数化查询**:在执行SQL查询时,为防止SQL注入,应使用参数化查询。例如: ```csharp string sql = "SELECT * FROM YourTableName WHERE ID = @ID"; OdbcCommand cmd = new OdbcCommand(sql, conn); cmd....
本文将详细介绍如何将存储在数据库中的二进制图片数据绑定到DataList,以便在网页上进行展示。我们将使用Visual Studio 2010作为开发工具,SQL Server 2008作为数据库管理系统。 首先,我们需要了解如何在数据库中...
在本示例中,我们将探讨如何使用SpringMVC与MyBatis框架进行集成,以便将应用程序与数据库进行绑定。SpringMVC是Spring框架的一部分,它提供了处理HTTP请求、视图解析以及模型数据绑定等功能,而MyBatis则是一个轻量...
4. **绑定控件**:使用`Add`方法为控件创建绑定,并将其添加到`ControlBindingsCollection`中。例如,将TextBox控件绑定到数据源中的某一列: ```vbnet TextBox1.DataBindings.Add("Text", OleDbDataAdapter1, ...
在标题和描述中提到的场景,使用晚绑定是为了实现Access数据库的压缩功能,而避免在项目中直接引用特定的组件,如`JRO.JetEngine`。这样做的好处在于,当多个开发者在一个项目中协作时,不需要每个人都安装相同的...
在IT领域,数据库的使用是不可或缺的一部分,而如何有效地展示和操作这些数据是开发者常常面临的挑战。本教程将深入探讨“绑定数据库的方法实例”,特别是如何将数据库中的数据读取并绑定到TREEVIEW控件中。TREEVIEW...
在本文中,我们将深入探讨ADO数据库绑定对象及其核心组件,特别是记录集(Recordset)对象。 ADO数据库绑定对象是编程中用于连接、查询和操作数据库的关键元素。这些对象允许开发者创建与数据库之间的动态连接,使...
4. 数据绑定:将数据库数据绑定到ECharts图表,如使用`JsonResult`返回JSON数据。 5. ECharts使用:配置图表选项,理解各种图表属性,如系列、轴、图例等。 6. HTML和CSS:构建图表容器,调整样式以适应页面设计。 7...
- **性能优化**:绑定变量能够减少解析次数,因为数据库会将带有绑定变量的SQL语句视为同一语句,即使实际的变量值不同。这减少了解析和编译的时间,尤其是在频繁执行相同结构但不同值的SQL语句时。 - **内存使用...
然后,我们可以创建一个新的数据库,例如命名为“表1”,这将是我们后续操作的基础。 二、创建数据表 在创建了Access数据库之后,我们可以创建一个新的数据表。在本示例中,我们创建了两个字段:ID(数字型)和...
### 读取数据库中所有表并选择绑定AspxGridView #### 概述 在Web开发中,特别是使用ASP.NET进行开发时,从数据库读取数据并将其展示在前端页面上是一项常见需求。本文将详细介绍如何利用ASP.NET中的`AspxGridView`...
- 将数据库查询结果转换为DataTable或List对象,然后使用DataSource属性将数据绑定到ComboBox。设置DisplayMember和ValueMember属性分别指定显示字段和值字段。 - 如果ComboBox用于选择分类,可以选择性地添加一个...
本文将深入探讨如何使用C#语言开发数据库应用系统,同时结合北大青鸟的教育理念与实践,为学习者提供详尽的知识点。 首先,C#是微软公司推出的一种面向对象的编程语言,它具有丰富的特性和强大的性能,特别适合于...
在BIRT(Business Intelligence and Reporting Tools)中,数据集参数与列绑定是构建复杂报告的关键技术。本主题将深入探讨如何实现数据集之间的参数传递以及列的绑定,以充分利用BIRT的功能来创建高效的报告。 ...