在之前的工作中,我遇到了这么一个需求,需要将数据库内一千多个旧表按其原来表结构,重新创建对应的新表。然后对旧数据的进行处理后,存储新的数据。

不只是结构需要保持一致,还有用户、表空间、约束、备注等也需要一并带过去。如此一来,用“create table …… as select……”语句去创建,并不能把约束等,也保留过去,显然不符合要求。后来还是选择的用PL/SQL导出数据结构的方法。

不过这样这样处理又带来一个问题。要从源oracle数据库里,一共五六个用户的几万个表里面,人工挑选出这一千多张表,也是很费劲的一件事情。而且明显也不智能。

先看一下导出的表结构:

这里可以将其看作是一个格式化文本,每个创建表的语句都是以如下语句开始:

prompt

prompt Creating table ……

prompt=====================================

prompt

明白了这一点,我们就可以遍历所有的文本,然后将每个表的SQL语句都分离出来。于是,我偷了个懒,只做了一个大概的挑选,将大部分表的SQL都导出来了。

下一步就是用FME去格式化SQL语句

用Text File读模块读取SQL语句。然后创建一个type属性,代表每一个完整的SQL语句的。启用相邻要素属性,遍历要素,每当以“prompt ===========”开始,则type类型加一。

转换器参数设置如下:

转换结果如下:

虽然也将不同表的SQL语句分离了出来,不过这样的分类并不是完全正确的,如“prompt Creating table C1_320100_D_2000_DKG10”等语句,严格来说,需要是属于下一个SQL语句的,不过没关系,这些最终我们都不需要。直接用tester转换器清理掉。

然后再创建一个AttributeCreator转换器,提取出所有以“createtable @UpperCase(@Value(用户名)). ”开始的语句,存放在一个新的属性tablename中,以便后期提取表名。

用Aggregator转换器以“type”为分组拼接成完整的SQL语句。效果如图下:

不过这并不是我要的那一千多个表,还需要进行处理,用StringReplacer,和AttributeCreator对之前保存的tablename属性进行处理,提取出完整的表名,和用户名。

最终结果如下:

如此,便对每一个SQL语句进行了格式化,而且包含主外键、表空间,用户、和备注等。

现在整个表已经算非常规整的数据了,与我需要的表名称和用户进行属性挂接就可以获得对应的SQL语句。(该表包含对应的数据库服务、用户、登录密码等)

然后将选择出来的SQL语句,输出到SQLExecutor转换器中,

不只是创建的SQL语句,在SQLExecutor转换器中,可以写任何DDL和DML语句,来进行数据的处理和事务的控制。

因为FME的特性,灵活利用SQLExecutor转换器,可以在数据库操作的时候避免很多重复且繁琐的工作。而又不需要去写复杂的SQL来实现。

FME模板兴趣班2020年第三期 | 批量提取指定范围的数据文件

oracle创建表语句_利用FME去拼接SQL语句并创建表相关推荐

  1. java oracle 建表语句_在oracle数据库中创建表语句如何写?

    表名:servicelogs 字段名称类型 idint (主键,自增) servicetypevarchar (100) outsysvarchar (100) methodnamevarchar ( ...

  2. SQL Server创建表语句介绍

    SQL Server创建表是最常见也是最常用的操作之一,下面就为您介绍SQL Server创建表的语句写法,供您参考,希望可以让您对SQL Server创建表方面有更深的认识. USE suntest ...

  3. oracle建表唯一约束语句,Oracle建表语句是什么

    Oracle建表语句是什么 oracle数据库的建表语句,具体语法如下:CREATE TABLE tablename( column_name datatype [null,not null], co ...

  4. 使用java代码编写脚本,把oracle建表语句变成hive建表语句

    使用java代码编写脚本,把oracle建表语句变成hive建表语句 java代码 测试oracle.sql 生成hive创表语句 java代码 import java.io.File; import ...

  5. oracle bcp out,SQL Server利用bcp命令把SQL语句结果生成文本文件

    这篇文章主要为大家详细介绍了SQL Server利用bcp命令把SQL语句结果生成文本文件,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!在SQL ...

  6. mysql创建用户表的sql语句,mysql创建表的sql语句

    mysql 动态sql语句,如何用一款小工具大大加速MySQL SQL语句优化(附源,mysql分页查询sql语句,mysql创建表的sql语句 mysql建表语句_计算机软件及应用_IT/计算机_专 ...

  7. python拼接sql语句_【Python】拼接MySQL常用语句

    import pymysql class MK_sql (): """ 构建mySQL常见语句:增删改查排序 """ def __init_ ...

  8. [Qt教程] 第23篇 数据库(三)利用QSqlQuery类执行SQL语句

    [Qt教程] 第23篇 数据库(三)利用QSqlQuery类执行SQL语句 楼主  发表于 2013-5-15 22:39:29 | 查看: 813| 回复: 0 利用QSqlQuery类执行SQL语 ...

  9. mysql函数 动态语句_自定义函数动态执行SQL语句

    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...

最新文章

  1. 数据库中存储日期的字段类型究竟应该用varchar还是datetime ?
  2. linux vi使用手册,史上最全VIM使用手册
  3. 在图片中选定任意凸多边形制作掩膜程序MATLAB
  4. Spring的@Scheduled注解实现定时任务
  5. 值得推荐的威胁情报平台
  6. 4个空格 tab vetur_python学习的10个小技巧
  7. c语言CString转数字函数,CString与16进制的CByteArray之间相互转化
  8. python写一些小代码_#python#自己写的一段小代码
  9. [工具库]JOXMLBuilder工具类——一键把多个bean对象数据转换为XML格式数据
  10. ios apns netty java codec 防止粘包
  11. oracle数据表通过使用SYS_GUID()自动生成唯一主键
  12. mongodb数组操作
  13. 影响因素分析论文用什么模型好?
  14. Excel AES加密
  15. alios下载_AliOS-Things ESP8266 编译下载
  16. 2023款16英寸苹果MacBook Pro续航实测
  17. “68 道 Redis+168 道 MySQL”精品面试题(带解析),你背废了吗?
  18. 1-09 C基础 (多文件编译)
  19. 汽车诊断-KWP2000协议
  20. 做好SEO需要考虑什么

热门文章

  1. Django框架----分页器(paginator)
  2. 文件描述符fd、文件指针fp和vfork()
  3. 【Python】 获取MP3信息replica
  4. android internet参数传递
  5. bzoj 1011 近似估计
  6. 14条最佳JS代码编写技巧
  7. 终于看到了希望——基于美女的VGA系统构架
  8. 电话无人应答转总机的配置方法
  9. 程序设计竞赛算法基础考试真题2020年(回忆版)
  10. ubuntu 12.04 交叉编译 arm/mips 平台的 strace