anidar consultas ODBC writesql

194 views
Skip to first unread message

juanmol

unread,
Sep 30, 2015, 4:45:41 AM9/30/15
to asterisk-es
Hola, ¿puedo hacer dos writesql en una sola sentencia? Si uso:
func_odbc.conf
[PRUEBA]
dsn
=asterisk
writesql
=INSERT INTO pbx.borrar1 (id,dato1,dato2) VALUES(NULL,'${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}')
writesql
=INSERT INTO pbx.borrar2 (id,dato1,dato2) VALUES(NULL,'${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}')


en el cli:
asterisk2*CLI> odbc write ODBC_PRUEBA noseque esto,aquello
INSERT INTO pbx
.borrar1 (id,dato1,dato2) VALUES(NULL,'esto','aquello')


Sólo se queda con el primero. Tiro del manual de mysql y si ejecuto directamente en mysql:
BEGIN; INSERT INTO pbx.borrar1 (id,dato1,dato2) VALUES (NULL, 'hola', 'adios'); INSERT INTO pbx.borrar2 (id,dato1,dato2) VALUES (NULL, 'hola', 'adios'); COMMIT




hace los dos inserts, asi que lo intento poner en el func_odbc.conf
[PRUEBA]
dsn
=asterisk
writesql
=BEGIN; INSERT INTO pbx.borrar1 (id,dato1,dato2) VALUES(NULL,'${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}'); INSERT INTO pbx.borrar2 (id,dato1,dato2) VALUES(NULL,'${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}'); COMMIT;

pero claro, como es de esperar, en el cli de Asterisk:
asterisk2*CLI> odbc write ODBC_PRUEBA noseque esto,aquello
BEGIN

Asi que pruebo escapar los ; en func_odbc.conf
[PRUEBA]
dsn
=asterisk
writesql
=BEGIN\; INSERT INTO pbx.borrar1 (id,dato1,dato2) VALUES(NULL,'${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}')\; INSERT INTO pbx.borrar2 (id,dato1,dato2) VALUES(NULL,'${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}')\; COMMIT\;

vemos en el cli que aparentemente funcionaría:
asterisk2*CLI> odbc write ODBC_PRUEBA noseque esto,aquello
BEGIN; INSERT INTO pbx.borrar1 (id,dato1,dato2) VALUES(NULL,'esto','aquello'); INSERT INTO pbx.borrar2 (id,dato1,dato2) VALUES(NULL,'esto','aquello'); COMMIT;

Bien, lo ejecuto:
asterisk2*CLI> odbc write ODBC_PRUEBA noseque esto,aquello exec
Failed to execute query.
[Sep 30 10:36:32] WARNING[57937]: func_odbc.c:191 generic_execute: SQL Execute returned an error -1: 42000: [MySQL][ODBC 5.1 Driver][mysqld-5.5.43-0ubuntu0.14.04.1]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO pbx.borrar1 (id,dato1,dato2) VALUES(NULL,'esto','aqu (282)
[Sep 30 10:36:32] WARNING[57937]: func_odbc.c:199 generic_execute: SQL Exec Direct failed (-1)![BEGIN; INSERT INTO pbx.borrar1 (id,dato1,dato2) VALUES(NULL,'esto','aquello'); INSERT INTO pbx.borrar2 (id,dato1,dato2) VALUES(NULL,'esto','aquello'); COMMIT;]
[Sep 30 10:36:32] WARNING[57937]: res_odbc.c:617 ast_odbc_direct_execute: SQL Execute error! Verifying connection to asterisk [asterisk-connector]...
[Sep 30 10:36:32] WARNING[57937]: func_odbc.c:191 generic_execute: SQL Execute returned an error -1: 42000: [MySQL][ODBC 5.1 Driver][mysqld-5.5.43-0ubuntu0.14.04.1]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO pbx.borrar1 (id,dato1,dato2) VALUES(NULL,'esto','aqu (282)
[Sep 30 10:36:32] WARNING[57937]: func_odbc.c:199 generic_execute: SQL Exec Direct failed (-1)![BEGIN; INSERT INTO pbx.borrar1 (id,dato1,dato2) VALUES(NULL,'esto','aquello'); INSERT INTO pbx.borrar2 (id,dato1,dato2) VALUES(NULL,'esto','aquello'); COMMIT;]


:'( hay alguna posibilidad?

Saludos.

Pepelux

unread,
Sep 30, 2015, 7:15:48 AM9/30/15
to aster...@googlegroups.com
Con un único insert puedes insertar muchas líneas. Estoy en el móvil y no tengo un ejemplo ahora pero si haces un export desde phpmyadmin puedes ver la estructura 

Enviado desde mi iPhone
--
Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org)
Normas de la lista Asterisk-ES: http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
---
Has recibido este mensaje porque estás suscrito al grupo "asterisk-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a asterisk-es...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a aster...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/asterisk-es.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Rodrigo Ramírez Norambuena

unread,
Oct 15, 2015, 2:51:57 AM10/15/15
to aster...@googlegroups.com
> Driver][mysqld-5.5.43- 0ubuntu0.14.04.1]You have an error in your SQL
> syntax; check the manual that corresponds to your MySQL server
> version for the right syntax to use near 'INSERT INTO pbx.borrar1
> (id,dato1,dato2) VALUES(NULL,'esto','aqu (282) [Sep 30 10:36:32]
> WARNING[57937]: func_odbc.c:199 generic_execute: SQL Exec Direct
> failed (-1)![BEGIN; INSERT INTO pbx.borrar1 (id,dato1,dato2)
> VALUES( NULL,'esto','aquello'); INSERT INTO pbx.borrar2
> (id,dato1,dato2) VALUES(NULL ,'esto','aquello'); COMMIT;] [Sep 30
> 10:36:32] WARNING[57937]: res_odbc.c:617 ast_odbc_direct_execute: SQL
> Execute error! Verifying connection to asterisk
> [asterisk-connector]... [Sep 30 10:36:32] WARNING[57937]:
> func_odbc.c:191 generic_execute: SQL Execute returned an error -1:
> 42000: [MySQL][ODBC 5.1 Driver][mysqld-5.5.43- 0ubuntu0.14.04.1]You
> have an error in your SQL syntax; check the manual that corresponds
> to your MySQL server version for the right syntax to use near 'INSERT
> INTO pbx.borrar1 (id,dato1,dato2) VALUES(NULL,'esto','aqu (282) [Sep
> 30 10:36:32] WARNING[57937]: func_odbc.c:199 generic_execute: SQL
> Exec Direct failed (-1)![BEGIN; INSERT INTO pbx.borrar1
> (id,dato1,dato2) VALUES( NULL,'esto','aquello'); INSERT INTO
> pbx.borrar2 (id,dato1,dato2) VALUES(NULL ,'esto','aquello'); COMMIT;]
>
>
> :'( hay alguna posibilidad?
>
> Saludos.
>

¿Por que no lo haces del lado de la base de datos?


Crear un procedimiento almacenado que haga el insert o las operaciones
necesarias y lo llamas del writesql. O también cuando inserte en una
tabla replique a la otra.

Saludos,

--
Rodrigo Ramírez Norambuena
www.rodrigoramirez.com
Reply all
Reply to author
Forward
0 new messages