JMP 13 JSL 将变量传递给 Oracle SQL 语句我正在与一位同事合作,他有一个 JMP 13 脚本,可以使用模态窗口定义变量。然后,用户选择设置我们想要传递到 SQL 语句中脚本的打开数据库部分的变量。在模态窗口中选择烤箱的数据表会更新。然后,我们选择烤箱列,将此值传递到我们的 SQL 语句中。
例子。
OvenList={18,22};
nw=New Window( " Reference Units",<<MODAL></MODAL>
我们遇到的问题如下...
oven_id:脚本传递 [2,2]
test_part_id:脚本传递 {"partid1","partid2"}
问题
1)我们如何选择烤箱列中的第一个值设置为传递给 SQL 语句的烤箱 ID?
2)Oracle似乎不喜欢括号和双引号。 如果我们硬编码单引号和部件 ID 例如:IN('partid1','partid2')
帮助!!!
回复:JMP 13 JSL 将变量传递给 oracle SQL 语句很高兴它对你有效。^varname^ 构造需要与评估插入。使用 evalinsert 可以使代码看起来更简洁,并且您不需要使用 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");回复:JMP 13 JSL 将变量传递给 oracle SQL 语句普罗兹,
感谢您的快速回复和代码建议。它非常适合我们的应用程序。非常感谢。我们使用 ^var_name^、^||var_name||^ 等尝试了来自各个论坛的各种解决方案。您通过构建列表的解决方案是我们缺少的解决方案步骤。
回复:JMP 13 JSL 将变量传递给 oracle SQL 语句获取值返回一个列表,因此您需要引用各个数组元素才能使用它们。您可以使用串联项目创建 IN 列表。这将起作用:
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");