`
mabusyao
  • 浏览: 247805 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

产生insert 语句

SQL 
阅读更多
通过输入参数,可以产生condition的insert语句。

适用于不同数据库之间的data migration。

CREATE PROCEDURE SCHEMA.CONVERT_TO_INSERTSQL  (
                                      IN schemaname varchar(40),
                                      IN tablename varchar(40),
                                      IN conditions  varchar(400)
                                       )

------------------------------------------------------------------------
-- SQL Stored Procedure
------------------------------------------------------------------------

  DYNAMIC RESULT SETS 1

P1: BEGIN
    declare body varchar(4000);
    declare head varchar(4000);
    declare columnname varchar(100);
    declare bodycolumnname varchar(100);
    declare numbercolumnname varchar(100);
    declare datatype varchar(50);
    declare count int;
    declare i int;
    DECLARE  presql   varchar(5000);

    DECLARE cursor1 CURSOR WITH RETURN FOR   --define cursor using for select columns
    SELECT NAME,COLTYPE   FROM  SYSIBM.SYSCOLUMNS WHERE TBNAME=tablename AND TBCREATOR=schemaname;

     DECLARE  cursor2   CURSOR   WITH   RETURN   FOR   sqlselect;  --define dynamic using for results


   open cursor1;
     set body = '';
     set head = '''insert into '||schemaname||'.'||tablename||'(' ;
     set count = (SELECT COUNT(*) FROM  SYSIBM.SYSCOLUMNS WHERE TBNAME=tablename AND TBCREATOR=schemaname);
     set i = 0;
  WHILE i <count DO
    fetch cursor1 into columnname,datatype;
     set bodycolumnname = 'coalesce(rtrim('||columnname||'),'''')';
     set numbercolumnname = 'char('||columnname||')';
    case datatype
      when 'VARCHAR' then
        if i<count - 1 then
       set head = head||columnname||','  ;
       set  body = body||'||'''''''''||'||'||bodycolumnname||'||'||'''''''''||'||''',''' ;
       else
         set head = head||columnname||') values('''  ;
        set  body = body||'||'''''''''||'||'||bodycolumnname||'||'||'''''''''||'||''');''' ;
      end if;

      when 'CHAR'  then
       if i<count - 1 then
       set head = head||columnname||','  ;
       set  body = body||'||'''''''''||'||'||bodycolumnname||'||'||'''''''''||'||''',''' ;
       else
         set head = head||columnname||') values('''  ;
        set  body = body||'||'''''''''||'||'||bodycolumnname||'||'||'''''''''||'||''');''' ;
      end if;

       when 'LONGVAR'  then
       if i<count - 1 then
       set head = head||columnname||','  ;
       set  body = body||'||'''''''''||'||'||bodycolumnname||'||'||'''''''''||'||''',''' ;
       else
         set head = head||columnname||') values('''  ;
        set  body = body||'||'''''''''||'||'||bodycolumnname||'||'||'''''''''||'||''');''' ;
      end if;

       when 'BIGINT'   then
          if i<count - 1 then
       set head = head||columnname||','  ;
        set  body = body||'||'||numbercolumnname||'||'||''',''' ;
       else
         set head = head||columnname||') values('''  ;
        set  body = body||'||'||numbercolumnname||'||'||''');''' ;
     end if;

      when 'DECIMAL' then
         if i<count - 1 then
       set head = head||columnname||','  ;
        set  body = body||'||'||numbercolumnname||'||'||''',''' ;
       else
         set head = head||columnname||') values('''  ;
        set  body = body||'||'||numbercolumnname||'||'||''');''' ;
     end if;

      when 'DOUBLE' then
        if i<count - 1 then
       set head = head||columnname||','  ;
        set  body = body||'||'||numbercolumnname||'||'||''',''' ;
       else
         set head = head||columnname||') values('''  ;
        set  body = body||'||'||numbercolumnname||'||'||''');''' ;
     end if;

       when 'INTEGER'  then
         if i<count - 1 then
       set head = head||columnname||','  ;
        set  body = body||'||'||numbercolumnname||'||'||''',''' ;
       else
         set head = head||columnname||') values('''  ;
        set  body = body||'||'||numbercolumnname||'||'||''');''' ;
     end if;

         when 'SMALLINT' then
        if i<count - 1 then
       set head = head||columnname||','  ;
        set  body = body||'||'||numbercolumnname||'||'||''',''' ;
       else
         set head = head||columnname||') values('''  ;
        set  body = body||'||'||numbercolumnname||'||'||''');''' ;
     end if;

      when 'TIMESTMP' then
        if i<count - 1 then
       set head = head||columnname||','  ;
       set  body = body||'||'||''''||'CURRENT TIMESTAMP'||''''||'||'||''',''' ;
       else
         set head = head||columnname||') values('''  ;
         set  body = body||'||'||''''||'CURRENT TIMESTAMP'||''''||'||'||''');''' ;

     end if;
    else
       if i<count - 1 then
       set head = head||columnname||','  ;
       set  body = body||'||'''''''''||'||'||'''''''''||'||''',''' ;
       else
        set head = head||columnname||') values('''  ;
          set  body = body||'||'''''''''||'||'||'''''''''||'||''');''' ;
      end if;

   end case ;
     set i = i+1;
  end while;
 close cursor1;
 set presql='select '||head||body|| ' from '||schemaname||'.'||tablename||' where '||conditions;

  prepare   sqlselect   from  presql;

  open   cursor2 ;

END P1
分享到:
评论

相关推荐

    表内容产生insert语句

    将ms-sql-server 指定的表数据,自动转换成相应的insert sql 语句,做数据迁移是比较方便. 说明: 1、3级执行,即将执行的结果再执行/再执行得到所要的 SQL语句; 2、不限表字段多少限制,网络上有个类似的...

    数据库触发器

    可以定义一个无论何时用INSERT语句向表...inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本

    触发器的工作过程

    可以定义一个无论何时用INSERT语句向表...inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本

    insert大量数据经验之谈

    在很多时候,我们会...  这是基础的insert语句,我们把tab2表中的数据insert到tab1表中。根据经验,千万级的数据可在1小时内完成。但是该方法产生的arch会非常快,需要关注归档的产生量,及时启动备份软件,避免arc

    SQL Server数据库中使用触发器经验谈

    触发器是数据库应用中的重用工具,...inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted 表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本。

    解决python 执行sql语句时所传参数含有单引号的问题

    执行语句如下: sql_str = INSERT INTO teacher(t_name, t_info, t_phone, t_email) VALUES\ (\'%s\', \'%s\', \'%s\', \'%s\') % (result, result2, phoneNumber, Email) cur.execute(sql_str) 执行程序后,产生...

    经典SQL语句大全

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

    sql课内上机实验数据更新

     使用INSERT INTO语句插入数据,包括插入一个元组或将子查询的结果插入到数据库中两种方式。  使用SELECT INTO语句,产生一个新表并插入数据。  使用UPDATE语句可以修改指定表中满足WHERE子句条件的元组,有三...

    Windows Mysql Online Backup:Windows Mysql 在线备份-开源

    Windows Mysql Online Backup 是一个简单但非常有用的应用程序,用于备份... 编写 INSERT DELAYED 语句而不是 INSERT 语句 13. 对于每个表,在 INSERT 语句周围加上禁用和启用键的语句 14. 在转储之前锁定所有表等等...

    数据库操作语句大全(sql)

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 ...

    SQLServer2000辅助工具 v1.0

    2. 生成insert语句时,数据类型为text时,产生的语句执行有误。 已添加的功能1. 增强了导出数据的功能。 2. 自动保存数据库服务器的连接信息。有朋友提出,每次输入这些连接信息有点麻烦,所以就提供了这样的...

    SQL Server 2000中的触发器使用

    inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本。 日志记录了所有修改

    MYSQL四种备份方法总结

    mysqldump生成能够移植到其它机器的文本文件,缺省地,文件内容包含创建正在倾倒的表的CREATE语句和包含表中行数据的INSERT语句。也就是说,mysqldump产生的输出可在以后用作mysql的输入来重建数据库。mysqldump比...

    orcale常用命令

    ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。 数据字典里存有用户信息、用户的权限信息、...

    MySQL因大事务导致的Insert慢实例分析

    INSERT语句是最常见的SQL语句之一,最近有台MySQL服务器不定时的会出现并发线程的告警,从记录信息来看,有大量insert的慢查询,执行几十秒,等待flushing log,状态query end 【初步分析】 从等待资源来看,大部分...

    barnyard2.tar.gz

    当IDS系统检测到***行为时,它会用INSERT语句向数据库中写入数据,导致更新非常慢。所以如果直接将Snort输出到数据库,在数据量增大时这种方案的效率并不高,故使用外部代理将报警输出到Barnyard2。

    Mybatis源码阅读(三):结果集映射3.3 —— 主键生成策略

    这里需要提的是在insert语句中,关于主键自增的问题。 KeyGenerator 在我们实际的开发中,自增主键还是使用比较多的。而mybatis在处理insert语句时,并不会将自增主键给返回,而是返回插入的条数。当我们有业务需求...

    sql经典语句一部分

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

    超实用sql语句

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

    SQL Server2000辅助工具

    当你需要在多个数据库里产生更新脚本时,当你需要产生表的字段的添加,修改,删除脚本时,当你需要把编码表的数据导成insert语句时,当你需要在多台数据库服务器上执行相同的脚本时,当你已为脚本的产生和更新所累时...

Global site tag (gtag.js) - Google Analytics