有效Oracle SQL在VS Code执行时触发"Unexpected Packet"错误的原因及修复
问题分析与解决
问题现象
触发异常的最简SQL语句:
select /** :'*/ dummy --' from dual;
使用Oracle Developer Tools for VS Code (SQL and PLSQL) v21.5.0执行时,抛出错误:
TTCExecuteSql:ReceiveExecuteResponse - Unexpected Packet received.
但该语句在SQL Developer中针对19c、12c版本的Oracle数据库执行完全正常。同时发现:
- 移除注释中任意字符、将注释内
:'以外的字符替换为a,语句可正常执行 - 注释内插入大量文本,错误仍持续
原因推测
这是ODT for VS Code v21.5.0的SQL解析器bug:工具在解析块注释/** ... */时,误将注释内的:'组合识别为绑定变量或特殊语法标记,导致生成的数据库请求数据包格式异常,Oracle数据库返回的响应不符合工具预期,从而触发"TTCExecuteSql"相关的通信错误。
SQL Developer使用独立的SQL解析逻辑,不会对注释内的这类组合产生误判,因此可以正常执行。
修复方案
- 调整注释内容:修改注释内的特殊字符组合,比如将
/** :'*/改为/** : '' */(添加空格或调整单引号位置)、/** :a'*/,或直接替换块注释为行注释,避开触发bug的字符组合。 - 升级ODT for VS Code版本:该解析bug大概率在后续版本中被修复,直接升级到最新版本的Oracle Developer Tools for VS Code即可解决问题。
- 临时替代方案:若需保留原SQL注释格式,可暂时使用SQL Developer或其他兼容的Oracle客户端工具执行该语句。
内容的提问来源于stack exchange,提问作者Ronoth
相关产品推荐
相关产品推荐

