我需要创建一个带有输入参数的查询表单,该输入参数可以接受多个字符串输入。
根据Alation的文档"What is a query form? Do you have parameters?",代码很简单:
用于传递多个值:
select * from order_history where customer_id in (${customer_id | type : raw});
对于字符串多个值:
select * from order_history where customer in ${customer | type : raw};
(我不知道传递多个值和字符串多个值之间有什么区别,所以如果有人可以分享我的见解,我将不胜感激。)
我的代码:
SELECT * FROM WTY_DM.PRODUCT
WHERE VIN IN ${VIN | type : raw};
但是无论我使用“传递多个值”版本还是“字符串多个值”版本,框中显示的逗号分隔列表都会引发相同的错误:
预期结果: 该表中所有与VIN匹配的字段都匹配的参数。
答案 0 :(得分:0)
我们不确定您的声明,尤其是$ {customer_id |类型:原始}部分。我们可能需要有关customer_id,类型和原始的更多详细信息,以便更好地理解您的问题。
但是通常来说,该部分应该像一个单词,例如1,“ A”或“ BBB”。或2个或多个带括号的单词,例如(1、2),('A','B')或('AAA','BBB')。
这里是IN的示例用法脚本,其结果供您在AIX Db2 V11.5上参考。
#!/bin/sh
db2 -v "drop db db1"
db2 -v "create db db1"
db2 -v "connect to db1"
db2 -v "create table t1 (c1 int, c2 char(10), c3 int)"
db2 -v "insert into t1 values (1,'AA',1)"
db2 -v "insert into t1 values (1,'AB',2)"
db2 -v "insert into t1 values (2,'BB',3)"
db2 -v "insert into t1 values (2,'AB',4)"
VAR1='A'
VAR2='B'
db2 -v "select * from t1 where c1 in ( 1 , 2 )"
db2 -v "select * from t1 where c1 in 2"
db2 -v "select * from t1 where c2 in '${VAR1}${VAR2}'"
db2 terminate
这是三个选择语句的结果:
C1 C2 C3
----------- ---------- -----------
1 AA 1
1 AB 2
2 BB 3
2 AB 4
C1 C2 C3
----------- ---------- -----------
2 BB 3
2 AB 4
C1 C2 C3
----------- ---------- -----------
1 AB 2
2 AB 4
希望这有助于您理解。
答案 1 :(得分:0)
Alation 移动了他们的文档和帮助中心,因此您的链接似乎不再有效。我找到了新的,对其进行了格式化并在下面分享给将来需要此文件的任何人。
为了解决您的具体问题,我认为您可以通过将括号括起来来解决该问题,请尝试以下操作: SELECT * FROM WTY_DM.PRODUCT WHERE VIN IN (${VIN type : raw});
然后您必须发布查询并单击“共享为表单”
此处的文档...
查询表单和参数
如果您需要使用不同的列值多次重新运行查询,在每次运行时手动编辑脚本可能会变得乏味。一个示例是使用不同的状态或日期运行相同的查询。
为了简化过程,您可以通过用以下表达式替换所需的常量来创建查询表单(也称为查询参数):
${variable_name | eg:example value | default:default_value | help:help text | type:type}
其中 variable_name 成为表单域的名称,示例值在表单域为空时显示在表单域中,帮助文本显示在表单域的左侧。
类型可以取值:
字符串
整数
日期
原始
使用 type 指定变量的类型以改进解析,但您可以将其省略。 type: raw 告诉 Alation 按原样接受变量输入。
单值
select * from order_history
where customer_id = ${customer_id};
单个值与喜欢
select * from order_history
where col LIKE '${string}';
传递多个值
select * from order_history
where customer_id in (${customer_id type : raw});
日期
select top 10 * from order_history
where my_date = ${my_date type : date};
日期多个值
select top 10 * from order_history
where my_date between (${start_date type : date}) and (${end_date type : date});
字符串值
select * from order_history
where customer = ${customer};
字符串多个值
select * from order_history
where customer in ${customer type : raw};
例如,如果您的原始查询内容为:
SELECT * from order_history where order_date = '2016-01-01';
您的查询表单可能如下所示:
SELECT * from order_history where order_date = ${my_date | eg:2016-01-01 | type:date | default:2016-02-14 | help:enter order date in YYYY-MM-DD format};
要访问模板化查询的无 SQL 表单视图,请选择将查询共享为表单选项。