TCL脚本调用MQL查询ID报错:should be "proc name args body"求解决
TCL脚本错误排查与修改方案
错误原因分析
报错should be "proc name args body"的核心原因是错误使用proc命令:
- TCL中
proc用于定义自定义过程,语法必须是proc 过程名 {参数列表} {代码体},原代码开头的proc { ... }缺少过程名和参数列表,完全不符合语法规范。 - 代码中
catch {proc $Id} sResult是完全错误的逻辑,这里应该执行MQL查询命令,而非定义过程。 - 额外存在TCL语法大小写问题:
Catch、If需小写为catch、if;变量赋值的空格缺失(set error[Catch ...]需改为set error [catch ...])。
修改后的完整代码
puts "########### Trying to find the Id's ###########" mql start transaction # 定义MQL查询命令 set mql_query {mql temp query bus 'AIRBUS_E_Document_ElectricalDiagram' * * where 'attribute[clau*].value==FALSE' select id;} # 执行MQL命令并捕获错误 set error [catch {eval $mql_query} sResult] if {$error == 0} { puts "查询结果:$sResult" mql commit transaction } else { puts "Error - $sResult" mql abort transaction } puts "######## Finding Id's are Completed #########"
关键修改点说明
- 移除了错误的
proc包裹:原代码不需要定义过程,直接执行逻辑即可。 - 修正MQL命令执行逻辑:用
eval $mql_query执行定义好的查询命令,替代错误的proc $Id。 - 修复语法细节:
- 把
Catch改为TCL内置的小写catch命令 - 把
If改为小写if - 变量赋值添加空格:
set error [catch { ... } sResult],符合TCL语法规范
- 把
- 完善事务处理:查询成功时添加
mql commit transaction,保证事务完整性 - 变量名优化:把
Id改为mql_query,语义更清晰,避免与关键字或业务概念混淆
内容的提问来源于stack exchange,提问作者Tangudu Sai Krishna
相关产品推荐
相关产品推荐

