需求:
1、要求統計oracle數據庫某個用戶下所有的表數據,並且查詢的結果是,拼接了這些表結構的查詢sql語句。
2、將第一條oracle數據庫語句轉換成db2數據庫語句
一、oracle數據庫sql語句
OWNER | 當前登錄用戶 |
DATA_LENGTH | 字段長度 |
data_type | 字段類型 |
column_name | 字段名 |
table_name | 表名 |
SELECT 'SELECT to_char(' || T.COLUMN_NAME || ') AS RESULT,'''||tt.OWNER||''' as 用戶 , '''|| T.TABLE_NAME || ''' as 表名 , ''' ||
T.COLUMN_NAME || ''' as 列名 FROM ' || TT.OWNER || '.' || T.TABLE_NAME ||
' WHERE ' || T.COLUMN_NAME || ' LIKE ''%萬%'' or '
|| T.COLUMN_NAME ||' like ''%萬記%'' or '
|| T.COLUMN_NAME ||' like ''%萬長%'' or '
|| T.COLUMN_NAME ||' like ''%良%'' union all '
,tt.OWNER,t.TABLE_NAME, t.COLUMN_NAME,t.DATA_LENGTH,t.DATA_TYPE
FROM USER_TAB_COLS T
INNER JOIN ALL_TABLES TT
ON TT.TABLE_NAME = T.TABLE_NAME
AND TT.OWNER NOT IN ('SYS', 'SYSTEM', 'MDSYS', 'XDB') AND tt.OWNER IS NOT NULL
WHERE (T.DATA_TYPE LIKE '%VARCHAR%'
OR T.DATA_TYPE LIKE '%CLOB%')
and t.COLUMN_NAME not in('ID','CODE','BTM','STATUS','STATE')
AND (t.COLUMN_NAME not like '%ID' and t.COLUMN_NAME not like '%CODE' and t.COLUMN_NAME not like '%STATE')
AND T.DATA_LENGTH > 2
and t.DATA_LENGTH < 4000
and tt.OWNER ='GZYT'
order by t.TABLE_NAME , t.COLUMN_NAME;
二、已經轉成db2數據庫sql語句
SYSIBM.SYSCOLUMNS 表字段說明:
NAME |
TBNAME |
COLTYPE |
LENGTH |
NULLS |
CREATOR | TYPE |
字段名稱 |
表名稱 |
字段類型 |
字段指定長短 |
是否可以爲空 |
數據庫對象的創建者 | 表用T表示;視圖用V表示 |
SELECT 'SELECT char(' || t.NAME || ') AS RESULT,'''||tt.CREATOR||''' as 用戶 , '''|| t.TBNAME || ''' as 表名 , ''' ||
t.NAME || ''' as 列名 FROM ' || TT.CREATOR || '.' || t.TBNAME ||
' WHERE ' || t.NAME || ' LIKE ''%萬良%'' or '
|| t.NAME ||' like ''%萬記%'' or '
|| t.NAME ||' like ''%萬長%'' or '
|| t.NAME ||' like ''%良%'' union all '
,tt.CREATOR,t.TBNAME, t.NAME,T.LENGTH,t.COLTYPE
FROM sysibm.syscolumns T
INNER JOIN sysibm.SYSTABLES TT
ON TT.NAME = T.TBNAME
AND tt.CREATOR IS NOT NULL
WHERE (T.COLTYPE LIKE '%VARCHAR%'
OR T.COLTYPE LIKE '%CLOB%')
and t.NAME not in('ID','CODE','BTM','STATUS','STATE')
AND (t.NAME not like '%ID' and t.NAME not like '%CODE' and t.NAME not like '%STATE')
AND T.LENGTH > 2
and T.LENGTH < 4000
and tt.CREATOR ='FASP'
and tt.TYPE='T'
order by t.TBNAME , t.NAME;