`
mabusyao
  • 浏览: 252675 次
  • 性别: 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、不限表字段多少限制,网络上有个类似的...

    浅议PB中数据窗口缓冲区与数据修改状态

    的行产生 Insert 语句,为状态是 DataModified! 的行产生 Update 语句,只有状态是 DataModified! 的列才会包含在 Update 语句中。对删除缓冲区中的行,若其状态是 New! 或 NewModified!,则 Update 语句不会为其...

    在oracle11g中DML语句对索引的影响[定义].pdf

    以下是关于DML语句对索引影响的详细解释,以INSERT语句为例进行阐述。 1. INSERT语句对索引的影响: 当我们执行INSERT语句向表中插入新的记录时,与记录关联的索引也需要更新。在上述示例中,创建了一个名为`text...

    执行Insert Exec时的隐藏开销 分析

    然而,正如标题和描述所指出的,使用`INSERT EXEC`可能存在一些隐藏的开销,这些开销可能在性能上产生影响。以下是对这些隐藏成本的详细分析: 首先,我们要明确两种基本的`INSERT EXEC`形式: 1. **EXEC('INSERT....

    MySQL的SQL语句大小写不敏感问题解决方案

    MySQL 的 SQL 语句大小写不敏感问题解决方案 MySQL 的 SQL 语句大小写不敏感问题是一个普遍存在的问题,特别是在 Linux 和 Windows 两种操作系统下。这个问题的产生是由于 MySQL 在不同的操作系统下对大小写的处理...

    行业-46 一起来看看INSRET语句的undo log回滚日志长什么样?l.rar

    总之,INSERT语句的undo log是数据库管理系统为了确保事务的正确性和数据一致性而产生的关键记录。通过理解并有效地利用undo log,我们可以更好地管理和维护数据库,提升系统稳定性和性能。在分析undo log时,不仅要...

    sql基本语句整理

    - **两表联合查询**:当两个表进行联接时,如果没有添加任何条件限制,则会产生所有可能的组合,这种查询称为卡迪尔积,结果集通常没有实际意义。 - **内连接**:只返回两个表中匹配的行。 - 示例:`SELECT e.id, d...

    解决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) 执行程序后,产生...

    4-动态SQL语句编写.pdf

    在Mybatis中,如果需要在插入数据时自动生成主键,可以在insert语句中指定keyProperty属性,将其绑定到对应的实体类属性上。然后在插入操作之后,可以通过返回的GeneratedKeys来获取自动生成的主键值。 ### 实例...

    SQL语句大全集合

    - `@@ERROR`:获取最后一次执行的语句产生的错误号。 - `@@IDENTITY`:获取最近插入的标识列的值。 - **局部变量**:由用户定义,在同一批处理中使用。 - `DECLARE @variable_name 数据类型;`:声明局部变量。 -...

    MySQL的mysqldump命令使用详解.pdf

    --complete-insert 选项可以使 mysqldump 命令给每个产生的 INSERT 语句加上列(field)的名字,以便在将数据导出到另一个数据库时使用。 --delayed-insert 选项可以在 INSERT 命令中加入 DELAY 选项,以便在导入...

    经典SQL语句大全

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

    sql语句学习入门

    SQL语句的基本语法包括以下关键字:SELECT, INSERT INTO, UPDATE, DELETE, FROM, WHERE, AND, OR, ORDER BY, JOIN, UNION等。这些关键字用于执行不同类型的数据操作。 - SELECT用于从数据库中检索数据。 - INSERT ...

    U861期初对账语句.txt

    INSERT INTO UFDATA_007_2011..GL_accvouch ( ... ) SELECT 0 AS i_period, csign, isignseq, ino_id, inid, dbill_date, idoc, cbill, ... ``` 接下来,该脚本将符合条件的数据插入到新的会计年度对应的`GL_...

    plsql批量导入数据

    对于小规模数据导入,可以直接在PLSQL Developer中使用INSERT语句。批量插入可以使用INSERT ALL语句,一次写入多行数据,如: ```sql INSERT ALL INTO table1 VALUES (value1, value2) INTO table2 VALUES (value...

    自动生成增删改Sql语句.pdf

    这个类名为`ServerBase`,它包含三个静态方法:`BuildinsertSql`用于生成插入(INSERT)语句,`BuiltUpdateSql`用于生成更新(UPDATE)语句,虽然没有给出删除(DELETE)语句的代码,但可以推断其原理类似。...

    sql语句转 StringBuilder buffer

    - 它的主要方法包括`append()`、`insert()`、`delete()`、`replace()`等,用于添加、插入、删除或替换字符串内容。 - 通常在单线程环境中,`StringBuilder`比`StringBuffer`更快,因为它省去了线程同步的开销。 2...

    JDBC基础教程之语句.doc

    1. **executeQuery**:用于执行产生单个结果集的SQL语句,如`SELECT`语句。此方法返回一个`ResultSet`对象,其中包含了查询的结果。 ```java ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2"); ...

    MySQL批量SQL插入性能优化详解

    传统的做法是逐条执行INSERT语句,而优化后的做法是将多条数据合并到一个单独的INSERT语句中,如下面所示: ```sql INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', ...

Global site tag (gtag.js) - Google Analytics