- 当部分资料未按照原有格式进行编写,需要手动合并时
合并公式 : H4&“(”&I4&“)”
示例 :
- 查询锁表
SELECT object_name, machine, s.sid, s.serial
FROM gv$locked_object l, dba_objects o, gv$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid;
- 将锁表解锁
alter system kill session 'sid,serial#';
- 查询是否有特殊符号
SELECT * FROM 表 WHERE NOT REGEXP_LIKE(字段,'^[0-9]+$')
regexp_replace('LVGBV87E3GG2547','\D*','') as b,
regexp_replace('LVGBV87E3GG2547','[a-zA-Z]*','') as c,
regexp_replace('LVGBV87E3GG2547','[0-9]+','') as d
- 查询某表中有特殊字符的数量
select DEALERCODE,COUNT(spe_char)
from(select PARTSCODE,
DEALERCODE,
regexp_replace(PARTSCODE,'[^!@#$%&*()+=:;",.?\|]','') spe_char
from A ) t
where t.spe_char is not null
GROUP BY DEALERCODE
- 查询某表中有空格的数量
select DEALERCODE,count(1) from A
where PARTSCODE like ' %'
group by DEALERCODE
- 查询某表中同一LOCANO>1的数量
SELECT T.DEALERCODE, COUNT(1)
FROM (SELECT DEALERCODE, LOCANO, COUNT(1)
FROM A
WHERE TRIM(LOCANO) IS NOT NULL
GROUP BY DEALERCODE, LOCANO
HAVING COUNT(1) > 1
ORDER BY DEALERCODE DESC) T
WHERE T.LOCANO IS NOT NULL
GROUP BY T.DEALERCODE
- 修复脚本
MERGE INTO A表 X
USING (SELECT disTINCT TO_CHAR(A.ID) AS ID,C.QTY
FROM A表 A
JOIN C表 C
ON A.NO = TRIM(C.CODE)
) Y ON (X.ID=Y.ID)
WHEN MATCHED THEN
UPDATE SET X.QTY = Y.QTY;
COMMIT;
- 获取修复数据语句
SELECT
'UPDATE A表 SET QTY = ''' || QTY || ''' WHERE ID = ''' || ID || ''';'
FROM A表
SELECT
'UPDATE A表 SET QTY = ' || QTY || ' WHERE ID = ''' || ID || ''';'
FROM A表
- 迁移时部分数据操作
DECODE(TYPE,0,1,1,0,2)
TO_NUMBER(TRIM(ID))
TRIM(TYPE)
LTRIM(TYPE)
RTRIM(TYPE)
SELECT * FROM T1表
WHERE NOT EXISTS (SELECT 1
FROM T2表 T2
WHERE T2.NO = TRIM(T1.NO)
AND T2.ORDERNO=TRIM(T1.ORDERNO))
AND T1.STATUS='1'
TO_DATE(TDATE,'yyyy-mm-dd hh24:mi:ss')
TO_CHAR(TDATE,'yyyymmdd')
CONCAT(CONCAT(TO_CHAR(SYSDATE,'yyyymmdd'),'00'),lpad(rownum,8,'0'))
NVL(DECODE(TRIM(status),'0','6','1','3'),'6')
replace(Ages,'KM','1')
SELECT * FROM G表
WHERE regexp_instr(UID,'[' || unistr('\4e00') || '-' || unistr('\9fa5') || ']') = 1
SYSDATE
DECODE(SUBSTR(TRIM(ORDERNO),1,1),'S','1','P','2')
- 清空表数据
TruncATE TABLE 表名
- 固化脚本
DROP TABLE B
CREATE TABLE B AS
SELECT *
FROM A;
GRANT SELECT ON B TO BBASE;
CREATE INDEX GH1 ON B(ORDERNO) TABLESPACE TACTINDEX01;
- 固化脚本(例固化已结算与未结算的数据)
DROP TABLE S;
CREATE TABLE S AS
SELECT * FROM A表 A
WHERE EXISTS ( SELECT 1 FROM
(SELECT C.DNO, C.DCODE, D.WNO
FROM (SELECT B.WNO, A.DCODE, A.DNO
FROM A表 A
JOIN B表 B
ON A.DCODE = B.DCODE
AND A.DNO = B.DNO) C
JOIN D表 D
ON C.WNO = D.WNO AND C.DCODE=D.DCODE
AND D.CTE IS NULL) E
WHERE A.DCODE = E.DCODE
AND A.DNO = E.DNO)
AND A.WTYPE='类型' UNION ALL
SELECT A.*
FROM A表 A
JOIN G表 G
ON A.ORDERNO = G.ORDERNO
WHERE G.TTYPE IN ('M') AND NOT EXISTS ( SELECT 1 FROM
(SELECT C.DNO, C.DCODE, D.WNO
FROM (SELECT B.WNO, A.DCODE, A.DNO
FROM A表 A
JOIN B表 B
ON A.DCODE = B.DCODE
AND A.DNO = B.DNO) C
JOIN D表 D
ON C.WNO = D.WNO AND C.DCODE=D.DCODE
AND D.CTE IS NULL) E
WHERE A.DCODE = E.DCODE
AND A.DNO = E.DNO) AND A.WTYPE='类型' ;
GRANT SELECT ON S TO S表;
- 模糊查询
where id like '%1'
where id like ' %'
where id like '%1%'
- 优化可参考步骤
- 窗口函数
SELECT *
FROM T1表 T1
LEFT JOIN (SELECT ENO,DFLAG FROM
(SELECT ROW_NUMBER() OVER(PARTITION BY A.ENO ORDER BY A.CID DESC) RN,
A.* FROM A表 A)WHERE RN=1) T2
ON T1.ENO = T2.ENO
- CASE WHEN 函数
CASE WHEN ENO IS NOT NULL AND ENO <> 'null'
THEN '1'
ELSE '0'
END