oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.
一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和cpu的数量来解决。
之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。当一个sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。
而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。
普通sql语句:
SELECT fname, lname, pcode FROM cust WHERE id = 674;
SELECT fname, lname, pcode FROM cust WHERE id = 234;
SELECT fname, lname, pcode FROM cust WHERE id = 332;
含绑定变量的sql 语句:
SELECT fname, lname, pcode FROM cust WHERE id = :cust_no;
Sql*plus 中使用绑定变量:
sql> variable x number;
sql> exec := 123;
sql> SELECT fname, lname, pcode FROM cust WHERE id =:x;
pl/sql
pl/sql很多时候都会自动绑定变量而无需编程人员操心,即很多你写得sql语句都会自动利用绑定变量,如下例所示:
create or replace procedure dsal(p_empno in number)
as
begin
update emp
set sal=sal*2
where empno = p_empno;
commit;
end;
/
也许此时你会想要利用绑定变量来替代p_empno,但是这是完全没有必要的,因为在pl/sql中,引用变量即是引用绑定变量。
但是在pl/sql中动态sql并不是这样。
在vb,java以及其他应用程序中都得显式地利用绑定变量。
对于绑定变量的支持不仅仅限于oracle,其他RDBMS向SQLSERVER也支持这一特性。
但是并不是任何情况下都需要使用绑定变量, 下面是两种例外情况:
1.对于隔相当一段时间才执行一次的sql语句,这是利用绑定变量的好处会被不能有效利用优化器而抵消
2.数据仓库的情况下。
####################################################
hibernate绑定参数类型
hibernate绑定参数类型
(1)使用 ? 指定参数
(2)使用 : 后跟变量的方法设置参数
(3)setEntity()方法
setEntity()方法把参数与一个持久类的实例绑定,例如下面的示例
注:上述的team对象可以是持久对象也可以是脱管对象
(4)setParameter()方法
setParameter()方法的全称是setParameter(String paraName,实例,实例类型),这个方法
可以绑定任何类型的参数.其中第三个参数可以省略,hibernate要以根据实例推断出绝大部分
对应的映射类型.
下面将(3)中的代码做一下改动
query.setParameter("team",team,Hibernate.entity(Team.class)).
或者query.setparameter("team",team).
(5)setPorperties()方法
该方法的全称是setProperties(类实例).它将类实例的属性名与参数值相对应
注意:HQL语句中的变量age必须和student的属性age同名,否则会出错.
一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和cpu的数量来解决。
之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。当一个sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。
而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。
普通sql语句:
SELECT fname, lname, pcode FROM cust WHERE id = 674;
SELECT fname, lname, pcode FROM cust WHERE id = 234;
SELECT fname, lname, pcode FROM cust WHERE id = 332;
含绑定变量的sql 语句:
SELECT fname, lname, pcode FROM cust WHERE id = :cust_no;
Sql*plus 中使用绑定变量:
sql> variable x number;
sql> exec := 123;
sql> SELECT fname, lname, pcode FROM cust WHERE id =:x;
pl/sql
pl/sql很多时候都会自动绑定变量而无需编程人员操心,即很多你写得sql语句都会自动利用绑定变量,如下例所示:
create or replace procedure dsal(p_empno in number)
as
begin
update emp
set sal=sal*2
where empno = p_empno;
commit;
end;
/
也许此时你会想要利用绑定变量来替代p_empno,但是这是完全没有必要的,因为在pl/sql中,引用变量即是引用绑定变量。
但是在pl/sql中动态sql并不是这样。
在vb,java以及其他应用程序中都得显式地利用绑定变量。
对于绑定变量的支持不仅仅限于oracle,其他RDBMS向SQLSERVER也支持这一特性。
但是并不是任何情况下都需要使用绑定变量, 下面是两种例外情况:
1.对于隔相当一段时间才执行一次的sql语句,这是利用绑定变量的好处会被不能有效利用优化器而抵消
2.数据仓库的情况下。
####################################################
hibernate绑定参数类型
hibernate绑定参数类型
(1)使用 ? 指定参数
... Query query = session.createQuery("from Student s where s.age > ? and s.name like ? "); query.setInteger(0,18); query.setString(1,"%abc%"); ...
(2)使用 : 后跟变量的方法设置参数
... Query query = session.createQuery("from Student s where s.age > :minAge and s.name like :likeName "); query.setInteger("minAge",18); query.setString("likeName","%ABC%"); ...
(3)setEntity()方法
setEntity()方法把参数与一个持久类的实例绑定,例如下面的示例
... Team team = (Team)session.get(Team.class,"5f45saf45sdf456f"); Query query = session.createQuery("from Student s where s.team = :team"); query.setEntity("team",team); //设置参数为team实例 ...
注:上述的team对象可以是持久对象也可以是脱管对象
(4)setParameter()方法
setParameter()方法的全称是setParameter(String paraName,实例,实例类型),这个方法
可以绑定任何类型的参数.其中第三个参数可以省略,hibernate要以根据实例推断出绝大部分
对应的映射类型.
下面将(3)中的代码做一下改动
query.setParameter("team",team,Hibernate.entity(Team.class)).
或者query.setparameter("team",team).
(5)setPorperties()方法
该方法的全称是setProperties(类实例).它将类实例的属性名与参数值相对应
... Student student = new Student(); student.setAge("18"); Query query = sesion.createQuery("from Student s where s.age = :age"); query.setProperties(student); //设置参数为student对象 ...
注意:HQL语句中的变量age必须和student的属性age同名,否则会出错.
发表评论
-
Hibernate 异常org.hibernate.LazyInitializationException: could not initialize prox
2012-04-24 01:29 8255Hibernate的Lazy初始化1:n关系时,必须保证是在同 ... -
Oracle关于时间/日期的操作
2012-04-09 23:12 8611.日期时间间隔操作 当前时间减去7分钟的时间 s ... -
ava.lang.IllegalArgumentException: sessionFactory or hibernateTemplate is requir
2012-03-22 17:26 4221ava.lang.IllegalArgumentExcepti ... -
oracle 数据库增量备份
2012-03-16 20:03 1176EXP和IMP是Oracle提供的一种逻辑备份工具。逻辑备份创 ... -
oracle start with connect by 用法
2012-02-19 23:58 1042oracle 提供了start with connect by ... -
Oracle数据导入导出imp/exp
2012-02-09 17:38 632Oracle数据导入导出imp/exp 功能:Oracle数 ... -
性能监控SQL语句
2011-12-23 13:51 839分析表 analyze table tablename co ... -
常用SQL语句
2011-12-23 13:50 993查找数据库中所有字段 以对应的表 select C.colu ... -
安装到最后的两个脚本作用
2011-12-06 18:32 1057在linux下安装Oralce的时候,最后会让你以root的身 ... -
ORACLE中一个字符占多少字节
2011-12-01 22:07 3883在oracle中一个字符特别是中文占几个字节是不同的。 比如 ... -
提高SQL效率
2011-12-01 00:13 1038下面就某些SQL 语句的 where 子句编写中需要注意 ... -
“exists”和“in”的效率问题
2011-11-30 23:49 1033有两个简单例子,以说明 “exists”和“in”的效率问题 ... -
Oracle建立全文索引详解
2011-11-30 20:42 14821.全文检索和普通检索的区别 不使用Oracle text功 ... -
全文检索CLOB
2011-11-30 12:00 1007建议使用全文检索(FULL TEXT SEARCH) ... -
hibernate.jdbc.fetch_size
2011-11-28 14:40 1197hibernate.jdbc.fetch_size 50 h ... -
“Oracle”数据库的“周数计算”
2011-11-16 13:25 1001——日期计算,算第n周的第一天及最后一天是几号。 by key ... -
Oracle中TO_DATE格式
2011-11-16 13:17 843TO_DATE格式(以时间:2007-11-02 13:4 ... -
Oracle 索引 详解
2011-11-15 13:00 26066Oracle 索引 详解 ... -
Oracle SQL中的IN 和 EXSITS区别总结
2011-11-15 11:06 1026IN 确定给定的值是否与子查询或列表中的值相匹配。 EX ... -
Oracle 字符集的查看和修改
2011-11-14 23:09 958一、什么是Oracle字符集 ...
相关推荐
6. 处理结果集,oci_fetch()函数用于获取一行数据,oci_bind_by_name()用于绑定变量。 7. 管理事务,oci_commit()用于提交事务,oci_rollback()用于回滚事务。 8. 断开连接,使用oci_logoff()函数关闭会话。 9. 错误...
6. **性能优化**:Oracle提供了许多性能优化工具和技术,如 Explain Plan分析SQL执行计划,绑定变量,分区表,物化视图,以及数据库缓存策略等。 7. **安全管理**:Oracle提供了精细的权限管理机制,包括用户、角色...
数据库管理员(DBA)通常会进行性能优化,如使用EXPLAIN PLAN分析SQL执行计划,调整表分区,以及使用绑定变量提升查询效率。 【SQLServer数据库知识】 SQL Server是微软公司推出的一种关系型数据库管理系统,广泛...
Oracle PlSql 存储过程详解 Oracle PlSql 存储过程是 Oracle 数据库中的一种编程语言,用于实现复杂的业务逻辑和数据处理。...本地动态 SQL 可以使用 EXECUTE IMMEDIATE 语句来执行,并可以使用绑定变量来提高性能。
12. PGA 组成部分:PGA (Program Global Area) 包括会话变量、分析信息和排序空间,但不包括绑定信息,绑定信息属于 SGA(System Global Area)的一部分。 13. 创建数据库所需条件:在 Oracle 10G 中,创建数据库并...
在本文中,我们将深入探讨如何在Java Hibernate应用中实现不同数据库之间的动态切换。 首先,我们需要理解Hibernate的核心配置文件`hibernate.cfg.xml`。在这个文件中,通常会指定数据库连接的信息,如URL、用户名...
例如,Oracle提供了一种名为"SQL Trace"的功能,它可以记录SQL语句的执行细节,包括绑定变量的值。此外,还可以使用第三方工具如Toad、PL/SQL Developer或SQL Developer,它们提供了更友好的界面来查看和分析SQL执行...
这本书可能总结了一系列SQL优化技巧,包括选择合适的索引、避免全表扫描、使用绑定变量、优化JOIN操作,以及利用Oracle的性能监控工具(如SQL Trace和 tkprof)进行问题定位。 5. "Oracle 9i DBA指南.pdf":Oracle ...
13. 性能优化:了解Oracle的性能调优工具,如SQL*Plus、Explain Plan和SQL Tuning Advisor,以及如何通过索引、分区、绑定变量等方式提升查询性能。 14. 安全性:学习如何在Oracle中设置用户权限、角色和访问控制,...
【基于Struts2+Hibernate+Spring的公司员工管理系统】是一个典型的Java企业级应用程序,它利用了Struts2、Hibernate和Spring这三大主流框架构建。这个系统设计的主要目标是为了有效地管理和组织公司的员工信息,提高...
2.4章节将展示如何通过Hibernate连接不同的数据库,如SQL Server、MySQL和Oracle。这通常需要在配置文件中正确配置数据库驱动和连接参数。 2.5章节将引导读者创建持久化类和对应的映射文件。持久化类是Java对象,...
记得在使用时注意SQL注入的安全问题,考虑性能优化,如使用绑定变量,避免全表扫描等。 总之,Oracle JDBC分页实现涉及SQL查询语句的设计和Java代码的配合,合理利用Oracle的特性可以有效地实现高效、灵活的分页...
Hibernate支持多种数据库,包括MySQL、Oracle、SQL Server等。 **二、Struts框架** Struts是Apache软件基金会的一个开源项目,基于MVC设计模式,主要用于构建Java Web应用程序。它将业务逻辑、控制流程和显示逻辑...
在Oracle数据库操作中,可以利用`ThreadLocal`将`Session`对象与线程绑定,确保每个请求有自己的数据库会话,提高并发处理能力。 3. **超级管理员登录**: - 超级管理员通常以`sys`用户身份登录,使用`sqlplus / ...
WebLogic是Oracle公司的一款企业级应用服务器,它提供了全面的Java EE(Enterprise Edition)应用服务,包括动态集群、安全管理、监控和诊断等。在本配置大全中,我们将涵盖WebLogic的安装、配置、部署以及与Oracle...
本实例是用SSH+DWR+Oracle10g做的模拟Goolge搜索的守完整实例 内容包括: 1、给每行绑定一个鼠标移上和移走事件 onmouseover onmouseout 2、焦点如果从文本框转移动显示的层中 设置了文本框失去焦点事件,目的是让...
这包括选择合适的索引、减少数据扫描、优化JOIN操作、避免全表扫描、使用绑定变量等策略。此外,分析和理解执行计划也是优化的关键步骤。 五、安全性与权限管理 SQL提供GRANT和REVOKE语句来控制用户对数据库对象的...
需要指定的是Spring 1.2.5提供了两套Hibernate的支持包,其中Hibernate 2相关的封装类位于org.springframework.orm.hibernate2.*包中,而Hibernate 3.0的封装类位于org.springframework.orm.hibernate3.*包中,...
Oracle是广泛使用的商业关系型数据库管理系统,其强大的性能和稳定性使其在企业级应用中占据重要地位。使用JDBC连接Oracle,需要了解如何配置数据源、建立连接、执行SQL以及处理结果集。 在Web开发领域,Struts是一...
在处理完Action后,可以通过ActionForward或Result配置返回相应的视图页面,将数据绑定到JSP标签或模板变量上,展示给用户。 **7. 数据校验** Struts 2提供了强大的数据校验机制,可以对表单提交的数据进行验证。...