2010-09-27 81 views
2

我正在审查/重新设计/重构数据库,并且希望创建一个新的数据库,以更智能的方式存储几乎相同的数据。 “遗留”数据库中的一个问题是它没有正确使用密钥和索引,所以在没有重复条目的地方应该没有。MySQL:DECLARE CONTINUE HANDLER继续出现错误,打印警告

我写了一个python脚本,它从遗留数据库中读取数据,并生成一个SQL脚本,然后使用大量非常相似的SQL INSERT语句将这些值从旧数据库插入到新数据库中。 SQL脚本每次遇到重复条目时都会停止并显示错误消息

ERROR 1062 (23000) at line 3086: Duplicate entry '56.450000000--3.366670000-121' for key 'lat_lon_height'

其中AFAICT正是它应该做的。然而,目前,我只想让脚本继续前进,不要插入重复条目,但会打印一条关于它们的警告。我试着安装在多种方式的脚本的开始继续处理以下the MySQL docssome other online resources,但他们都只是建立一个语法错误:

DECLARE CONTINUE HANDLER FOR 1062 
SELECT 'Duplicate key in unique index'; 

DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' 
SELECT 'Duplicate key in unique index'; 

DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' 
BEGIN 
SELECT 'Duplicate key in unique index'; 
END; 

我在做什么错了?

回答

1

我没有用处理器,除了存储过程,在那里我使用它们受到了限制,但平静中。也许你可以让你的代码进入存储过程,然后运行存储过程?你可能会发现MySQL接受你正在尝试做的事情。

+0

确实有效,谢谢你的提示! :-) 花了我一点时间来找到一些实际上在存储过程中做的事情,并不只是想把所有的78000插入语句放在那里......关于语法错误,我只能冒险猜测我在分隔符上弄错了一些东西,第一次我做了这些东西。 – ssc 2010-09-28 11:09:50

0

OK,让SQL脚本简单地打印所有发生的错误的一种方法是使用--force命令行选项,如

mysql --force < my_insertion_script.sql 

还是不知道什么是真正做到对重复的条目,但一旦我已经明白了这一点(不是SQL问题),this可能会帮助。

很想得到继续处理工作,虽然...

+0

不,我不得不继续处理程序,因为遗留数据存在各种问题,我需要处理程序输出更多诊断信息以供进一步分析。 – ssc 2010-09-27 08:46:35