Raf*_*olo 4 database firebird interbase check-constraints
我想将临时表中的一堆记录复制到目标表.问题是某些记录可能违反了目标表中的检查约束,因此我想插入可能的所有内容,并在其他地方为无效记录生成错误日志.
如果我执行:
INSERT INTO target_table
SELECT ... FROM temp_table
Run Code Online (Sandbox Code Playgroud)
如果任何记录违反任何约束,则不会插入任何内容.我可以制作一个循环并逐个手动插入,但我认为性能会更低.
您可以编写一个存储过程来复制记录并使用WHEN ANY DO语句捕获任何错误,例如
CREATE PROCEDURE CopyRecords( ... )
AS
BEGIN
FOR select ... FROM temp_table INTO ... DO BEGIN
INSERT INTO target_table ...
WHEN ANY DO BEGIN
INSERT INTO ErrorLog(SQL_Code, GDS_Code, ... ) VALUES(SQLCODE, GDSCODE, ...);
END
END
END
Run Code Online (Sandbox Code Playgroud)
该WHEN ... DO语句记录在InterBase 6.0语言参考中(向下滚动页面,IB 6 doc下载位于底部),在"过程和触发器"一章中.
在GDSCODE和SQLCODE上下文变量应该可以帮助您分析什么是完全错误的原因.
| 归档时间: |
|
| 查看次数: |
2196 次 |
| 最近记录: |