---------------------------隐示FOR循环使用示例---------------------------BEGINFOR CUR IN(SELECT T.OWNER, T.TABLE_NAME
FROM ALL_TABLES T
WHERE T.TABLE_NAME LIKE'CM_%'AND T.OWNER IN('EA_CTMS','EA_CTMS_HIST'))LOOPEXECUTE IMMEDIATE 'TRUNCATE TABLE '|| CUR.OWNER ||'.'|| CUR.TABLE_NAME;ENDLOOP;END;
--分两列显示两种汇总结果,并排序,保证对应关系select DETAIL_ID,COMMENT_TIME,COMMENT_BODY from(select
DETAIL_ID,
WMSYS.WM_CONCAT(to_char(COMMENT_TIME,'yyyy-mm-dd hh:mi:ss'))OVER(PARTITIONBY DETAIL_ID ORDERBY COMMENT_TIME) COMMENT_TIME,
WMSYS.WM_CONCAT('{'||COMMENT_BODY||'}')OVER(PARTITIONBY DETAIL_ID ORDERBY COMMENT_TIME) COMMENT_BODY,
row_number()OVER(PARTITIONBY DETAIL_ID ORDERBY COMMENT_TIME desc) rs
from BBSCOMMENT)where rs=1;--多行合并为一行,要求排序(最新的评论在前面)select DETAIL_ID,max(r)from(select DETAIL_ID, wmsys.wm_concat(COMMENT_BODY||'('||to_char(COMMENT_TIME,'yyyy-mm-dd hh:mi:ss')||')')OVER(PARTITIONBY DETAIL_ID ORDERBY COMMENT_TIME desc) r from BBSCOMMENT)groupby DETAIL_ID;--将上述SQL语句与主表做一个连接查询select bd.DETAIL_ID,TITLE,bcm.COMMENT_INFO
from BBSDETAIL bd,(select DETAIL_ID,wmsys.wm_concat('{'||COMMENT_BODY||'}')as COMMENT_INFO from BBSCOMMENT groupby DETAIL_ID) bcm
where bd.DETAIL_ID=bcm.DETAIL_ID(+);--多行合并为一行,不要求排序select DETAIL_ID,wmsys.wm_concat('{'||COMMENT_BODY||'}')from BBSCOMMENT
groupby DETAIL_ID;
5 列转行
SELECT WMSYS.WM_CONCAT(T.DBNAME)FROM APPLICATIONCONFIG T WHERE T.APPCODE !='Main';
6 更新表字段顺序
--第一步,从数据字典视图查询出表的idSELECT OBJECT_ID FROM ALL_OBJECTS WHERE OWNER ='EA_CTMS'AND OBJECT_NAME ='MID_CAMCIL_RESULT';--53114--第二步,通过id查出该表中所有字段的顺序SELECT OBJ#, COL#, NAME FROM SYS.COL$ WHERE OBJ# = 53114;--第三步,更新字段的顺序UPDATE SYS.COL$ SET COL# = 188 WHERE OBJ# = 53114 AND NAME = 'BUSI_MON_ID';
7 查询某个数字存在某张表的某个字段中
DECLARE
AC_SQL VARCHAR2(1000);
AC_FLAG NUMBER;BEGINFOR CUR IN(SELECT T.OWNER, T.TABLE_NAME FROM ALL_TABLES T WHERE T.OWNER ='CWXT')LOOPFOR CUR2 IN(SELECT T.COLUMN_NAME
FROM ALL_TAB_COLS T
WHERE T.OWNER = CUR.OWNER
AND T.TABLE_NAME = CUR.TABLE_NAME
AND T.DATA_TYPE NOTIN('BLOB','LONG'))LOOP
AC_SQL :='SELECT COUNT(1) FROM {:OWNER}.{:TABLE_NAME} WHERE {:COLUMN_NAME} LIKE ''%1002010101%'' AND ROWNUM = 1';
AC_SQL :=REPLACE(REPLACE(REPLACE(AC_SQL,'{:OWNER}', CUR.OWNER),'{:TABLE_NAME}',
CUR.TABLE_NAME),'{:COLUMN_NAME}',
CUR2.COLUMN_NAME);DELETEFROM CWXT.TEST;INSERTINTO CWXT.TEST (TST1)VALUES(AC_SQL);COMMIT;EXECUTE IMMEDIATE AC_SQL
INTO AC_FLAG;IF AC_FLAG =1THEN
DBMS_OUTPUT.PUT_LINE(CUR.OWNER ||'.'|| CUR.TABLE_NAME ||'.'||
CUR2.COLUMN_NAME);ENDIF;ENDLOOP;ENDLOOP;END;
8 查询重复的记录
SELECT T.*, T.ROWID
FROM EA_CTMS.BS_OUT_SENT_OBJ_RELA_FILE T
WHEREEXISTS(SELECT1FROM(SELECT T.OUT_SENT_OBJ_CODE, T.FILE_CODE, T.OUT_SENT_OBJ_TYPE
FROM EA_CTMS.BS_OUT_SENT_OBJ_RELA_FILE T
GROUPBY T.OUT_SENT_OBJ_CODE, T.FILE_CODE, T.OUT_SENT_OBJ_TYPE
HAVINGCOUNT(T.OUT_SENT_OBJ_CODE)>1) A
WHERE T.OUT_SENT_OBJ_CODE = A.OUT_SENT_OBJ_CODE
AND T.FILE_CODE = A.FILE_CODE
AND T.OUT_SENT_OBJ_TYPE = A.OUT_SENT_OBJ_TYPE)AND ROWID IN(SELECTMAX(ROWID)FROM EA_CTMS.BS_OUT_SENT_OBJ_RELA_FILE T
GROUPBY T.OUT_SENT_OBJ_CODE, T.FILE_CODE, T.OUT_SENT_OBJ_TYPE
HAVINGCOUNT(T.OUT_SENT_OBJ_CODE)>1);
SELECT*FROM EA_CTMS.BS_INTF_FILE_CL_TYPE T
STARTWITH PARENT_FILE_CFG_TYPE ='0'CONNECTBY PRIOR FILE_CFG_TYPE = PARENT_FILE_CFG_TYPE
ORDER SIBLINGS BY FILE_CFG_TYPE
12 查询表结构
SELECT B.COMMENTS 名称,
A.COLUMN_NAME 代码,
A.DATA_TYPE ||'('|| DECODE(UPPER(A.DATA_TYPE),'NUMBER',
DECODE(TO_CHAR(A.DATA_SCALE),
TO_CHAR(0),
TO_CHAR(A.DATA_PRECISION),
A.DATA_PRECISION ||','|| A.DATA_SCALE),
A.DATA_LENGTH)||')' 数据类型,
A.NULLABLE 必须,
B.COMMENTS 描述
FROM ALL_TAB_COLUMNS A, ALL_COL_COMMENTS B
WHERE A.COLUMN_NAME = B.COLUMN_NAME
AND A.OWNER = B.OWNER
AND A.TABLE_NAME = B.TABLE_NAME
AND A.OWNER ='EI_CTMSDATA'AND A.TABLE_NAME ='STD_KS_BANK_ACC'ORDERBY A.COLUMN_ID;
13 根据已知表的主键查询所有引用这个表主键的外键的表
SELECT T.OWNER,
T.TABLE_NAME,
T.CONSTRAINT_NAME,
S.COLUMN_NAME,
T.R_OWNER,
T.R_CONSTRAINT_NAME
FROM SYS.ALL_CONSTRAINTS T, SYS.ALL_CONS_COLUMNS S
WHERE T.CONSTRAINT_NAME = S.CONSTRAINT_NAME
ANDEXISTS(SELECT1FROM ALL_CONSTRAINTS A, SYS.ALL_CONS_COLUMNS B
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND B.OWNER ='&OWNER'AND B.TABLE_NAME ='&TABLE_NAME'AND A.CONSTRAINT_TYPE ='&CONSTRAINT_TYPE'AND B.COLUMN_NAME ='&COLUMN_NAME'AND T.R_CONSTRAINT_NAME = B.CONSTRAINT_NAME);