如何从星号拨号计划处理SQL故障

时间:2020-05-31 14:01:48

标签: sql sql-server lua asterisk unixodbc

我正在使用

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

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

这是我的更新声明

  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?

1 个答案:

答案 0 :(得分:0)

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

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

可能的解决方法

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

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