First time here? Check out the FAQ!

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

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

спросил Mar 12 '12

grinya Gravatar grinya
21 1 2 5

обновил Mar 12 '12

3 Ответа

4

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

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

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

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

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

ответил Mar 12 '12

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

обновил Mar 12 '12

Comments

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

grinya (Mar 12 '12)edit

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

meral (Mar 12 '12)edit

Цитата из оф. документации 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 (Mar 12 '12)edit
0

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

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

ответил Mar 12 '12

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 (Mar 12 '12)edit
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 отдельное спасибо. Все работает.

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

ответил Mar 12 '12

grinya Gravatar grinya
21 1 2 5

обновил Mar 12 '12

Comments

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

meral (Mar 12 '12)edit

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

switch (Mar 12 '12)edit

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

grinya (Mar 13 '12)edit

Ваш ответ

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 ленту новостей

Статистика

Задан: Mar 12 '12

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

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

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