由資料字典的表,生成建表語句

2021-05-23 01:26:08 字數 3365 閱讀 9358

看下面的「資料字典」就知道是比較簡單的資料字典。不寫什麼說明了,因為1、不算複雜2、不算深奧。

誰想用而又不明白,歡迎提問。

sql> desc 資料字典

名稱             型別

---------------  ----------------

表名             varchar2(150)

欄位名           varchar2(100)

字段型別         varchar2(100)

字段序號         number(38)

資料長度         number(38)

整數字           number(38)

小數字           number(38)

關鍵字           char(1)

declare

hfile     utl_file.file_type;

sql_str   varchar2(1500);

v_sql     varchar2(500);

v_cursor  number;

v_stat    number;

slasttbl  varchar2(100);

v_tblname varchar2(100);

v_fldname varchar2(100);

v_fldtype varchar2(100);

v_fldsize number(10);

v_fldint  number(10);

v_flddec  number(10);

v_iskey   char(1);

cursor c_tbl is select distinct 表名 from 資料字典 order by 表名;

begin

hfile := utl_file.fopen('my_dir', 'abc.sql', 'w');

utl_file.putf(hfile, '--data structur v0.1 beta/n');

open c_tbl;

loop       

fetch c_tbl into v_tblname;

exit when c_tbl%notfound;

sql_str:='create table '||v_tblname||'(';

dbms_output.put_line('table='|| v_tblname);

v_sql:='select 欄位名, 字段型別, 資料長度, 整數字, 小數字, 關鍵字 '

||'from 使用者名稱.資料字典 '

||'where 表名=:tblname '

||'order by 字段序號';

v_cursor := dbms_sql.open_cursor;

dbms_sql.parse(v_cursor, v_sql, dbms_sql.native);

dbms_sql.bind_variable(v_cursor, ':tblname', v_tblname);

dbms_sql.define_column(v_cursor, 1, v_fldname, 100);

dbms_sql.define_column(v_cursor, 2, v_fldtype, 100);

dbms_sql.define_column(v_cursor, 3, v_fldsize);

dbms_sql.define_column(v_cursor, 4, v_fldint);

dbms_sql.define_column(v_cursor, 5, v_flddec);

dbms_sql.define_column(v_cursor, 6, v_iskey, 1);

v_stat := dbms_sql.execute(v_cursor);

loop

exit when dbms_sql.fetch_rows(v_cursor)<=0;

dbms_sql.column_value(v_cursor, 1, v_fldname);

dbms_sql.column_value(v_cursor, 2, v_fldtype);

dbms_sql.column_value(v_cursor, 3, v_fldsize);

dbms_sql.column_value(v_cursor, 4, v_fldint);

dbms_sql.column_value(v_cursor, 5, v_flddec);

dbms_sql.column_value(v_cursor, 6, v_iskey);

dbms_output.put_line('____'||v_fldname);

if ('varchar2'=v_fldtype)or ('char'=v_fldtype) then

sql_str:=sql_str||v_fldname||' '||v_fldtype||'('||v_fldsize||')';

elsif ('number'=v_fldtype) or ('float'=v_fldtype) then

if v_flddec>0 then

sql_str:=sql_str||v_fldname||' '||v_fldtype||'('||v_fldsize||','||v_flddec||')';

else

sql_str:=sql_str||v_fldname||' '||v_fldtype||'('||v_fldsize||')';

end if;

else

sql_str:=sql_str||v_fldname||' '||v_fldtype;

end if;

if '1'=v_iskey then

sql_str:=sql_str||' primary key';

end if;

sql_str:=sql_str||', ';

end loop;

dbms_sql.close_cursor(v_cursor);

sql_str:=substr( sql_str, 1, length(sql_str)-2 ) || ');';

--execute immediate sql_str;

utl_file.putf(hfile, sql_str);

utl_file.putf(hfile, '/n');

utl_file.putf(hfile, '/n');

dbms_output.put_line('***************************');

end loop;

close c_tbl;

utl_file.fclose(hfile);

end;

/

基於表的資料字典構造MySQL建表語句

表的資料字典格式如下 如果手動寫mysql建表語句,確認麻煩,還不能保證書寫一定正確。寫了個perl指令碼,可快速構造mysql指令碼語句。指令碼如下 usr bin perl usestrict my line while elsif s s s s s s s s print line n 首先...

SqlServer生成資料字典語句

select 表名 case when a.colorder 1 then d.name else end,表說明 case when a.colorder 1 then isnull f.value,else end,字段序號 a.colorder,欄位名 a.name,標識 case when ...

批量匯出hive表結構 生成建表語句

說明 最近在做集群資料遷移,需要把hive所有的表同步至新的集群。指令碼 bin bash mkdir p opt hive tables tablesddl hive e show databases opt hive databases.txt echo cat database cat opt...