如何传递多个变量来编写ODBC函数?

时间:2019-06-14 01:25:16

标签: asterisk

我需要向SQL ftom Asterisk拨号计划中插入一些数据。我正在使用ODBC连接和func_odbc.conf文件。有一个很好的方法可以从SQl读取多个值,但是很显然,我找不到将几个变量插入到func_odbc函数中的任何可行解决方案。

我已经尝试使用NoOp(ODBC_FunctionName($ {ARG1},$ {ARG2},$ {ARG3}))并且它不适用于'writesql'。由于Set对一个名称/值对的限制,Set($ {ODBC_Function()= {$ {ARG1},$ {ARG2},$ {ARG3}})都不起作用。

这是我的func_odbc:

[putClientEvaluation]
;${ARG1} - uniqueid
;${ARG2} - operator
;${ARG3} - client
;${ARG4} - rating
;${ARG5} - queue
dsn=voip
writesql=INSERT INTO cc_service_rating(timestamp,callid,operator,client,rating,queue) values(now(),'${SQL_ESC(${ARG1})}','${SQL_ESC(${ARG2})}','${SQL_ESC(${ARG3})}','${SQL_ESC(${ARG4})}','${SQL_ESC(${ARG5})}')

因此,我需要一种有效的方法来一次将多个参数传递给odbc writesql函数。

更新:

好像我只需要使用VAL而不是ARG:

writesql=INSERT INTO cc_service_rating(timestamp,callid,operator,client,rating,queue) values(now(),'${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}','${SQL_ESC(${VAL3})}','${SQL_ESC(${VAL4})}','${SQL_ESC(${VAL5})}')

但是我仍然从Set收到警告:

WARNING[1227][C-00000020]: pbx_variables.c:1155 pbx_builtin_setvar: Set requires one variable name/value pair.

那么,如何在不使用Set的情况下执行此操作?

UPD:

做到了,现在没有警告:

宏扩展

exten => s,n,Set(operator=${ARG1})
exten => s,n,Set(quename=${ARG2})
exten => s,n,Set(client=${ARG3})
;timestamp,callid,operator,client,rating,queue
exten => s,n,Set(ODBC_putClientEvaluation()=${UNIQUEID},${operator},${client},${MACRO_EXTEN},${quename})

功能

writesql=INSERT INTO cc_service_rating(timestamp,callid,operator,client,rating,queue) values(now(),'${VAL1}','${ARG1}','${ARG3}','${VAL2}','${ARG3}')

不知道为什么这行得通,显然我不明白ARG和VAL在这里是如何工作的,以及为什么将args放在功能括号中根本不起作用(即使使用逗号筛选)。

2 个答案:

答案 0 :(得分:0)

您使用的变量不正确。请阅读有关变量的书文章。

Set(ODBC_Function(${ARG1},${ARG2})=${VAL1},"fixed_param",${VAL3}) 

答案 1 :(得分:-1)

我认为您应该尝试这样:

Set(ODBC_Function()= $ {VAR1},“ fixed_pa​​ram”,$ {VAL3});