Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

FUNC_ODBC + сложные запросы

1

Добрый день! Есть запись в файле /etc/asterisk/func_odbc.conf

[ADD]
prefix=QUEUES
whitehandle=queues
insertsql=INSERT INTO queue_member_table (queue_name,penalty,interface) SELECT queue_name,penalty,'SIP/${ARG1}' from queue_eq_users where callerid_num='${ARG1}'

Но от asterisk'a получаю ответ:

module reload func_odbc.so
-- Reloading module 'func_odbc.so' (ODBC lookups)
== Parsing '/etc/asterisk/func_odbc.conf':   == Found
[2012-03-12 15:28:56] WARNING[4824]: func_odbc.c:1026 init_acf_query: Section 'ADD' was found, but there was no SQL to execute.  Ignoring.
[2012-03-12 15:28:56] ERROR[4824]: func_odbc.c:1531 reload: Cannot initialize query ADD

Подскажите, пожалуйста, что не так. Прошу не говорить делать через AGI, сейчас так и сделано, просто стало интересно что можно сделать с помощью func_odbc

Запрос описанный в файле, отрабатывает нормально, проверял через isql-connector, другие запросы, к примеру:

[READ]
prefix=QUEUES
readhandle=queues
readsql=SELECT count(*) FROM queue_member_table where queue_name='${ARG1}'

выполняются без проблем Если сделать так:

[ADD]
prefix=QUEUES
readhandle=queues
whitehandle=queues
writesql=INSERT INTO queue_member_table (queue_name,penalty,interface) SELECT queue_name,penalty,'SIP/${ARG1}' from queue_qe_users where callerid_num='${ARG1}'

то ошибки такие:

[2012-03-12 16:22:53] ERROR[5182]: func_odbc.c:902 init_acf_query: There is SQL, but no ODBC class to be used for writing: ADD
[2012-03-12 16:22:53] ERROR[5182]: func_odbc.c:1531 reload: Cannot initialize query ADD
удалить закрыть спам изменить тег редактировать

спросил 2012-03-12 15:36:06 +0400

grinya Gravatar grinya
21 1 2 5

обновил 2012-03-12 16:25:30 +0400

3 Ответа

4

кажеться вообще нет такого параметра как insertsql есть read/write

подробнее тута.

http://www.voip-info.org/wiki/view/Asterisk+func+func_odbc

вот вы например хендл не прописали.

ссылка удалить спам редактировать

ответил 2012-03-12 16:09:58 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

обновил 2012-03-12 16:12:15 +0400

Comments

Хендлы прописал оба, ошибка в чем, то другом.

grinya ( 2012-03-12 16:27:46 +0400 )редактировать

ну вы по ссылке сходили? чето не похоже на то что вы пишите. dsn= у вас ГДЕ? whitehandle это что за слово такое?

meral ( 2012-03-12 17:25:19 +0400 )редактировать

Цитата из оф. документации The following options are available in this configuration file: ; ; readhandle A comma-separated list of DSNs (from resodbc.conf) to use when ; executing the readsql statement. Each DSN is tried, in ; succession, until the statement succeeds. You may specify up to ; 5 DSNs per function class. If not specified, it will default to ; the value of writehandle or dsn, if specified. ; writehandle A comma-separated list of DSNs (from resodbc.conf) to use when ; executing the writesql statement. The same rules apply as to ; readhandle. "dsn" is a synonym for "writehandle".

grinya ( 2012-03-12 17:31:59 +0400 )редактировать
0

Кажется наличие параметра insertsql подразумевает что должен быть writesql, иначе нет основания для выполнения insertsql.

ссылка удалить спам редактировать

ответил 2012-03-12 15:51:26 +0400

igorg Gravatar igorg flag of Russian Federation
2244 3 7 40
http://igorg.ru/

Comments

а если просто заменить insertsql на writesql, то в ответ [2012-03-12 15:53:46] ERROR[4874]: funcodbc.c:902 initacf_query: There is SQL, but no ODBC class to be used for writing: ADD Совсем туплю: не могу понять как это делается Читал об этом в книге "Asterisk - the future of telephony", мне показалось что об этом там написано очень туманно

grinya ( 2012-03-12 15:56:43 +0400 )редактировать
0

Asterisk версии 1.8.8

Несмотря на то, что в официальной документации написано

readhandle A comma-separated list of DSNs (from res_odbc.conf) to use when executing the readsql statement. Each DSN is tried, in succession, until the statement succeeds. You may specify up to 5 DSNs per function class. If not specified, it will default to the value of writehandle or dsn, if specified.

writehandle A comma-separated list of DSNs (from res_odbc.conf) to use when
executing the writesql statement. The same rules apply as to
readhandle. "dsn" is a synonym for "writehandle".

Для меня ключевым выражением было "dsn" is a synonym for "writehandle".

Но дело было действительно в отстутствии dsn, за что meral отдельное спасибо. Все работает.

ссылка удалить спам редактировать

ответил 2012-03-12 17:37:12 +0400

grinya Gravatar grinya
21 1 2 5

обновил 2012-03-12 17:50:26 +0400

Comments

правильный ответ отмечается галочкой. а вот это все пишется в коментарии.

meral ( 2012-03-12 18:56:15 +0400 )редактировать

Да тут всегда так. Потому я плюсую всем, кто грамотно отвечает, потому что от вопрошавших не дождешься.

switch ( 2012-03-12 23:23:11 +0400 )редактировать

Спасибо, что подсказали как пометить правильный ответ

grinya ( 2012-03-13 07:48:58 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2012-03-12 15:36:06 +0400

Просмотрен: 4,051 раз

Обновлен: Mar 12 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.