WITH
T1 AS(SELECTROUND(SUM(A.DECLARE_STATUS)/COUNT(1),2)*100||'%'AS DONE
FROM CXZY_NOTICE_ISSUE A
WHERE A.NOTICE_ID='0e2e237c662f489c8b29bc12830878de'),
T2 AS(SELECTROUND(SUM(CASE B.SUBMIT_STATUS WHEN'3'THEN1ELSE0END)/SUM(CASE B.SUBMIT_STATUS WHEN'0'THEN0ELSE1END),2)*100||'%' PASS
FROM CXZY_PROJECT_INFO B
WHERE B.NOTICE_ID='0e2e237c662f489c8b29bc12830878de'),
T3 AS(SELECTCOUNT(1) ALREADY_ISSUE
FROM CXZY_NOTICE_ISSUE C
WHERE C.NOTICE_ID='0e2e237c662f489c8b29bc12830878de'AND C.DECLARE_STATUS ='1'),
T4 AS(SELECTCOUNT(D.ISSUE_ID) NOT_ISSUE
FROM CXZY_NOTICE_ISSUE D
WHERE D.NOTICE_ID='0e2e237c662f489c8b29bc12830878de'AND D.DECLARE_STATUS ='0'),
T5 AS(SELECT(CASEWHEN SYSDATE > TRUNC(TO_DATE('2019-08-05','YYYY-MM-DD'))+(INTERVAL'1'DAY)THEN
H.TOTAL - G.NOT_LATE
ELSE0END)BE_LATE
FROM(SELECTCOUNT(F.ISSUE_ID) NOT_LATE
FROM(SELECT E.ISSUE_ID,SUM(CASE E.IS_LATE WHEN'0'THEN1ELSE0END) ALREADY_DONE
FROM CXZY_PROJECT_INFO E
WHERE E.NOTICE_ID='0e2e237c662f489c8b29bc12830878de'AND E.SUBMIT_STATUS <>'0'GROUPBY E.ISSUE_ID
) F
WHERE F.ALREADY_DONE <>0)G,(SELECTCOUNT(1) TOTAL FROM CXZY_NOTICE_ISSUE WHERE NOTICE_ID='0e2e237c662f489c8b29bc12830878de')H
)SELECT T1.DONE,T2.PASS,T3.ALREADY_ISSUE,T4.NOT_ISSUE,T5.BE_LATE FROM T1,T2,T3,T4,T5
查询前三名(包括重复)
SELECT D.NAME AS DEPARTMENT, E.NAME AS EMPLOYEE, E.SALARY AS SALARY
FROM TEST_EMPLOYEE E
INNERJOIN TEST_DEPARTMENT D
ON E.DEPARTMENTID = D.ID
WHERE(SELECTCOUNT(DISTINCT SALARY)FROM TEST_EMPLOYEE
WHERE SALARY > E.SALARY
AND DEPARTMENTID = E.DEPARTMENTID
)<3ORDERBY E.DEPARTMENTID, SALARY DESC
查询所有表表结构信息(表名,字段名,数据类型,备注)
SELECT T.TABLE_NAME,
T.COLUMN_NAME,
T.DATA_TYPE ||'('|| T.DATA_LENGTH ||')',
T1.COMMENTS
FROM USER_TAB_COLS T, USER_COL_COMMENTS T1
WHERE T.TABLE_NAME = T1.TABLE_NAME
AND T.COLUMN_NAME = T1.COLUMN_NAME;
SELECT*FROM(SELECT ROWNUM RRR, TTT.*FROM(--查询sql) TTT
WHERE ROWNUM <='10')WHERE RRR >'0'
根据字段值查询所在表名和列名
--示例1DECLARECURSOR CUR_QUERY ISSELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS T WHERE T.DATA_TYPE ='VARCHAR2';
A NUMBER;
SQL_HARD VARCHAR2(2000);
VV NUMBER;BEGIN DBMS_OUTPUT.ENABLE(buffer_size =>null);FOR REC1 IN CUR_QUERY LOOP
A :=0;IF REC1.DATA_TYPE ='VARCHAR2'OR REC1.DATA_TYPE ='CHAR'THEN
A :=1;ENDIF;IF A >0THEN
SQL_HARD :='';
SQL_HARD :='SELECT COUNT(*) FROM '|| REC1.TABLE_NAME ||' WHERE '||'"'||
REC1.COLUMN_NAME ||'"'||' LIKE ''78950ec2505147df837fc7dde0a5b74a''';--字段值--DBMS_OUTPUT.PUT_LINE(SQL_HARD);EXECUTE IMMEDIATE SQL_HARD INTO VV;IF VV >0THEN
DBMS_OUTPUT.PUT_LINE('[字段值所在的表.字段]:['|| REC1.TABLE_NAME ||'].['||
REC1.COLUMN_NAME ||']');ENDIF;ENDIF;ENDLOOP;END;--示例2DECLARECURSOR CUR_QUERY1 ISSELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS T WHERE T.DATA_TYPE ='VARCHAR2';CURSOR CUR_QUERY2 ISSELECT T.MODULE_INFO_CODE,MAX(T.INFO_ID)INFO_ID
FROM COMM_ATTACHEMENT T
WHERE T.INFO_ID ISNOTNULLGROUPBY T.MODULE_INFO_CODE
ORDERBY T.MODULE_INFO_CODE;
SQL_HARD VARCHAR2(2000);
VV NUMBER;BEGIN DBMS_OUTPUT.ENABLE(buffer_size =>null);FOR REC2 IN CUR_QUERY2 LOOPFOR REC1 IN CUR_QUERY1 LOOP
SQL_HARD :='';
SQL_HARD :='SELECT COUNT(*) FROM '|| REC1.TABLE_NAME ||' WHERE '||'"'||
REC1.COLUMN_NAME ||'"'||' LIKE '||''''|| REC2.INFO_ID||'''';-- DBMS_OUTPUT.PUT_LINE(SQL_HARD);EXECUTE IMMEDIATE SQL_HARD INTO VV;IF VV >0THEN
DBMS_OUTPUT.PUT_LINE('[字段值]:['|| REC2.INFO_ID ||'],[CODE值]:['||
REC2.MODULE_INFO_CODE ||'],[对应表名称]:['|| REC1.TABLE_NAME
||'],[对应列名]:['|| REC1.COLUMN_NAME ||']');ENDIF;ENDLOOP;ENDLOOP;END;
自定义排序
MERGEINTO SYN_ADDRESSBOOK T1
USING(SELECT ADDRESSBOOK_ID, NEW_ORDER_NO
FROM(SELECT R1.ADDRESSBOOK_ID,
R1.ORDER_NO AS ORDER_NO_R1,
R1.ORDER_NO_NULLS,CASEWHEN R1.ADDRESSBOOK_ID ='3725c682eec0427299ed9d8f2eeeb1c1'THEN6WHEN R1.ORDER_NO < R2.ORDER_NO AND R1.ORDER_NO >=6THEN
R1.ORDER_NO +1WHEN R1.ORDER_NO > R2.ORDER_NO AND R1.ORDER_NO <=6THEN
R1.ORDER_NO -1ELSE
R1.ORDER_NO
ENDAS NEW_ORDER_NO,
R1.ORDER_NO_OLD
FROM(SELECT ADDRESSBOOK_ID,
ORDER_NO_NULLS,
ROWNUM AS ORDER_NO,
ORDER_NO AS ORDER_NO_OLD
FROM(SELECT TZW.ADDRESSBOOK_ID,
TZW.ORDER_NO,
TZW.ORDER_NO AS ORDER_NO_NULLS
FROM SYN_ADDRESSBOOK TZW
WHERE TZW.PAR_ID ='00000001'AND TZW.DATASTATE =1ORDERBY TZW.ORDER_NO) TMP
ORDERBY TMP.ORDER_NO) R1
LEFTJOIN(SELECT ADDRESSBOOK_ID,
ORDER_NO_NULLS,
ROWNUM AS ORDER_NO
FROM(SELECT TZW.ADDRESSBOOK_ID,
TZW.ORDER_NO,
TZW.ORDER_NO AS ORDER_NO_NULLS
FROM SYN_ADDRESSBOOK TZW
WHERE TZW.PAR_ID ='00000001'AND TZW.DATASTATE =1ORDERBY TZW.ORDER_NO) TMP
ORDERBY TMP.ORDER_NO) R2
ON R2.ADDRESSBOOK_ID ='3725c682eec0427299ed9d8f2eeeb1c1'ORDERBY NEW_ORDER_NO)WHERE ORDER_NO_R1 != NEW_ORDER_NO
OR ORDER_NO_OLD != NEW_ORDER_NO
OR ORDER_NO_NULLS ISNULL) T2
ON(T1.ADDRESSBOOK_ID = T2.ADDRESSBOOK_ID)WHENMATCHEDTHENUPDATESET T1.ORDER_NO = T2.NEW_ORDER_NO
锁表信息查询
/*查看Oracle被锁的表以及如何解锁
注意权限问题*/--1.查看是否有被锁的表:select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id = a.object_id
--2.查看是哪个进程锁的select b.username,b.sid,b.serial#,logon_timefrom v$locked_object a,v$session b
where a.session_id = b.sid orderby b.logon_time
--3.杀掉进程alter system killsession'sid,serial#';
删除多个表的数据
DECLARECURSOR CUR_TRUNC
ISSELECT T.TABLE_NAME,T.COMMENTS FROM USER_TAB_COMMENTS T
WHERE T.TABLE_NAME LIKE'%LHKH_%'AND T.COMMENTS NOTLIKE'%指标对应%'AND T.COMMENTS NOTLIKE'%指标编码%'AND T.COMMENTS NOTLIKE'%指标配置表%'AND T.COMMENTS NOTLIKE'%字典%';BEGINFOR CUR_DEL IN CUR_TRUNC LOOPEXECUTE IMMEDIATE 'TRUNCATE TABLE '||CUR_DEL.TABLE_NAME;ENDLOOP;END;
统计各级党委完成率
--包含本级党委WITH A0 AS(SELECT T.PAR_ID, T.P_PAR_ID, CONNECT_BY_ISLEAF AS LEAF
FROM PAR_REAL_INFO T
INNERJOIN PAR_BASEINFO R
ON T.PAR_ID = R.PAR_ID
STARTWITH T.PAR_ID ='1'AND T.PAR_ID = R.PAR_ID
AND T.ENDDA ='99991231'AND R.IN_USE_OR_REVOKE ='1'CONNECTBY PRIOR T.PAR_ID = T.P_PAR_ID
AND T.PAR_ID = R.PAR_ID
AND R.IN_USE_OR_REVOKE ='1'AND T.ENDDA ='99991231'AND R.PAR_TYPE ='611'),
A1 AS(SELECT T.PAR_ID
FROM LHKH_DWHXX T
WHERE T.ITEM_STATE='1'AND T.LEARNING_DATE BETWEEN TRUNC(SYSDATE-1,'year')AND LAST_DAY(ADD_MONTHS(SYSDATE,-1))GROUPBY T.PAR_ID),
A2 AS(SELECT A.PAR_ID,COUNT(1)AS CNT_DBDWS--达标党委数FROM A0 A
STARTWITH A.PAR_ID IN(SELECT PAR_ID FROM A1)CONNECTBY A.PAR_ID = PRIOR A.P_PAR_ID
GROUPBY A.PAR_ID),
A3 AS(SELECT ROOT_ID AS PAR_ID,COUNT(1)AS CNT_DWZS --党委总数FROM(SELECT PAR_ID, CONNECT_BY_ROOT(PAR_ID)AS ROOT_ID
FROM A0 A
STARTWITH A.PAR_ID IN(SELECT PAR_ID FROM A0)CONNECTBY PRIOR A.PAR_ID = A.P_PAR_ID)GROUPBY ROOT_ID)SELECT A3.PAR_ID,
DECODE(A3.CNT_DWZS,0,0,(A2.CNT_DBDWS / A3.CNT_DWZS)) T211
FROM A3
INNERJOIN A2
ON A3.PAR_ID = A2.PAR_ID
--不包含本级党委WITH A0 AS(SELECT T.PAR_ID, T.P_PAR_ID, CONNECT_BY_ISLEAF AS LEAF
FROM PAR_REAL_INFO T
INNERJOIN PAR_BASEINFO R
ON T.PAR_ID = R.PAR_ID
STARTWITH T.PAR_ID ='1'AND T.PAR_ID = R.PAR_ID
AND T.ENDDA ='99991231'AND R.IN_USE_OR_REVOKE ='1'CONNECTBY PRIOR T.PAR_ID = T.P_PAR_ID
AND T.PAR_ID = R.PAR_ID
AND R.IN_USE_OR_REVOKE ='1'AND T.ENDDA ='99991231'AND R.PAR_TYPE ='611'),
A1 AS(SELECT T.PAR_ID
FROM LHKH_DWHXX T
WHERE T.ITEM_STATE='1'AND T.LEARNING_DATE BETWEEN TRUNC(SYSDATE-1,'year')AND LAST_DAY(ADD_MONTHS(SYSDATE,-1))GROUPBY T.PAR_ID),
A2 AS(SELECT A.P_PAR_ID AS PAR_ID,COUNT(1)AS CNT_DBDWS --达标党委数FROM A0 A
STARTWITH A.PAR_ID IN(SELECT PAR_ID FROM A1)CONNECTBY A.PAR_ID = PRIOR A.P_PAR_ID
GROUPBY A.P_PAR_ID),
A3 AS(SELECT ROOT_ID AS PAR_ID,COUNT(1)AS CNT_DWZS --党委总数FROM(SELECT PAR_ID, CONNECT_BY_ROOT(P_PAR_ID)AS ROOT_ID
FROM A0 A
STARTWITH A.P_PAR_ID IN(SELECT PAR_ID FROM A0 WHERE LEAF =0)CONNECTBY PRIOR A.PAR_ID = A.P_PAR_ID)GROUPBY ROOT_ID)SELECT A3.PAR_ID,
DECODE(A3.CNT_DWZS,0,0,(A2.CNT_DBDWS / A3.CNT_DWZS)) T211
FROM A3
INNERJOIN A2
ON A3.PAR_ID = A2.PAR_ID