如何从星号拨号计划中处理SQL失败程序

问题描述 投票:0回答:1

我正在使用

  • [Asterisk认证/16.8-cert2
  • MSSQL Express 2014
  • unixODBC 2.3.1
  • freetds v1.1.20
  • 卢阿5.1.4
  • CentOS7

我正在使用func_odbc.so在SQL中执行更新语句。更新语句运行正常,没有问题。但我希望能够在发生错误时捕获错误,例如断开连接或网络中断。

这是我的更新声明

  UPDATE Customers SET AccountBalance = AccountBalance - ${VAL1} WHERE cif = ${ARG1} 

我的dialPlan函数调用(在extension.lua中)

local statues = channel.ODBC_ErrorTest(1499):set(10)

我虽然可以使它正常工作的一件事是通过在SQL语句本身中添加TRY和CATCH blook,如下所示,所以如果出现错误,它将返回错误号

BEGIN TRY 
  UPDATE Customers SET AccountBalance = AccountBalance - a WHERE cif = 17399 
END TRY 
BEGIN CATCH 
 SELECT   ERROR_NUMBER() AS ErrorNumber 
END CATCH

但是当我尝试执行此操作时,如果出现故障,它不会返回错误号,只返回一个空字符串。

所以我的问题很简单,如何从拨号计划中处理SQL failer?

sql sql-server lua asterisk unixodbc
1个回答
0
投票

对于更新,如果writesql错误,它应该返回-1。

但是您应该理解,星号是PBX,不适合用于复杂的SQL检查。

可能的解决方法

1)使用命令创建其他表,创建外部脚本,检查该表是否有新的“操作”,然后发送回结果/错误。 0.5秒,1秒等后检入星号。

2)创建简单的rest API并使用func_CURL。

© www.soinside.com 2019 - 2024. All rights reserved.