入门知识
文章平均质量分 67
jgmydsai
道森oracle讲师,课程:sql高级查询改写
展开
-
CASE WHEN 行转列 分拆解释
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Connected as [email protected]:1521/orclSQL> SQL> /*查看有多少个JOB*/ 2 SELECT DISTINCT JOB FROM EMP;JOB----------原创 2013-08-31 20:05:00 · 2153 阅读 · 0 评论 -
游标在定义还是打开时读取数据
有网友在问这个问题,这很容易证明,测试语句如下SET serveroutput ONDROP TABLE emp2 PURGE;CREATE TABLE emp2 AS SELECT * FROM emp WHERE 1=2;DECLARE V_DEPTNO NUMBER; CURSOR CUR_EMP2 IS SELECT * FROM EMP2 WHERE DEPTN原创 2014-03-06 11:19:48 · 1706 阅读 · 0 评论 -
生成不同的cursor_child_no
我们可以通过更改statistics_level来模拟SQL> show parameter level;NAME TYPE VALUE------------------------------------ ----------- ------------------------------audit_sys原创 2014-03-06 11:27:37 · 884 阅读 · 0 评论 -
sql server 与 oracle语法对比
from: http://blog.csdn.net/bobwu/article/details/5487712找到一篇好文章,转载给大家ORACLE与SQL SERVER语法区别 一、数据类型ORACLE与SQL SERVER在数据类型的对比如下: SQL SERVERORACLE数字类型DECI转载 2014-03-12 11:27:32 · 2578 阅读 · 0 评论 -
找出不是日期的行
今天有人问怎么找出不是日期(或不规范的日期)的行。如 某行值为‘2014-02-29’,这就不是一个日期。可以建一个函数来判断。CREATE OR REPLACE FUNCTION is_date(str VARCHAR2) RETURN NUMBER AS v_date DATE;BEGIN v_date := to_date(str, 'yyyy-mm-dd hh24:m原创 2014-03-17 16:27:25 · 743 阅读 · 0 评论 -
full join 与 left join 和 right join
初学sql的常对left join 和 right join 感到头痛,其实不用死记硬背,写个sql验正下就完了。每次想用时用sql验正下结果,然后再用。时间长了就记住了。如下:1.建立环境DROP TABLE a PURGE/DROP TABLE b PURGE/CREATE TABLE a ASSELECT 'left_1' AS str,'1' AS v FRO原创 2013-09-26 16:09:08 · 1791 阅读 · 0 评论 -
left join 变 inner join
建一新表我们来看下SQL> EXPLAIN PLAN FOR select * from l left join r on l.v=r.v inner join l t3 on r.v=t3.v;ExplainedExecuted in 0.016 secondsSQL> select * from table(dbms_xplan.display);PLAN_TABLE原创 2014-05-28 21:28:58 · 2189 阅读 · 0 评论 -
建立静态监听
11G默认建立的是动态监听,动态监k原创 2014-07-30 10:18:47 · 982 阅读 · 0 评论 -
COUNT STOPKEY 及分页方式比较
先看下planselect * from table(dbms_xplan.display_cursor(sql_id =>null,cursor_child_no =>0,format =>'ALL ALLSTATS LAST NOTE ADVANCED -projection'));PLAN_TABLE_OUTPUT----------------------------------原创 2013-11-27 16:48:16 · 2201 阅读 · 0 评论 -
dbms_xplan.display_cursor
执行示例如下,以下模拟你执行过的语句SQL> BEGIN 2 FOR cur IN (SELECT deptno FROM dept) LOOP 3 EXECUTE IMMEDIATE 'select /*1234*/ /*+ GATHER_PLAN_STATISTICS*/ * from emp where deptno = :deptno' 4原创 2013-11-12 16:39:29 · 1905 阅读 · 0 评论 -
游标是否一次取出所有记录
我们可以用一个有错误的查询来验正:原创 2014-09-02 13:58:00 · 1955 阅读 · 0 评论 -
open_cursors 与 ORA-01000
open_cursors 是可以打开的游标数,如果只打开不关闭,很容易就到上线了下面我们来做下实验:先把值改小一点SQL> alter system set open_cursors=5;System altered.建一procCREATE OR REPLACE PROCEDURE p_cur_test(OUT cur SYS_REFCURSOR) ASBEGIN原创 2015-03-11 20:53:14 · 1332 阅读 · 0 评论 -
模拟ORA-00020错误
有些同学会遇到ORA-00020错误,这个错误是怎么来的呢?我们来在测试机上模拟下首先减小processes的值SQL> alter system set processes=39 scope =spfile;System altered.SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE i原创 2015-03-11 11:51:41 · 738 阅读 · 0 评论 -
insert后能用with不?
多次遇到有网友问这个问题。我们来测试下测试语句为DROP TABLE emp2 PURGE;CREATE TABLE emp2 AS SELECT * FROM emp WHERE 1=2;INSERT INTO emp2SELECT * FROM (WITH old_emp AS (SELECT * FROM emp)SELECT * FROM old_emp)下面是测试结果原创 2014-02-25 13:47:47 · 3769 阅读 · 2 评论 -
INTERVAL
select INTERVAL '2' year as "year", INTERVAL '3' month as "month", INTERVAL '3' day as "day", INTERVAL '3' hour as "hour", INTERVAL '3' minute as "minute", INTERVAL原创 2014-02-10 15:16:46 · 1402 阅读 · 0 评论 -
connect by与with
相信很多人都用过connect by生成数值列表,如下所示SQL> select level from dual connect by level <= 10; LEVEL---------- 1 2 3 4 5 6 7 8原创 2014-02-05 12:51:59 · 1213 阅读 · 0 评论 -
join条件莫乱放
qq群内有人说这两个sql计划一样select * from t1 left join t2 on t1.id=t2.id left join t3 on t3.id=t2.id and t2.name='Bill' AND t3.id select * from t1 left join t2 on t1.id=t2.id and t2.name='Bill' left join t3原创 2013-08-06 21:26:04 · 1311 阅读 · 0 评论 -
树形查询简介
树形查询语句如下SELECT empno, ename, mgr, PRIOR empno AS prior_empno,LEVEL FROM emp START WITH mgr IS NULLCONNECT BY PRIOR empno = mgr;EMPNOENAMEMGRPRIOR_EMPNO LEV原创 2013-11-07 10:12:45 · 1028 阅读 · 0 评论 -
树形查询中where的作用
start with定义如下SELECT Is the standard SELECT clauseLEVEL For each row returned by a hierarchical query, the LEVEL pseudocolumn returns 1 for a root row, 2 for a child of a root, and so on.FRO原创 2013-08-03 15:51:23 · 1337 阅读 · 0 评论 -
多表关联update
给EMP增加字段如下:ALTER TABLE EMP ADD dname VARCHAR2(50) DEFAULT 'UNKNOWN';SQL> select empno,ename,deptno,dname from emp;EMPNO ENAME DEPTNO DNAME----- ---------- ------ -------------------------原创 2013-11-08 11:35:17 · 1018 阅读 · 0 评论 -
MERGE INTO 简介
我们用注释的方式来介绍更形象一些MERGE INTO bonuses dUSING (SELECT employee_id, salary,department_id FROM oe.employees WHERE department_id = 80) s ON (d.employee_id = s.employee_id) /*匹配条件d.empl原创 2013-11-08 14:57:31 · 952 阅读 · 0 评论 -
UPDATE多表关联更新时为什么会慢
构建环境如下:Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Connected as [email protected]:1521/orclSQL> CREATE TABLE test1 AS SELECT * FROM Dba_Objects;Table createdSQL> C原创 2013-11-09 15:34:38 · 3906 阅读 · 0 评论 -
oracle中常用函数大全
from http://blog.csdn.net/lihan6415151528/article/details/44179741、数值型常用函数 函数 返回值 样例 显示ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual; 11floor(n) 小于等于数转载 2013-11-11 09:08:12 · 864 阅读 · 0 评论 -
not in、not exists 及用join改写
/*我们接着用上次建的两个表。数据如下*/SQL> select * from l;STR V------ -left_1 1left_2 2left_3 3left_4 4 SQL> select * from r;STR V------- -right_3 3right_4 4right_5 5right_6 6 /原创 2013-11-13 10:59:29 · 5246 阅读 · 0 评论 -
Oracle to_char 日期转换字符串
from http://liaomeihua2300.blog.163.com/blog/static/1347859192010055411939/Oracle to_char 日期转换字符串 2010-01-05 17:04:11| 分类: PL/SQL|字号 订阅别处挖过来的,真是太长了,以后要用的时候再看吧1》以1转载 2013-11-14 22:23:52 · 3028 阅读 · 2 评论 -
复习闪回功能
首先要开启归档与闪回G:\Tools\ha_powercmd>sqlplus "/as sysdba"SQL*Plus: Release 11.2.0.1.0 Production on Wed Aug 21 08:43:04 2013Copyright (c) 1982, 2010, Oracle. All rights reserved.Connected to:Orac原创 2013-08-21 10:14:00 · 1025 阅读 · 0 评论 -
用闪回功能恢复被更改的存储过程
关于闪回的介绍见前面 复习闪回功能下面是我们在用户test里建的proc及更改CREATE OR REPLACE PROCEDURE p_miji ASBEGIN /*这儿是搭讪秘籍一百条*/ NULL;END;/BEGIN dbms_lock.sleep(2); END;/CREATE OR REPLACE PROCEDURE p_miji ASBEGIN /*原创 2013-12-12 11:57:10 · 1619 阅读 · 0 评论 -
char与相等判断
有朋友提出如下问题/*为什么这样不行*/select * from a1,a2 where a1.name=replace(a2.name,CHR(13),'');/*这样就可以*/select * from a1,a2 where a1.name=replace(a2.name,CHR(13),CHR(32));他的案例环境如下DROP TABLE a1原创 2013-12-26 10:51:25 · 2555 阅读 · 0 评论 -
varchar2设置长度与实际大小
以前有学生问过,varchar2(4k)与varchar2(1)里面存同样的数据会怎么样。我喜欢直接用测试结果说话,现在把实验补上CREATE TABLE vc1(c1 VARCHAR2(1));CREATE TABLE vc4k(c1 VARCHAR2(4000));分别加入1W行数据进去SQL> insert into vc1 select * from vc4k;1000原创 2015-03-14 15:38:08 · 4811 阅读 · 0 评论