在Oracle中,对于一个提交的sql语句,存在两种可选的解析过程,硬解析和软解析。一个硬解析需要经解析,制定执行路径,优化访问计划等步骤。硬解析不仅仅会耗费大量的cpu,更重要的是会占据重要的闩(latch)资源。唯一使得oracle能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是使用变量来代替sql语句中的常量。绑定变量能够使得每次提交的sql语句都完全一样。1. sqlplus
转载
2024-02-04 12:23:09
111阅读
1. 定义变量SQL> define tablename='texts';2. 使用定义的变量SQL> select count(*) from &tablename;原值 1: select count(*) from &tablename新值 1: select count(*) from te
原创
2009-08-31 10:44:33
715阅读
sqlplusSQL> set numw 30select FORCE_MATCHING_SIGNATURE, count(1) from v$sql where FORCE_MATCHING_SIGNATURE > 0 and FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE gr
原创
2017-09-21 11:50:59
755阅读
变量的使用PL/SQL变量变量的作用:(在DECLARE阶段被声明)(*每一行只声明一个变量)(在执行阶段被赋予新值)(可以在PL/SQL之间传递值)(通过标准输出包可以看到结果)变量初始化和关键字:identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];[CONSTANT] 必须初始化,并且其值不能改变[NOT NULL] 必须
转载
精选
2015-06-18 14:57:41
437阅读
一、变量介绍在编写pl/sql程序时,可以定义变量和常量;在pl/sql程序中包括有:1)、标量类型(scalar)2)、复合类型(composite) --用于操作单条记录3)、参照类型(reference) --用于操作多条记录4)、lob(large object)
二、标量(scalar)——常用类型1)、在编写pl/sql块时,如果要使用变量,需在定义部分定义变量。pl/sql中定
转载
2012-02-27 16:26:00
72阅读
2评论
两个步骤,一个步骤一个脚本一、查询出未只用绑定变量的SQL语句的哈希值,以及变体个数select to_char(FORCE_MATCHING_SIGNATURE) as FORCE_MATCHING_SIGNATURE,count(1) "COUNTS"from v$sqlwhere FORCE_MATCHING_SIGNATURE>0 and FORCE_MATCHING_SIGNATU
原创
2021-04-09 09:57:41
434阅读
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!Parent-Child cursor (父子游标) 父游标:只要SQL语句文本相同,它们就对应同一个parent cursor。 子游标:在某些情况下,虽然SQL语句的文本相同,但是因为其它因素不同(这些因素可以在视图V$SQL_SHARED_CURSOR中查看),致使产生不同的child cursor。(重新生成child cursor,也就意味着一次硬剖析) cursor_sharing 对于是不是应用绑定变量这个问题,最好是交给应用程序决议,在数据库层面是很难正确...
转载
2013-05-31 21:24:00
190阅读
2评论
最近在看《基于Oracle的SQL优化一书》
原创
2022-07-04 12:13:54
185阅读
1. 需要开启的服务: 本机安装的oracle ,默认是开机启动服务的,开机时间太慢,关闭了,需要手动打开: OracleDBConsoleorcl OracleOraDb10g_home1iSQL*Plus OracleOraDb10g_home1TNSListener OracleService
转载
2020-12-01 19:30:00
93阅读
2评论
众所周知,绑定变量窥探是oracle 10g版本的一个比较厉害的新角色,它的出现加强了oracle在SQL语句性能上的提升,尤其对于批量sql语句和硬解析的环境有一定作用,但是同样也带来了一些麻烦。今...
原创
2021-04-16 22:19:05
320阅读
绑定变量的使用过程当中,oracle建议绑定变量的个数不宜太多。目标SQL的SQL文本中的绑定变量个数不宜太多,否则可能会导致目标SQL总的执行时间大幅度的增长。增长的时间主要消耗在执行目标SQL时对每一个绑定变量都用其实际的值来替换(这个过程就是所谓的绑定变量值替换),目标SQL的SQL文本中的绑定变量的个数越多,这个替换过程所消耗的时间就越长,该SQL总的执行时间也就越长。如下
转载
2021-04-09 22:22:54
458阅读
那么对于绑定来说,如何得到已执行的目标SQL中的绑定变量的值呢? 当面对的是已经执行过且使用了绑定变量的目标SQL时,我们就必须想案发得到这些目标SQL中绑定变量的实际输入值。因为只有知道了绑定变量的实际输入值,我们才有可能在原数据库环境中重现目标SQL原先的执行计划,才能确认我们对其执行计划做的调整是有针对性的,是真实有效的。 如何得到已执行目标SQL中的绑定变量的
原创
2021-04-16 18:45:06
255阅读
第七章:替代变量和sqlplus环境命令select ename,sal from emp where empno=&empno;select ename,sal from emp where ename='&name';define 查看Sql*plus 环境中已经定义的变量define empno=7839 将变量定义到环境中undefine empno 取消变量的定义sele
转载
精选
2015-06-18 14:37:18
818阅读
绑定变量分级是指Oracle在plsql代码中会根据文本型绑定变量的定义长度而将这些文本型绑定变量分为4个等级。a、定义长度在32字节以内的文本型绑定变量被分在第一个等级b、长度在33-128字节之间为第二个等级c、长度在129-2000字节之间为第三个等级d、长度在2000字节以上的被分为第四个等级其中第四个等级文本型绑定变量分配的内存空间,取决于对应文本行绑定变量所传入的实际绑定变量值的大小。
原创
2021-04-15 11:26:28
143阅读
现在把隐含参数_optim_peek_user_binds设置为false关闭绑定变量窥探:SQL> alter session set "_optim_peek_user_binds" = false; 会话已更改。然后保持x不变,y修改为1000,再次执行目标SQL:看到目标SQL对应列的version_count和executions值由之前的1变为了2,说明Oracle在执行该SQL
原创
2021-04-16 18:52:56
383阅读
1:查看当前用户的环境设置: SQL> define DEFINE _DATE = "21-JAN-14" (CHAR) DEFINE _CONNECT_IDENTIFIER = "updb" (CHAR) DEFINE _USER = "SCOTT" (CHAR) DEFINE _PRIVILEGE = "" (CHAR)
原创
2014-01-21 18:59:00
520阅读
开始&加变量,为的是在运行前给出提示,要求用户输入数据。看例子:DECLARE v_grade CHAR(1) := UPPER( '&grade'); v_app VARCHAR2(20); BEGIN v_app := CASE WHEN v_grade='A' THEN 'Excellent' WHEN v_grade='B' THEN 'Very Good' ELSE 'No such grade' END; DBMS_OUTPUT.put_line('Grade:&
转载
2012-11-13 16:50:00
89阅读
2评论
PL/SQL程序语法● 程序语法declare 说明部分 (变量说明,游标申明,例外说明 〕 begin 语句序列 (DML语句〕… exception 例外处理语句 End;示例图:● 常量和变量定义在程序的声明阶段可以来定义常量和变量。变量的基本类型就是 oracle 中的建表时字段的变量如 char, varc...
原创
2022-03-29 11:03:40
177阅读
依稀记得很久之前给一个客户分析数据库性能问题时,发现数据库中大量 SQL 未使用绑定变量,所以建议开发优化 SQ
原创
2024-10-18 13:58:12
172阅读
PL/SQL程序语法● 程序语法declare 说明部分 (变量说明,游标申明,例外说明 〕 begin 语句序列 (DML语句〕… exception 例外处理语句 End;示例图:● 常量和变量定义在程序的声明阶段可以来定义常量和变量。变量的基本类型就是 oracle 中的建表时字段的变量如 char, varc...
原创
2021-08-19 15:45:14
105阅读