用于Oracle数据库国产化为TiDB,由于国产化TiDB数据库与Oracle字段存储长度存在差异,需要在信创时做好转换
-- 中文检测
-- 执行该SQL生成所有相关字段的查询脚本
-- 每个字段对应一条SQL语句
-- 每条语句执行的结果包含 表名/字段名/包含中文行数(大于零代表包含中文)
sql
SELECT
'SELECT '''||TABLE_NAME||''' AS TABLE_NAME , '''||COLUMN_NAME||''' AS COLUMN_NAME , SUM(CASE WHEN NVL(LENGTH( '||COLUMN_NAME ||'),0)< NVL(LENGTHB('||COLUMN_NAME||'),0) THEN 1 ELSE 0 END ) AS CHN_CHECK FROM YOUR_SCHEMA_NAME.'||TABLE_NAME||' WHERE '||COLUMN_NAME||' IS NOT NULL ;' AS CHARSET_SQL
FROM
DBA_TAB_COLS
WHERE
OWNER IN ('YOUR_SCHEMA_NAME')
AND USER_GENERATED='YES'
AND TABLE_NAME NOT LIKE 'BIN$%'
AND TABLE_NAME NOT LIKE 'T/_%' ESCAPE '/'
AND TABLE_NAME NOT LIKE 'TT/_%' ESCAPE '/'
AND TABLE_NAME NOT LIKE '%/_BAK/_%' ESCAPE '/'
AND TABLE_NAME NOT LIKE '%/_BAK' ESCAPE '/'
AND TABLE_NAME NOT LIKE '%/_TMP/_%' ESCAPE '/'
AND TABLE_NAME NOT LIKE 'TMP/_%' ESCAPE '/'
AND DATA_TYPE='VARCHAR2';
-- 字段最大长度检测
-- 执行该SQL生成所有相关字段的查询脚本
-- 每个字段对应一条SQL语句
-- 每条语句执行的结果包含 表名/字段名/最大字符数
sql
```sql
SELECT
'SELECT '''||TABLE_NAME||''' AS TABLE_NAME , '''||COLUMN_NAME||''' AS COLUMN_NAME , MAX(NVL(LENGTH( '||COLUMN_NAME||'),0)) AS MAX_LENGTH FROM YOUR_SCHEMA_NAME.'||TABLE_NAME||' WHERE '||COLUMN_NAME||' IS NOT NULL ;' AS LENGTH_SQL
FROM
DBA_TAB_COLS
WHERE
OWNER IN ('YOUR_SCHEMA_NAME')
AND USER_GENERATED='YES'
AND TABLE_NAME NOT LIKE 'BIN$%'
AND TABLE_NAME NOT LIKE 'T/_%' ESCAPE '/'
AND TABLE_NAME NOT LIKE 'TT/_%' ESCAPE '/'
AND TABLE_NAME NOT LIKE '%/_BAK/_%' ESCAPE '/'
AND TABLE_NAME NOT LIKE '%/_BAK' ESCAPE '/'
AND TABLE_NAME NOT LIKE '%/_TMP/_%' ESCAPE '/'
AND TABLE_NAME NOT LIKE 'TMP/_%' ESCAPE '/'
AND DATA_TYPE='VARCHAR2';