看下面的「資料字典」就知道是比較簡單的資料字典。不寫什麼說明了,因為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...