Oracle根據Excel或者world數據字典自動生成建表語句和注釋


       工作中一般會出現這種情況,和其他單位合作開發項目時,對方會給我們一份他們的數據字典,excl或者world的,這種情況下我們要根據數據字典將表結構建好,但是一個字段一個字段的去復制粘貼會點到手疼,而且還很容易出錯,在這個情況下我自己做了一個生成建表腳本的小方法,詳情如下:

1、創建生成建表語句的存儲過程:

create table t_OUTString
(
Tname        varchar2(50),
OUTString    clob,
OUTSTRING2   clob,
createddate  date
);

 

create or replace procedure Pro_ExToSql(SStrin in varchar2 ,TString in varchar2) is
  RString varchar2(30000);
  RowString       varchar2(30000);
  LeaveString     varchar2(30000);
  midStr          varchar2(30000);
  LeftStr         varchar2(30000);
  RightStr        varchar2(30000);
  V_Cname varchar2(100);
  V_Ctype varchar2(100);
  V_Ccomment      varchar2(500);
  a               number;
  b               number;
  i       number;
  j       number;
  insertSql       varchar2(30000);
  OUTString       varchar2(30000);
  OUTString2       varchar2(30000);
  cursor curets is
    select cname,ctype,ccomment from ets_temp order by createddate desc;
begin
  j:=1;
  select replace(SStrin,' ','#') into RString from dual;
  select instr(RString,chr(10)),substr(RString , j) into i,LeaveString from dual;
  while i>0 loop
  select substr(LeaveString , j) into LeaveString from dual;
  select instr(LeaveString,chr(10)) into i from dual;
  if i is null 
    then
      goto next;
      end if;
  select substr(LeaveString , 1 ,i ) into RowString from dual;
  j:=i+1;
  select instr(RowString,'#',1,1) ,instr(RowString,'#',1,2) into A,b from dual;
  select substr(RowString,a+1,b-a-1) ,substr(RowString,1,a-1),substr(RowString,b+1) into midStr,LeftStr,RightStr 
  from dual;
  insertSql:='insert into ETS_temp(CComment,Cname,Ctype,createddate) values('''||midStr||''','''||LeftStr||''','''||RightStr||''',sysdate)';
  Execute IMMEDIATE insertSql;
  commit;
  end loop;
  <<next>>
  null;
  open curets;
  loop
    fetch curets
      into V_Cname, V_Ctype,V_Ccomment;
    exit when curets %NOTFOUND;
      OUTString:=''||OUTString||'COMMENT ON COLUMN '||TString||'.'||V_Cname||' is '''||V_Ccomment||''';'||chr(10)||'';
      outstring2:=''||outstring2||''||V_Cname||'   '||V_Ctype||','||chr(10)||'';
      
    end loop ;
    close curets;
    outstring2:='create table '||TString||''||chr(10)||'('||outstring2||');';
    select replace(replace(outstring2,''||chr(10)||',',','),','||chr(10)||');',');') into outstring2 from dual;
  insert into t_OUTString(Tname,OUTString,OUTSTRING2,createddate) values(Tstring,OUTString,OUTSTRING2,sysdate);
  commit;
  delete from ETS_temp;
  commit;
 EXCEPTION
  WHEN OTHERS THEN
    begin
      delete from ETS_temp;
      commit; 
      end;
end Pro_ExToSql;

2、執行過程會將建表語句insert到t_outstring表中outstring為創建注釋語句,outstring2為建表語句:

call pro_extosql('JGXLID 監管線路ID number
XLMC 線路名稱 varchar2(50)
DDFS 調度方式 varchar2(10)
JHZLC 計划總里程 number(10,3)
JHYYLC 計划營運里程 number(10,3)
KSRQ 開始日期 datetime
ZJZX 周幾執行 varchar2(15)
JHPCS 計划配車數 number
JHBCS 計划班次數 number
JHZGFPCS 計划早高峰配車數 number
JHWGFPCS 計划晚高峰配車數 number
JHZGFBCS 計划早高峰班次數 number
JHWGFBCS 計划晚高峰班次數 number
SZMC 首站名稱 varchar2(50)
MZMC 末站名稱 varchar2(50)
SZSB 首站首班 varchar2(5)
SZMB 首站末班 varchar2(5)
','TableName')

3、在T_outstring表中取得以下信息:

--outstring字段
COMMENT ON COLUMN TableName.JGXLID is '監管線路ID';
COMMENT ON COLUMN TableName.SZMB is '首站末班';
COMMENT ON COLUMN TableName.DDFS is '調度方式';
COMMENT ON COLUMN TableName.JHZLC is '計划總里程';
COMMENT ON COLUMN TableName.JHYYLC is '計划營運里程';
COMMENT ON COLUMN TableName.KSRQ is '開始日期';
COMMENT ON COLUMN TableName.ZJZX is '周幾執行';
COMMENT ON COLUMN TableName.JHPCS is '計划配車數';
COMMENT ON COLUMN TableName.JHBCS is '計划班次數';
COMMENT ON COLUMN TableName.JHZGFPCS is '計划早高峰配車數';
COMMENT ON COLUMN TableName.JHWGFPCS is '計划晚高峰配車數';
COMMENT ON COLUMN TableName.JHZGFBCS is '計划早高峰班次數';
COMMENT ON COLUMN TableName.JHWGFBCS is '計划晚高峰班次數';
COMMENT ON COLUMN TableName.SZMC is '首站名稱';
COMMENT ON COLUMN TableName.MZMC is '末站名稱';
COMMENT ON COLUMN TableName.SZSB is '首站首班';
COMMENT ON COLUMN TableName.XLMC is '線路名稱';

--outstring2字段
create table TableName
(JGXLID   number,
SZMB   varchar2(5),
DDFS   varchar2(10),
JHZLC   number(10,3),
JHYYLC   number(10,3),
KSRQ   datetime,
ZJZX   varchar2(15),
JHPCS   number,
JHBCS   number,
JHZGFPCS   number,
JHWGFPCS   number,
JHZGFBCS   number,
JHWGFBCS   number,
SZMC   varchar2(50),
MZMC   varchar2(50),
SZSB   varchar2(5),
XLMC   varchar2(50));

   PS:這樣就可以直接將SQL提取出來執行建表了!有更好的辦法的希望大家在評論區留言,一起探討!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM