?
Oracle SQL经典荟萃
将自己学习,工作中整理的一些经典SQL和大家分享一下。注意,在Oracle 9i中tiger账户默认是开启的,后续版本则改变了策略~同时,关于sql优化尤其是hint的使用,这里不做分享,具体可以查阅民间流传的50大招~
?
- --?toy?sql??
- alter?user?scott?account?unlock;??
- select?ename,sal*12?as?"annual?sal"?from?emp;??
- --注意:""保持了字段名的小写状态??
- select?ename,sal*12?+?comm?from?emp;??
- select?job||'KaK''a'?from?emp;??
- select?ename,sal*12?+?nvl(comm,0)?from?emp;??
- --注意:任何含有空值的数学表达式,计算结果都是空值;字符串连接过程中,单引号使用'转义??
- select?distinct?deptno,job?from?emp;??
- --distinct?deptno,job组合唯一??
- select?ename,sal?from?emp?where?deptno?<>10;??
- --Oracle中日期型处理技巧。1.1-1月-1982?2。date'1982-01-01'??
- select?ename,hiredate?from?emp?where?hiredate>'1-1月-1982';??
- select?ename,hiredate?from?emp?where?hiredate>to_date('1982-1-1','yyyy-mm-dd');??
- --SQL中不等于的方法??
- select?ename,sal?from?emp?where?sal?between?800?and?1500;??
- select?ename,sal?from?emp?where?sal?>=800?and?sal<=1500;??
- --指定$为转义字符??
- select?ename?from?emp?where?ename?like?'%$%%'?escape?'$';??
- select?lower(ename)?from?emp;??
- select?upper(ename)?from?emp;??
- select?substr(ename,1,3)?from?emp;??
- select?*?from?emp?where?length(ename)=5;??
- select?upper(substr(ename,1,1))?from?emp?||?select?lower(substr(ename,2,length(ename)-1))from?emp;??
- select?chr(65)?from?dual;??
- select?ascii('A')?from?dual;??
- select?round(25.656,-1)?from?dual;??
- --L,本地货币符号,C,国际货币符号??
- select?to_char(sal,'$999,999.999')from?emp;??
- select?to_char(sal,'L999,999.999')from?emp;??
- select?to_char(sal,'L000,000.000')from?emp;??
- select?to_char(hiredate,'YYYY-MM-MM?HH24:MI:SS')?from?emp;??
- select?ename,hiredate?from?emp?where?hiredate?>?to_date('1981-02-20?12:00:00','YYYY-MM-DD?HH24:MI:SS');??
- select?sal?from?emp?where?sal>to_number('$1,250.00','$99,999.99');??
- select?replace(ename,'a','A')?from?emp;??
- select?sys_context('USERENV','db_name')?from?dual;??
- select?sys_context('USERENV','current_schema')?from?dual;??
- --用户和方案的关系:一一对应,Oracle是以方案的方式管理数据对象的,用户名和方案名相同??
- select?deptno,job,max(sal)?as?max_sal?from?emp?group?by?deptno,job;??
- --按照两个字段进行分组??
- select?deptno,round(avg(sal),2)?from?emp?group?by?deptno;??
- --注意:出现在select列表中的字段,如果没有出现在组函数里,那么必需出现在group?by语句里!??
- --分组函数只能出现在选择列表,having,order?by子句中!??
- select?ename,deptno?from?emp?where?sal?in?(select?max(sal)from?emp?group?by?deptno);??
- select?ename?from?emp?where?sal?in?--=?(select?max(sal)?from?emp);??
- select?deptno,max(sal)?from?emp?group?by?deptno;??
- select?deptno,round(avg(sal))?from?emp?group?by?deptno?having?avg(sal)>2000?order?by?deptno;??
- --注意:where是对单条语句过滤,而having是对分组进行过滤!??
- select?ename,deptno?from?emp?order?by?deptno?desc;??
- select?avg(sal)?from?emp?where?sal>1200?group?by?deptno?having?avg(sal)?>1500?order?by?avg(sal)?desc;??
- select?*?from?product_component_version;??
- select?ename,sal?from?emp?where?sal?>?(select?avg(sal)?from?emp);??
- ??
- --每个部门中薪水最高的人??
- select?ename,deptno,sal?from?emp?where?sal?in?(select?max(sal)?from?emp?group?by?deptno);??
- --仔细分析上述写法,在大数据量条件下,会出现偏差??
- select?ename,sal,emp.deptno?from?emp?join?(select?max(sal)?as?max_sal,deptno?from?emp?group?by?deptno)?t?on(emp.sal?=?t.max_sal?and?emp.deptno?=?t.deptno);??
- ??
- select?t1.ename?as?clerk,t2.ename?as?boss?from?emp?t1?,emp?t2?where?t1.mgr?=?t2.empno;??
- select?t1.ename?as?clerk,t2.ename?as?boss?from?emp?t1?join?emp?t2?on?(t1.mgr?=?t2.empno);??
- ??
- select?t1.ename?as?clerk,t2.ename?as?boss?from?emp?t1?left?outer?join?emp?t2?on?(t1.mgr?=?t2.empno);??
- select?ename,dname?from?emp?right?outer?join?dept?on?(emp.deptno?=?dept.deptno);??
- select?ename,dname,grade?from?emp?e,dept?d,salgrade?s?where?e.deptno?=?d.deptno?and?e.sal?between?s.losal?and?s.hisal?and?job?<>?'CLERK';??
- --超强震撼,99语法将连接条件与数据过滤条件分离,仔细品味吧!??
- select?ename,dname,grade?from?emp?join?dept?on?(?emp.deptno?=?dept.deptno?)?join?salgrade?on(emp.sal?between?salgrade.losal?and?salgrade.hisal)?where?ename?not?like?'_A%';??
- ??
- --SQL?99与SQL?92的区别?:?Where?语句后只跟数据过滤条件?!??
- select?ename,dname?from?emp,dept;??
- select?ename,dname?from?emp?cross?join?dept;??
- --?等值连接??
- select?ename,dname?from?emp,dept?where?emp.deptno?=?dept.deptno;??
- select?ename,dname?from?emp?join?dept?on?(?emp.deptno?=?dept.deptno?);??
- select?ename,dname?from?emp?join?dept?using?(deptno);??
- --部门平均薪水的等级??
- select?deptno,avg_sal,grade?from(select?deptno,avg(sal)?as?avg_sal?from?emp?group?by?deptno)?t?join?salgrade?s?on(t.avg_sal?between?s.losal?and?s.hisal);??
- --部门平均的薪水等级??
- select?deptno,avg(grade)?from(select?deptno,ename,grade?from?emp?join?salgrade?on(emp.sal?between?salgrade.losal?and?salgrade.hisal))?group?by?deptno;??
- --雇员中谁是经理人??
- select?ename?from?emp?where?empno?in?(select?distinct?mgr?from?emp);??
- --不用聚集函数求最高薪水??
- select?distinct?sal?from?emp?where?sal?not?in(select?distinct?e1.sal?from?emp?e1?join?emp?e2?on(e1.sal?<?e2.sal));??
- --平均薪水最高的部门的部门编号??
- select?deptno,avg_sal?from?(select?deptno,avg(sal)?avg_sal?from?emp?group?by?deptno)???
- where?avg_sal?=(select?max(avg_sal)?from?(select?deptno,avg(sal)?avg_sal?from?emp?group?by?deptno));??
- --同样的例子,使用聚集函数嵌套!??
- select?deptno,avg_sal?from?(select?deptno,avg(sal)?avg_sal?from?emp?group?by?deptno)???
- where?avg_sal?=(select?max(avg(sal))?from?emp?group?by?deptno);??
- --平均薪水最高的部门的部门名称??
- select?dname?from?dept?where?deptno?=?(select?deptno?from?(select?deptno,avg(sal)?avg_sal?from?emp?group?by?deptno)???
- where?avg_sal?=(select?max(avg_sal)???
- from?(select?deptno,avg(sal)?avg_sal?from?emp?group?by?deptno)));??
- --平均薪水等级最低的部门的部门名称???
- select?t1.deptno,dname,avg_sal,grade?from??
- (??
- ???select?deptno,grade,avg_sal?from??
- ?????(??
- ????????select?deptno,avg(sal)?as?avg_sal?from?emp?group?by?deptno??
- ?????)?t?join?salgrade?s?on??
- ?????????(??
- ????????????t.avg_sal?between?s.losal?and?s.hisal??
- ??????????)??
- )?t1?join?dept?on???
- ????(??
- ???????t1.deptno?=?dept.deptno??
- ????)?where?t1.grade?=??
- ??????(??
- ???????????select?min(grade)?from???
- ????????????(??
- ????????????????select?deptno,avg_sal,grade?from??
- ?????????????????(??
- ???????????????????select?deptno,avg(sal)?avg_sal?from?emp?group?by?deptno??
- ?????????????????)?t?join?salgrade?s?on??
- ???????????????????(??
- ?????????????????????t.avg_sal?between?s.losal?and?s.hisal??
- ???????????????????)??
- ???????????)??
- ????????);??
- --显示高于自己部门平均工资的员工信息??
- select?t1.ename,t1.sal,t1.deptno,t2.avg_sal?from?emp?t1,(select?deptno,avg(sal)?avg_sal?from?emp?group?by?deptno)?t2?where?t1.deptno?=?t2.deptno?and?t1.sal?>?t2.avg_sal;??
- --另类做法??
- --1.创建视图??
- create?view?v$dept_avg_sal_info?as???
- select?deptno,grade,avg_sal?from??
- ?????(??
- ????????select?deptno,avg(sal)?as?avg_sal?from?emp?group?by?deptno??
- ?????)?t?join?salgrade?s?on??
- ?????????(??
- ????????????t.avg_sal?between?s.losal?and?s.hisal??
- ??????????);??
- --2.使用刚创建的视图进行查询???????????
- select?t1.deptno,dname,avg_sal,grade?from??
- (??
- ???select?deptno,grade,avg_sal?from??
- ?????(??
- ????????select?deptno,avg(sal)?as?avg_sal?from?emp?group?by?deptno??
- ?????)?t?join?salgrade?s?on??
- ?????????(??
- ????????????t.avg_sal?between?s.losal?and?s.hisal??
- ??????????)??
- )?t1?join?dept?on???
- ????(??
- ???????t1.deptno?=?dept.deptno??
- ????)?where?t1.grade?=??
- ??????(??
- ???????????select?min(grade)?from?v$dept_avg_sal_info??
- ??????);??
- --比普通员工的最高薪水还高的经理人名称??
- select?ename?from?emp?where?empno?in???
- (?????
- ????select?distinct?mgr?from?emp?where?mgr?is?not?null??
- )??
- ??and?sal?>??
- ????(??
- ??????select?max(sal)?from?emp?where?empno?not?in(select?distinct?mgr?from?emp?where?mgr?is?not?null)??
- ?????);??
- --备份表??
- create?table?emp2?as?select?*?from?emp;??
- grant?dba?to?scott;??
- ??
- grant?create?table,create?view?to?scott;??
- ??
- --逻辑备份??
- --1.?exp??
- --2.?create?user?**?identified?by?**?default?tablespace?users?quota?10M?on?users??
- --3.?grant?create?session,create?table,create?view?to?**??
- --4.?imp??
- --另类insert??
- insert?into?emp2?select?*?from?emp;??
- ??
- select?ename?from?(select?rownum?r?,ename?from?emp)?where?r?>?10;??
- --薪水最高的前5名雇员??
- --错误的写法!(错误原因:先取出前5个,才排序)??
- select?ename,sal?from?emp?where?rownum?<=5?order?by?sal?desc;??
- --正确的写法!??
- select?ename,sal?from?(select?ename,sal?from?emp?order?by?sal?desc)?where?rownum?<=5;??
- ??
- --薪水最高的第6个到第10个人??
- select?ename,sal,rownum?r?from?(select?ename,sal,rownum?r?from(select?ename,sal?from?emp?order?by?sal?desc))where?r<=10?and?r>=6;??
- --hibernate?写法??
- select?*?from?(?select?row_.*,?rownum?rownum_?from?(?select?ename,sal?from?emp?order?by?sal?desc)?row_?where?rownum?<=?10)?where?rownum_?>=6;??
- --显示比部门30的所有员工的工资都高的员工姓名,工资和部门号??
- select?ename,sal,deptno?from?emp?where?sal>?all--any?(select?sal?from?emp?where?deptno=30);??
- select?ename,sal,deptno?from?emp?where?sal?>(select?max(sal)?from?emp?where?deptno?=30);--效率高??
- --查询与SMITH的部门和岗位完全相同的所有员工??
- select?*?from?emp?where?(deptno,job)=(select?deptno,job?from?emp?where?ename='SMITH');??
- --希望SCOTT员工的岗位,工资,津贴与SMITH员工一样??
- update?emp?set(job,sal,comm)=(select?job,sal,comm?from?emp?where?ename='SMITH')?where?ename='SCOTT';??
- --查询8个月前入职的员工??
- select?*?from?emp?where?sysdate>add_months(hiredate,8);??
- --显示满10个月服务年限的员工姓名和受雇日期??
- select?ename,hiredate?from?emp?where?sysdate>=add_months(hiredate,12*10);??
- --显示每个雇员入职天数??
- select?ename,floor(sysdate-hiredate)?as?'入职天数'?from?emp;??
- --各月倒数第3天受雇的员工??
- select?*?from?emp?where?last_day(hiredate)-2=hiredate;??
- --SQL注入漏洞??
- select?*?from?emp?where?empno='7369'?and?ename='SMITH'?or?1='1';??
- --MS?SQL中起作用??
- select?*?from?emp?where?empno='7369';delete?from?emp;--'and?ename='SMITH';??
- --查询员工信息(包括其直接上司)??
- select?e1.empno,e1.ename,e1.mgr,e2.ename?from?emp?e1?left?join?emp?e2?on?e1.mgr=e2.empno???
- select?e1.empno,e1.ename,e1.mgr,(select?e2.ename?from?emp?e2?where?e2.empno?=?e1.mgr)?as?mgrname?from?emp?e1??
- --查询员工7902的所有上级??
- select?empno,ename,level?from?emp?connect?by?empno?=?PRIOR?mgr?start?with?empno?=?7902;??
- --查询员工7902的所有下级??
- select?empno,ename,level?from?emp?connect?by?PRIOR?empno?=?mgr?start?with?empno?=?7902;??
- --使用rowid删除重复项,保留rowid最大一项,模式如:??
- select?rowid,t.product_type,t.order_datetime?from?tb_order_view?t?where?rowid?!=?(select?max(rowid)from?tb_order_view?b?where?b.product_type?=?t.product_type?and?b.order_datetime?=?t.order_datetime)??
- --case...when...then??
- select?e1.empno,??
- ???????e1.ename,??
- ???????e1.job,??
- ???????e1.hiredate,??
- ???????e1.sal,??
- ???????case??
- ?????????when?e1.sal?<?1000?then??
- ??????????'低'??
- ?????????else??
- ??????????(case??
- ????????????when?e1.sal?<=?3000?then??
- ?????????????'中'??
- ????????????else??
- ?????????????'高'??
- ??????????end)??
- ???????end?as?grade??
- ??from?emp?e1??
- ????
- select?count(case?when?sal<1000?then?1?else?null?end)low,??
- ???????count(case?when?sal?between?1000?and?3000?then?1?else?null?end)mid,??
- ???????count(case?when?sal?>3000?then?1?else?null?end)?high?from?emp??
- ??
- ??
- --数据库完整性实现方式之-约束(5种),包括列级定义,表级定义??
- --1.非空?2.唯一?3.主键?4.外键?5.Check??
- create?table?stu(??
- id?number(6),??
- name?varchar2(20)?constraint?stu_name_nn--自定义约束名字?not?null,??
- sex?char(2)?default?'男'?check(sex?in('男','女')),??
- age?number(3)?check(age>0),??
- sdate?date,??
- grade?number(2)?default?1,??
- class?number(4)?--references?class(id),??
- email?varchar2(50),??
- constraint?stu_fk?foreign?key?(class)?references?class(id),??
- constraint?stu_id_pk?primary?key(id),??
- constraint?stu_unique?unique(email,name)???
- );??
- create?table?class(??
- id?number(4)?primary?key,??
- name?varchar2(20)??
- );??
- alter?table?class?modify?name?not?null;??
- alter?table?class?add?constraint?nameUnique?unique(name);??
- select?constraint_name,constraint_type,status,validated?from?user_constraints?where?table_name='emp';??
- select?column_name,position?from?user_cons_columns?where?constraint_name='nameUnique';??
- --null值,数据库不认为是重复值??
- ??
- --表修改??
- alter?table?stu?add(addr?varchar2(100));??
- alter?table?stu?drop(addr);??
- alter?table?stu?drop?column?addr;??
- rename?stu?to?student;--修改表名字??
- alter?table?stu?modify(addr?varchar2(50));--修改字段长度或类型(空表)??
- --约束条件操作??
- alter?table?stu?drop?constraint?stu_fk;??
- alter?table?stu?add?constraint?stu_fk?foreign?key?(class)?references?class(id);??
- ??
- --数据字典表??
- desc?user_tables;??
- select?table_name?from?user_tables;??
- select?view_name?from?user_views;??
- select?constraint_name?from?user_constraints;??
- select?constraint_name,table_name?from?user_constraints;??
- ??
- desc?dictionary;??
- select?table_name?from?dictionary;??
- ??
- --索引与视图(主键约束和唯一约束)??
- create?index?index_stu_email?on?stu(email);--也可以设置复合索引,注意顺序不同(区分度高的字段放后面),索引不同,索引的层次不要超过4层。??
- drop?index?index_stu_email;??
- select?index_name?from?user_indexes;??
- select?view_name?from?user_views;??
- --索引的缺点。1.系统需要为索引开辟大约为表存储容量1.2倍的空间(硬盘空间和内存空间)。2.更新数据时,系统需要额外的时间来对索引进行同步更新。??
- select?index_name,index_type?from?user_indexes?where?table_name='emp';??
- select?table_name,column_name?from?user_id_columns?where?index_name='emp';??
- ??
- create?sequence?seq;??
- select?seq.nextval?from?dual;??
- ??
- create?view?v$view_table?as?select?M.column_name?FieldName?from?(select?*?from?user_tab_columns?where?upper(Table_name)?=?upper('BLB'))?M?left?join?user_col_comments?A?ON?M.COLUMN_NAME=A.COLUMN_NAME?and?M.Table_Name?=?A.Table_Name??
- left?join?(select?a.table_name,b.column_name?from?user_constraints?a,?user_cons_columns?b?where?a.constraint_name=b.constraint_name?and?upper(a.table_name)=upper('BLB')?and?a.constraint_type='P')?B?ON?M.Table_Name?=?B.TABLE_NAME?and?M.COLUMN_NAME=B.COLUMN_NAME?order?by?M.column_id;??
- ??
- insert?into?[用户表](id)?select?*?from?v$view;??
- ??
- create?or?replace?procedure?insert_ID?is??
- begin??
- ??for?i?in?1..196?loop??
- ??????insert?into?lcqkbt(id)?values(seq.nextval);??
- ??end?loop;??
- ??commit;??
- end;??
- ??
- alter?database?datafile?''?resize?100M;??
- ??
- --dba?daily?work??
- create?table?errorlog(??
- ???id?number?primary?key,??
- ???errcode?number,??
- ???errmsg?varchar2(1024),??
- ???errdate?date??
- );??
- create?sequence?seq_errorlog_id?start?with?1?increment?by?1;??
- declare???
- ??v_deptno?dept.deptno%type?:=10;??
- ??v_errcode?number;??
- ??v_errmsg?varchar2(1024);??
- begin??
- ??delete?from?dept?where?deptno?=?v_deptno;??
- ??commit;??
- exception??
- ??when?others?then??
- ???????rollback;??
- ??????????????v_errcode?:=SQLCODE;??
- ??????????????v_errmsg:=SQLERRM;??
- ???????insert?into?errorlog?values(seq_errorlog_id.nextval,v_errcode,v_errmsg,sysdate);??
- ???????commit;??
- end;??
- ??
- declare??
- ??cursor?c?is??
- ?????????select?*?from?emp;??
- ??v_emp?c%rowtype;??
- begin??
- ??open?c;??
- ??loop??
- ???????fetch?c?into?v_emp;??
- ???????exit?when(c%notfound);??
- ???????dbms_output.put_line(v_emp.ename);??
- ??end?loop;??
- ??close?c;??
- end;??
- ??
- declare??
- ??cursor?c?is??
- ?????????select?*?from?emp;??
- ??v_emp?c%rowtype;??
- begin??
- ??open?c;??
- ???????fetch?c?into?v_emp;??
- ???????while(c%found)?loop??
- ???????dbms_output.put_line(v_emp.ename);??
- ???????fetch?c?into?v_emp;??
- ??end?loop;??
- ??close?c;??
- end;??
- ??
- declare??
- ??cursor?c?is??
- ?????????select?*?from?emp;??
- begin??
- ????for?v_emp?in?c?loop??
- ???????dbms_output.put_line(v_emp.ename);??
- ??end?loop;??
- end;??
- ??
- update?dept?set?deptno?=?99?where?deptno?=?10;??
- create?or?replace?trigger?cascadeUpdate??
- ???after?update?on?dept??
- ???for?each?row??
- begin??
- ???update?emp?set?deptno?=?:NEW.deptno?where?deptno=:OLD.deptno;??
- end;??
- ??
- create?or?replace?procedure?bbs(v_pid?article.pid%type,v_level?binary_integer)?is??
- ???cursor?c?is?select?*?from?article?where?pid=?v_pid;??
- ???v_preStr?varchar2(1024):='';??
- begin??
- ???for?i?in?1..v_level?loop??
- ??????v_preStr?:=?v_preStr?||'****';??
- ???end?loop;??
- ?????
- ???for?v_article?in?c?loop??
- ???????dbms_output.put_line(v_preStr||v_article.cont);??
- ???????if(v_article.isleaf?=?0)?then??
- ???????????p(v_article.id,v_level+1);??
- ???????end?if;???
- ???end?loop;??
- end;??
- ??
- --Oracle?date默认格式:11-12月-1997?or?11-12月-97??
- --更改输入格式??
- alter?session?set?nls_date_format='yyyy-mm-dd?hh:mi:ss';??
- ??
- 1.insert?into...??
- 1.savepoint?a;??
- 3.delete?from?stu;--删除所有记录,表结构还在,写日志,可以恢复,速度慢??
- 4.rollback?to?a;??
- ??
- truncate?table?stu;--删除所有记录,表结构还在,不写日志,无法恢复,速度快??
- set?timing?on;??
- ??
- --union?all和union的区别在于后者会去掉重复行???
- --minus,intersect??
- ??
- --创建数据库??
- --使用?Configuration?and?Migration?Tools->Database?Configuration?Assistant?8步,默认20进程??
- ??
- --只读事务??
- set?transaction?read?only;??
- ??
- --预定义角色是在数据库安装后,系统自动创建的一些常用的角色??
- --1.CONNECT,RESOURCE,DBA?---这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。??
- --2.DELETE_CATALOG_ROLE,EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE?---这些角色主要用于访问数据字典视图和包。??
- --3.?EXP_FULL_DATABASE,IMP_FULL_DATABASE?---这两个角色用于数据导入导出工具的使用。??
- select?*?from?role_sys_privs??where?role=upper('connect');??
- --对象权限就是指在表、视图、序列、过程、函数或包等对象上执行特殊动作的权利。有九种不同类型的权限可以授予给用户或角色??
- --系统权限需要授予者有进行系统级活动的能力,如连接数据库,更改用户会话、建立表或建立用户等等。你可以在数据字典视图SYSTEM_PRIVILEGE_MAP上获得完整的系统权限。对象权限和系统权限都通过GRANT语句授予用户或角色。需要注意的是在授予对象权限时语句应该是WITH?GRANT?OPTION子句,但在授予系统权象时语句是WITH?ADMIN?OPTION;??
- --查看死锁信息&解除死锁??
- select?sess.sid,??
- ???????sess.serial#,??
- ???????lo.oracle_username,??
- ???????lo.os_user_name,??
- ???????ao.object_name,??
- ???????lo.locked_mode??
- ??from?v$locked_object?lo,?dba_objects?ao,?v$session?sess??
- ?where?ao.object_id?=?lo.object_id??
- ???and?lo.session_id?=?sess.sid;??
- ?????
- ???SELECT?a.sid,?b.owner,?object_name,?object_type??
- ??FROM?v$lock?a,?all_objects?b??
- ?WHERE?TYPE?=?'TM'??
- ???and?a.id1?=?b.object_id;??
- ?????
- alter?system?kill?session?'3267,62017'??
- ??
- --查看死锁机器??
- select?username,?lockwait,?status,?machine,?program??
- ??from?v$session??
- ?where?sid?in?(select?session_id?from?v$locked_object)??
- ???
- ?--查看死锁字段??
- ?select?sql_text??
- ??from?v$sql??
- ?where?hash_value?in??
- ???????(select?sql_hash_value??
- ??????????from?v$session??
- ?????????where?sid?in?(select?session_id?from?v$locked_object));??