gauss100迁移到gauss200
#!/bin/bash
# 输入文件
input_file="oracle_ddl.sql"
# 输出文件
output_file="gauss_dws_ddl.sql"
# 清空输出文件
> "$output_file"
# 读取文件内容
while IFS= read -r line; do
# 替换 Oracle 数据类型为 GaussDB(DWS) 数据类型
line=$(echo "$line" | sed -E '
# 替换 VARCHAR
s/VARCHAR\(([0-9]+) BYTE\)/VARCHAR(\1)/g;
s/VARCHAR2\(([0-9]+) BYTE\)/VARCHAR(\1)/g;
s/VARCHAR2\(([0-9]+)\)/VARCHAR(\1)/g;
# 替换 CHAR 类型
s/CHAR\(([0-9]+) BYTE\)/CHAR(\1)/g;
s/NCHAR\(([0-9]+)\)/CHAR(\1)/g;
# 替换 LOB 类型
s/CLOB/TEXT/g;
s/BLOB/BYTEA/g;
s/NCLOB/TEXT/g;
# 替换 NUMBER
s/NUMBER\(([0-9]+)(,[0-9]+)?\)/NUMERIC(\1\2)/g;
s/NUMBER/NUMERIC/g;
# 替换 BINARY 类型
s/BINARY_INTEGER/INTEGER/g;
s/BINARY_FLOAT/REAL/g;
s/BINARY_DOUBLE/DOUBLE PRECISION/g;
s/BINARY_BIGINT/BIGINT/g;
# 替换 DATE 和 TIMESTAMP 类型
s/DATE/TIMESTAMP/g;
s/TIMESTAMP\(([0-9]+)\)/TIMESTAMP/g;
s/TIMESTAMP\(([0-9]+)\)WITH TIME ZONE/TIMESTAMP WITH TIME ZONE/g;
s/TIMESTAMP WITH LOCAL TIME ZONE/TIMESTAMP/g;
# 替换 DEFAULT 值
s/DEFAULT SYSDATE/DEFAULT CURRENT_TIMESTAMP/g;
s/DEFAULT SYSTIMESTAMP/DEFAULT CURRENT_TIMESTAMP/g;
s/DEFAULT now\(\)/DEFAULT CURRENT_TIMESTAMP/g;
# 替换 CHECK 约束
s/CHECK \(([^)]+)\)/CHECK (\1)/g;
# 替换其他常见类型
s/RAW\(([0-9]+)\)/BYTEA/g;
s/LONG RAW/BYTEA/g;
s/LONG/TEXT/g;
s/FLOAT\(([0-9]+)\)/DOUBLE PRECISION/g;
')
# 写入输出文件
echo "$line" >> "$output_file"
done < "$input_file"
echo "列属性已转换为 GaussDB(DWS) 格式并保存到 $output_file 文件中。"
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




