当你在执行一条SQL语句非常慢的时候,你是不是想问Oracle怎么执行这条语句的呢? Oracle提供的SQL_TRACE工具可以让你知道你执行的SQL究竟做了什么.执行的过程会被 输出到trace文件中. 下面用例子来跟踪一个SQL语句的执行情况: SQL> create table t as select rownum as id,object_name from dba_objects; Table created. SQL> create index t_ind on t(id); I…
Oracle 中利用闪回查询确定某表在某时间点之后的修改内容: 1.查看 DELETE 及 UPDATE 操作修改的数据: SQL> SELECT * FROM tab AS OF TIMESTAMP  to_timestamp('time_point', 'yyyy-mm-dd hh24:mi:ss') MINUS SELECT * FROM tab; 其中将查询得 tab 表在 time_point 时点之后因 DELETE 及 UPDATE 操作修改的数据. 2.查看 INSERT 操作修…
Oracle中INSTR函数与SQL Server中CHARINDEX函数 1.ORACLE中的INSTR INSTR函数格式:INSTR(源字符串, 目标字符串, 起始位置, 匹配序号) 说明:返回从 ‘起始位置’ 开始查找 ‘源字符串’ 中与 ‘目标字符串’ 第 ‘匹配序号’ 次匹配的位置 例如:返回从第4位字符开始SQL_Server_2008字符串中第2次出现字符串er的位置 select INSTR('SQL_Server_2008','er',4,2 ) as result from…
oracle中使用函数控制过程是否执行(结合job使用时候,循环时间不好写的时候,可以此种方法比较方便) CREATE OR REPLACE FUNCTION wsbs_pk_date_validate(pi_aae036 IN varchar2) RETURN VARCHAR2IS V_DATE_MONTH VARCHAR2(100); V_DATE_DAY VARCHAR2(100); PO_MSG VARCHAR2(100);BEGIN PO_MSG:='OK'; --获取当前几号 SEL…
--SQL查询优化 尽量避免使用or,not,distinct运算符,简化连接条件 /*Or运算符*/ use db_business go select * from 仓库 where 城市='北京' or 城市='青岛' --包含or运算符 sql将不使用索引,影响速度 /*In运算符*/ use db_business go select * from 仓库 where 城市 in('北京' ,'青岛') --有效提高运算效率 /*not运算符*/ use db_business go s…
Oracle的Nvl函数 nvl( ) 函数 从两个表达式返回一个非null 值. 语法 NVL(eExpression1, eExpression2) 参数 eExpression1, eExpression2 如 果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2.如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1.eExpression1 和 eExpression2 可以是任意一种数据类型…
1.什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解. MySQL本身的功能架构分为三个部分,分别是 应用层.逻辑层.物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构来进行划分的. 应用层,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求,这一层是和客户端打交道的. 逻辑层,主要负责查询处理.事务管理等其他数据库功能处理,以查询为例. 首先接收到查询SQL之后,数据库会立即分配一个线程对其进行处理,第…
1.什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解. MySQL本身的功能架构分为三个部分,分别是 应用层.逻辑层.物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构来进行划分的. 应用层,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求,这一层是和客户端打交道的. 逻辑层,主要负责查询处理.事务管理等其他数据库功能处理,以查询为例. 首先接收到查询SQL之后,数据库会立即分配一个线程对其进行处理,第…
1.  sys用户给管理用户授权.SQL> grant execute on sys.dbms_system to andy;Grant succeeded.2. 查询被跟踪用户的sid,serial#  SQL> select sid,serial# from v$session where username='DBLINK';       SID    SERIAL#---------- ----------31    73.  管理用户andy开始跟踪dblink用户SQL> ex…
一.分析 (1)使用 least recently used (LRU) algorithm 来管理的,不用的自动踢出,可以使用keep 将需要的语句 保存在 library cache中. 所以应该跟内存大小有关,还有跟调度策略什么的 系统中没有能报错所有sql的视图. (2)v$session 和gv$session 只在RAC中区别明显,有g是全局的,rac的两个数据库中的内容,没有是但实例的数据库的,内容不全 rac么?  gv$开头视图是rac全局的,v$开头是本节点的 gv$sess…
--482, ORACLE / SQL SERVER --订购数量超过平均值的书籍 WITH Orders_Book AS ( SELECT Book_Name, SUM(Qty) Book_Qty FROM Orders GROUP BY Book_Name ) SELECT * FROM Orders_Book WHERE Book_Qty > ( SELECT AVG(Book_Qty) FROM Orders_Book ) --递归 产生连续数列1至10000 WITH Tally(N)…
--在sql语句中 begin...end 用来设定一个程序块 相关于c#中的{} declare @yz real,@w int --声明变量 set @w=120 --为变量赋值 if @w<=100 --if条件语句 begin --Begin程序块 set @yz=@w*0.12 --为变量赋值 end else begin set @yz=100*0.12+(@w-100)*0.05 end /*输出邮件的重量和邮费*/ print '邮件的重量是:'+cast(@w as varch…
declare db_cursor4 scroll cursor for select * from 供应商 --声明游标 open db_cursor4 --打开游标 fetch first from db_cursor4 --读取游标中的第一条数据记录 fetch next from db_cursor4 --读取游标中的下一条数据记录 fetch last from db_cursor4 --读取游标中的最后一条数据记录 fetch prior from db_cursor4 --读取游标…
--217, SQL SERVER SELECT Cust_Name , MAX(CASE WHEN Order_Date ='2009-08-01' THEN AR END) "2009-08-01" , MAX(CASE WHEN Order_Date ='2009-08-02' THEN AR END) "2009-08-02" , MAX(CASE WHEN Order_Date ='2009-08-03' THEN AR END) "2009-0…
http://zhanghong.iteye.com/blog/865937 1. 首先创建数据库表 SQL> create table customer( 2  id number(8) not null primary key, 3  name varchar2(20), 4  age number(3), 5  gender varchar2(8) 6  ); 2. 创建Sequence: create sequence customer_SEQUENCE start with 6 inc…
--不带参数的存储过程 CREATE procedure proc_sql1 as begin declare @i int set @i=0 while @i<26 begin print char(ascii('a')+@i)+'的ASCII码是:'+cast(ascii('a')+@i as varchar(50)) set @i=@i+1 end end execute proc_sql1 --数据查询不带参数的储存过程 create procedure proc_sql4 as beg…
--创建和执行事后触发器 --更新仓库备份表中记录时自动创建数据表且插入三条记录 create trigger db_trigger1 on 仓库备份 for update as begin if Exists(select * from sys.sysobjects where id=OBJECT_ID('db_tabletriuser')) drop table db_tabletriuser else begin create table db_tabletriuser( userid i…
--把wh1仓库号中姓名含有"平"字的职工工资在原来的基础上加288 update 职工备份 set 工资=工资+288 where 仓库号='wh1' and 姓名 like '%平%' --把"北京"地区的职工的工资减少100,再增加1倍 update 职工备份 set 工资=(工资-100)*2 where 仓库号 in (select 仓库号 from 仓库备份 where 城市='北京') --把面积小于"北京"地区最小面积的仓库面积增…
    SELECT (   '节点 '           || a.inst_id           || ' session '           || a.sid           || ','           || a_s.serial#           || ' 阻塞了 节点 '           || b.inst_id           || ' session '           || b.sid           || ','           ||…
' second as TSec from dual -- 计算 60秒 前的时间 ' minute as TMin from dual -- 计算 10分 前的时间 ' hour as UTCTime from dual -- 计算 8小时 前的时间 / as UTCTime from dual -- 计算 8小时 前的时间 select sysdate - interval '8 2' day to hour as UTCTime from dual -- 计算 8天2小时 前的时间 sel…
--新建表create table table1 (id varchar(300) primary key,name varchar(200) not null);--插入数据insert into table1 (id,name) values('aa','bb');insert into table1 (id,name) values('cc','dd');--更新数据update table1 set id='bb' where id='cc';--删除数据delete from tabl…
并行执行与串行执行相比,能否缩短执行时间,取决于如下几个方面:1.待执行的目标SQL是否适合并行执行,有些SQL是不太适合并行执行的,比如走索引的嵌套循环连接.2.数据库服务器上的硬件资源(如CPU.内存.I/O等)是否还有富余.3.并行执行时,是否最大化地利用了数据库服务器上的硬件资源(但同时又不能使数据库服务器上的硬件资源消耗殆尽).4.待执行的目标SQL的并行执行计划是否为当前情形下的最优执行计划.…
查询条件: 1)LIKE:模糊查询,需要借助两个通配符,%:表示0到多个字符:_:标识单个字符. 2)IN(list):用来取出符合列表范围中的数据. 3)NOT IN(list): 取出不符合此列表中的数据记录. 4)BETWEEN…AND…:用来查询符合某个值域范围条件的数据,最常见的是使用在数字类型的数据范围上,但对字符类型和日期类型数据也同样适用.for example: SELECT ename, sal FROM emp WHERE sal BETWEEN 1500 AND 3000…
select--from--where--group by--having--order by 这6个查询关键字的执行顺序: 1.from组装来自不同数据源的数据:2.where基于指定的条件对记录行进行筛选:3.group by子句将数据划分为多个分组:4.使用聚集函数进行计算:5.使用having子句筛选分组:6.计算所有的表达式:7.select 集合输出:8.使用order by对结果集进行排序. 以下例子基于Oracle自带表空间hr 例子1:having和select的执行说明 情景…
一.SQL语言的使用1.IN 操作符    用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.    但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:    ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询.    由此可见用IN的SQL至少多了一个转换的过程.一般的SQL都可以转换成功,但对于含有分组统计等方面…
查看 sql 执行计划的方法有许多种, 10046 事件就是其中的一种. 与其他查看 sql 执行计划不同, 当我们遇到比较复杂的 sql 语句, 我们可以通过 10046 跟踪 sql 得到执行计划中每一个步骤的逻辑读, 物理读以及花费的时间等. 这种细粒度的跟踪对于我们分析 sql 性能尤其有用. 10046:SQL到底是如何执行的: 10046 = 设置sql_trace=true; 10046 可以跟踪到等待事件&绑定变量;   tkprof 只解读(格式化)10046的trace文件1…
场景:在书写oracle的sql语句时候,如果语句不存在主键,需要删除几条重复的记录,这个时候如果不知道oracle中的伪列,就需要把所有的重复记录先删除,再插入.这样做好麻烦,可以通过伪列来定位记录. 1 ROWNUM的使用——TOP-N分析 使用SELECT语句返回的结果集,若希望按特定条件查询前N条记录,可以使用伪列ROWNUM. ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集).简单的说ROWNUM是符合条件结果的序列号.它总是从1开始排起的…
Oracle中的一些查询语句及其执行顺序 原文地址:https://www.cnblogs.com/likeju/p/5039115.html 查询条件: 1)LIKE:模糊查询,需要借助两个通配符,%:表示0到多个字符:_:标识单个字符. 2)IN(list):用来取出符合列表范围中的数据. 3)NOT IN(list): 取出不符合此列表中的数据记录. 4)BETWEEN…AND…:用来查询符合某个值域范围条件的数据,最常见的是使用在数字类型的数据范围上,但对字符类型和日期类型数据也同样适用…
oracle中next_day()函数解析 Sql代码 当前系统时间的下一星期一的时间select   next_day(sysdate,1) from dual NEXT_DAY(date,char) date参数为日期型, char:为1~7或Monday/Mon~Sunday/ 指定时间的下一个星期几(由char指定)所在的日期, char也可用1-7替代,1表示星期日,2代表星期一等 还可以是星期一.星期二....星期日 Sql代码 select next_day(sysdate,'星期…
1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行. 如:网上转帐就是典型的要用事务来处理,用以保证数据的一致性. 2. 事务特性 SQL92标准定义了数据库事务的四个特点: 原子性(Atomicity):一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做. 一致性(Consistency):事务开始时,数据库中的数…