总览:
- 创建一个测试表TEST、创表语句CREATE_TABLE表
- 按Excel模板的东西插入到TEST表
- 创建存储过程执行
- 复制创表语句
第一步:创建TEST、CREATE_TABLE表
第二步:按Excel模板的东西插入到TEST表
第三步:创建存储过程
create or replace procedure create_table_by_excel
as
sql_statement varchar2(4000); --存储SQL
sql_statement2 varchar2(4000); --存储SQL
sql_comment clob; --注释
sql_comment2 clob; --注释 字段注释过多会导致4000的长度超长
table_name_eng varchar2(1000); --英文表名
table_name_cn varchar2(1000); --中文表名
create_sql_comment varchar2(4000); --存储返回的建表语句
begin
sql_statement :=''; --存储每张表建表语句
sql_statement2 :=''; --存储每个字段建表语句
sql_comment :=''; --存储每张表注释
sql_comment2 :=''; --存储每个字段注释
table_name_eng :=''; --英文表名
table_name_cn :=''; --中文表名
for item in(select TAB_NAME, TAB_NAME_COMMENT from test group by TAB_NAME, TAB_NAME_COMMENT)
loop
--表名赋值
table_name_eng := item.TAB_NAME;
table_name_cn := item.TAB_NAME_COMMENT;
--清空sql_statement
sql_statement := '';
sql_statement2 := '';
sql_comment :='';
sql_comment2 :='';
sql_statement := sql_statement || 'create table '|| table_name_eng || '( ' || chr(10);
for details in(select COL_NAME, DATA_TYPE, COL_COMMENT from test where upper(TAB_NAME) = upper(table_name_eng))
loop
--拼接创建表语句
sql_statement2 := sql_statement2 || ' ' || details.COL_NAME || ' ' || details.DATA_TYPE ||', '|| chr(10);
--拼接字段注释
sql_comment2 :='';
sql_comment2 := sql_comment2 || 'comment on column ' || table_name_eng || '.' || details.COL_NAME || ' is ' || '''' ||details.COL_COMMENT|| '''' ||';';
sql_comment := sql_comment || chr(13) || sql_comment2;
dbms_output.put_line(sql_comment);
end loop;
--去掉最后多拼接的逗号
sql_statement := sql_statement || substr(sql_statement2, 0, length(sql_statement2)-3);
--后面的右括号
sql_statement := sql_statement || chr(10) || ');';
--拼接表名注释
sql_comment := 'comment on table ' || table_name_eng || ' is ' || '''' || table_name_cn || '''' || ';' || sql_comment;
--优化建表语句,没有长度的字段类型()需要删除
sql_statement := replace(sql_statement, '()', '');
--建表语句
insert into create_table(tab_name, create_sql, tab_comment, create_sql_comment) values(table_name_eng, sql_statement, sql_comment, sql_statement || chr(10) || sql_comment);
commit;
-- 执行创建语句和注释语句
--sql_statement := replace(sql_statement, ';', '');
--execute immediate sql_statement;
--execute immediate sql_comment;
end loop;
end create_table_by_excel;
然后调用执行:call create_table_by_excel();
即可得到了创表语句
第四步:复制创表语句
又或者将存储过程注释放开执行:
execute immediate sql_statement;
execute immediate sql_comment;
结尾:到此结束了,类似这样,其实还可以用Python处理一下(网上也有一些方法)
如果觉得有点帮助,麻烦点下赞呗