有网友反馈说,merge into报229/102错误,并提供相应的表结构。测试并复现了该问题,并最终确认如下结论:
merge into使用的表的特殊字段不能超过112个。
测试过程如下:
创建表mergetab
create table mergetab
(
col1 varchar(10),
col2 varchar(10),
col3 varchar(10),
col4 varchar(10),
-- 中间还有 col5 至 col111字段,均为varchar(10)
col112 varchar(10),
col113 varchar(10)
);
执行merge into 操作,由于mergetab有113个特殊字段,执行报错
> MERGE INTO mergetab t1
using mergetab t2
on t1.col1=t2.col1
WHEN MATCHED THEN update SET
t1.col2 = t2.col2;
229: Could not open or create a temporary file.
102: ISAM error: illegal argument to ISAM function.
Error in line 5
Near character position 15
oncheck -pt testdb:mergetab的输出
TBLspace Report for testdb:gbasedbt.mergetab
Physical Address 6:576
Creation date 04/17/2019 15:23:28
TBLspace Flags 902 Row Locking
TBLspace contains VARCHARS
TBLspace use 4 bit bit-maps
Maximum row size 1243
Number of special columns 113 # 特殊字段数为113
Number of keys 0
Number of extents 0
Current serial value 1
Current SERIAL8 value 1
当特殊字段数减少到112时,即将其中一个varchar改成char,或者去掉一个字段后,执行是成功的。
create table mergetab
(
col1 varchar(10),
col2 varchar(10),
col3 varchar(10),
col4 varchar(10),
-- 中间还有 col5 至 col111字段,均为varchar(10)
col112 varchar(10),
col113 char(10)
);
oncheck -pt 的输出
Physical Address 6:576
Creation date 04/17/2019 16:01:42
TBLspace Flags 902 Row Locking
TBLspace contains VARCHARS
TBLspace use 4 bit bit-maps
Maximum row size 1242
Number of special columns 112 # 特殊字段数为112
Number of keys 0
Number of extents 0
Current serial value 1
此时再执行merge into操作。
> MERGE INTO mergetab t1
using mergetab t2
on t1.col1=t2.col1
WHEN MATCHED THEN update SET
t1.col2 = t2.col2;
0 row(s) merged.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




