Oracle根据Excel或者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提取出来执行建表了!有更好的办法的希望大家在评论区留言,一起探讨!

时间: 2024-11-07 15:06:52

Oracle根据Excel或者world数据字典自动生成建表语句和注释的相关文章

oracle数据库高级应用之《自动生成指定表的insert,update,delete语句》

1 /* 2 * 多条记录连接成一条 3 * tableName 表名 4 * type 类型:可以是insert/update/select之一 5 */ 6 create or replace function my_concat(tableName varchar2,type varchar2) 7 return varchar2 8 is 9 type typ_cursor is ref cursor; 10 v_cursor typ_cursor; 11 v_temp varchar2

Oracle --&gt; Vertica 建表语句修改

需求:在Vertica数据库上建表,表结构来源于原Oracle数据库,故需要转换成Vertica数据库库表结构. 实际转换操作需要评估源库用到的所有数据类型和数据本身特性. 下面是总结的某场景下的替换规则,仅供参考. 1.时间类型: DATE   =>   TIMESTAMP 2.数字类型:NUMBER(   =>   NUMERIC( NUMBER   =>   NUMERIC(38,0) INTEGER   =>   NUMERIC(38,0) 3.字符类型: VARCHAR2

oracle经典建表语句--scott建表

create table EMP ( EMPNO NUMBER(4) PRIMARY KEY, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPNO NUMBER(4) ); CREATE TABLE Dept( DEPTNO NUMBER(4), DNAME VARCHAR2(14), LOC VARCHAR2(13) ); CREA

mysql和oracle建表语句的区别

mysql DROP TABLE IF EXISTS `order`;CREATE TABLE `order` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `number` varchar(255) NOT NULL COMMENT '工单编号',  `applicant` varchar(255) NOT NULL COMMENT '工单申请人',  `state` int(1) NOT NULL COMMENT '工单状态',  `count` int

oracle导出表的建表语句拼接SQL

前段时间有个需求需要导出数据库的500张表结构,使用PLSQLDEV工具也可以导出建表语句,但是需要手动一个表一个表选,非常费劲.就写了个拼接sql. select 'select dbms_metadata.get_ddl(''' ||segment_type|| ''',''' ||segment_name|| ''',''' || owner || ''') from dual;' from dba_segments where segment_name='ALE_CRITICALDEGR

如何使用plsql导出oracle中的建表语句文件

1 首先打开plsql,登陆所需要访问的数据库. 2 点击工具栏的tools. 3 选择下拉框中的export user object. 4 此时会弹出一个窗口,你可以在这里选择想要导出的表,按住Ctrl可以多选. 5 点击文件夹图标,选择需要导出到的位置以及导出文件的文件名. 6 点击export,然后耐心等待,当下放蓝色进度条走到尽头且左上的红色闪电变为灰色时 ,导出成功结束. 原文地址:https://www.cnblogs.com/HeXiaoZhou/p/9040439.html

MyBatise代码自动生成时候Oralce的number类型BigDecimal问题

第一次使用MyBatise发现一个问题,使用MyBatise的代码自动生成工具时候,即便在配置文件中定义了 Xml代码   <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <javaTypeResolver> <property name="forceBigDecimals

舰队管理系统分析与设计-舰队管理系统分析与设计(Oracle),功能需求,数据字典,软件工程

大型数据库技术项目 舰队管理系统分析与设计 舰队管理系统 1.项目背景介绍 中美海军实力对比分析: 中国海军虽然有了很大的进步,但是我们和世界先进的海军的实力有着很大差距,通过对比中美海军主战舰的数量和性能,中国海军要想拥有能与美国匹敌的能力和远距离投送兵力,至少需要十年的时间,或是更长的时间. 航空母舰 中国:无 美国:11艘核动力航母 两栖攻击舰 中国:无 美国:11艘可携带短距离起飞/垂直降落战斗机的两栖攻击舰 导弹巡洋舰 中国:无 美国:22艘导弹巡洋舰 驱逐舰: 中国:27艘吨位不同.

在oracle数据库中创建表语句如何写?

表名:servicelogs字段名称 类型id int (主键,自增)servicetype varchar (100)outsys varchar (100)methodname varchar (100)methodresult varchar (200)errormessage varchar (900)inparameter varchar (900)returncontent varchar (900)logtime varchar (20) Oracle不能再建表语句中实现自增的,需