JMP 13 JSL que pasa variables a la sentencia SQL de OracleEstoy trabajando con un colega que tiene una secuencia de comandos JMP 13 para definir variables utilizando ventanas Modales. La selección del usuario luego establece las variables que queremos pasar a una sección de base de datos abierta de nuestro script en la declaración SQL. La tabla de datos se actualiza para qué horno se selecciona en la ventana Modal. Luego seleccionamos la columna del horno para pasar este valor a nuestra declaración SQL.
Ejemplo.
OvenList={18,22};
nw=New Window( " Reference Units",<<MODAL></MODAL>
El problema que tenemos es el siguiente ...
oven_id: pases de script [2,2]
test_part_id: el script pasa {"partid1", "partid2"}
Preguntas
1) ¿Cómo seleccionamos el primer valor en la columna del horno para establecer como el oven_id que se pasa a la declaración SQL?
2) Oracle parece no estar entre paréntesis y comillas dobles. Funciona si codificamos comillas simples e identificadores de partes, por ejemplo: IN ('partid1', 'partid2')
¡¡¡AYUDA!!!
Re: JMP JMP 13 que pasa variables a la sentencia SQL de OracleGustoso de trabajar para ti. La construcción ^ varname ^ debe usarse con evalinsert . El uso de eval inserte permite un código de aspecto más limpio, y no es necesario convertir los números en cadenas con char ().
test_part_in_list = "('" || concat items(test_part_id, "', '") || "')";
sql = evalinsert(
"Select db.table.field1
db.table.field2
db.table.field3
FROM db.table
WHERE db.table.exprmt = 'blah'
AND db.table.field = ^oven_id[1]^
AND db.table.field In ^test_part_in_list^ ORDER BY test_part_id ASC");
Open Database( -- connection string info -- , sql, "dataset");Re: JMP JMP 13 que pasa variables a la sentencia SQL de Oraclepmroz
Gracias por su rápida respuesta y sugerencia de código. Funcionó perfecto para nuestra aplicación. Muchas gracias. Probamos todo tipo de soluciones desde varios foros usando ^ var_name ^, ^ || var_name || ^, etc. Su solución al construir la lista fue el paso de la solución que nos faltaba.
Re: JMP JMP 13 que pasa variables a la sentencia SQL de Oracle Obtener valores devuelve una lista, por lo que necesita referirse a elementos de una matriz individual para poder usarlos. Puedes usar artículos concat para crear una lista IN. Esto funcionará:
test_part_in_list = "('" || concat items(test_part_id, "', '") || "')";
sql =
"Select db.table.field1
db.table.field2
db.table.field3
FROM db.table
WHERE db.table.exprmt = 'blah'
AND db.table.field = " || char(oven_id[1]) || "
AND db.table.field In " || test_part_in_list || "ORDER BY test_part_id ASC";
Open Database( -- connection string info -- , sql, "dataset");