Alation查询表单-参数不适用于“ IN”运算符

时间:2019-11-20 00:30:13

标签: sql db2 alation

我需要创建一个带有输入参数的查询表单,该输入参数可以接受多个字符串输入。

根据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};

结果: 它按预期产生参数选项: enter image description here

但是无论我使用“传递多个值”版本还是“字符串多个值”版本,框中显示的逗号分隔列表都会引发相同的错误: enter image description here

预期结果: 该表中所有与VIN匹配的字段都匹配的参数。

2 个答案:

答案 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 表单视图,请选择将查询共享为表单选项。