MERGE INTO table a
using ( select 1 intcol,11 bigintcol,0 doublecol,'11' stringcol ) b
on (a.stringcol=b.stringcol )
when matched then
update set a.intcol=b.intcol,a.bigintcol=b.bigintcol,a.doublecol=b.doublecol
when not matched then
insert (intcol,bigintcol,doublecol,stringcol) values (b.intcol,b.bigintcol,b.doublecol,b.stringcol);
这种类型的sql,在dms上执行一直失败,报错
Incorrect syntax near 'then'. 但是通过jdbc直连server可以执行成功,应该是dms的bug |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您的描述,您在阿里云DMS上执行MERGE INTO语句时遇到语法错误,而该语句通过JDBC直连数据库可以成功执行。这可能是由于DMS对SQL语法的支持限制或特定配置问题导致的。虽然参考资料中没有直接提及针对MERGE INTO语句的具体解决方案,我们可以基于通用的SQL错误排查逻辑来尝试解决此问题。
语法兼容性:DMS可能不完全支持所有数据库系统的高级或特定SQL语法,如MERGE INTO(这是一种用于同时执行UPDATE和INSERT操作的语句,在某些数据库系统中可用,如SQL Server、MySQL 8.0.19及以上版本等)。
DMS配置限制:如同之前提到的安全规则限制CREATE TABLE操作一样,可能存在类似的规则限制了MERGE INTO这类较为复杂的SQL操作。
检查DMS SQL支持:首先确认DMS当前使用的数据库引擎是否原生支持MERGE INTO语法,并查看DMS文档或联系技术支持确认此功能是否受支持。
安全规则调整:
尝试替代方案:如果DMS不支持MERGE INTO,考虑使用数据库原生支持的其他方式实现相同逻辑,比如先执行一个UPDATE语句更新匹配的行,然后用INSERT IGNORE或ON DUPLICATE KEY UPDATE插入新行,以模拟MERGE INTO的效果。
反馈给DMS团队:如果确认是DMS平台的问题,建议通过官方渠道向阿里云DMS团队反馈此问题,提供详细的错误信息和SQL语句,以便他们评估并修复潜在的平台限制。
临时变通:在DMS问题得到解决前,继续使用JDBC直连的方式执行此类复杂SQL操作,确保业务不受影响。
希望以上步骤能帮助您解决问题,如果问题依旧,请及时联系阿里云技术支持获取进一步的帮助。