通过输入参数,可以产生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
分享到:
相关推荐
将ms-sql-server 指定的表数据,自动转换成相应的insert sql 语句,做数据迁移是比较方便. 说明: 1、3级执行,即将执行的结果再执行/再执行得到所要的 SQL语句; 2、不限表字段多少限制,网络上有个类似的...
可以定义一个无论何时用INSERT语句向表...inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本
可以定义一个无论何时用INSERT语句向表...inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本
在很多时候,我们会... 这是基础的insert语句,我们把tab2表中的数据insert到tab1表中。根据经验,千万级的数据可在1小时内完成。但是该方法产生的arch会非常快,需要关注归档的产生量,及时启动备份软件,避免arc
触发器是数据库应用中的重用工具,...inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted 表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本。
执行语句如下: 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) 执行程序后,产生...
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...
使用INSERT INTO语句插入数据,包括插入一个元组或将子查询的结果插入到数据库中两种方式。 使用SELECT INTO语句,产生一个新表并插入数据。 使用UPDATE语句可以修改指定表中满足WHERE子句条件的元组,有三...
Windows Mysql Online Backup 是一个简单但非常有用的应用程序,用于备份... 编写 INSERT DELAYED 语句而不是 INSERT 语句 13. 对于每个表,在 INSERT 语句周围加上禁用和启用键的语句 14. 在转储之前锁定所有表等等...
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 ...
2. 生成insert语句时,数据类型为text时,产生的语句执行有误。 已添加的功能1. 增强了导出数据的功能。 2. 自动保存数据库服务器的连接信息。有朋友提出,每次输入这些连接信息有点麻烦,所以就提供了这样的...
inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本。 日志记录了所有修改
mysqldump生成能够移植到其它机器的文本文件,缺省地,文件内容包含创建正在倾倒的表的CREATE语句和包含表中行数据的INSERT语句。也就是说,mysqldump产生的输出可在以后用作mysql的输入来重建数据库。mysqldump比...
ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。 数据字典里存有用户信息、用户的权限信息、...
INSERT语句是最常见的SQL语句之一,最近有台MySQL服务器不定时的会出现并发线程的告警,从记录信息来看,有大量insert的慢查询,执行几十秒,等待flushing log,状态query end 【初步分析】 从等待资源来看,大部分...
当IDS系统检测到***行为时,它会用INSERT语句向数据库中写入数据,导致更新非常慢。所以如果直接将Snort输出到数据库,在数据量增大时这种方案的效率并不高,故使用外部代理将报警输出到Barnyard2。
这里需要提的是在insert语句中,关于主键自增的问题。 KeyGenerator 在我们实际的开发中,自增主键还是使用比较多的。而mybatis在处理insert语句时,并不会将自增主键给返回,而是返回插入的条数。当我们有业务需求...
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...
当你需要在多个数据库里产生更新脚本时,当你需要产生表的字段的添加,修改,删除脚本时,当你需要把编码表的数据导成insert语句时,当你需要在多台数据库服务器上执行相同的脚本时,当你已为脚本的产生和更新所累时...