最近一个项目中碰到一个很奇怪的问题,拿到表结构和报错的SQL脱敏后如下:
create table TEST (ID INTEGER,NAME VARCHAR2(255) );
insert into TEST values (1, 'test1');
insert into TEST values (2, 'test2');
commit;
MERGE INTO TEST T1
USING dual T2 on (id=1)
WHEN MATCHED THEN UPDATE SET T1.NAME='TEST_DUAL'
WHEN NOT MATCHED THEN INSERT (T1.ID, T1.NAME) VALUES (1,'TEST_DUAL' );
在客户开发环境的版本上没有报错,在正式生产环境的版本上报有歧义的列名。
于是我分析了一下两个环境dual伪表的表结构,发现了不同的地方:
select * from dual;
--生产环境
--开发环境