尝试为DB2运行一些查询,但没有得到任何结果。
SELECT APPLICATION_ID,
CLIENT_WRKSTNNAME
FROM TABLE(MON_GET_CONNECTION(cast(NULL as bigint), -2)) AS t
WHERE APPLICATION_ID IN (SELECT ''''||APPLICATION_ID||''''
FROM SYSIBM.SYSDUMMY1)
问题出在WHERE子句的子查询中。如果我只运行
SELECT ''''||APPLICATION_ID||''''
FROM SYSIBM.SYSDUMMY1
部分并将结果复制/粘贴到大查询中 - 我会得到所需的结果。子查询的结果如下所示:'92.81.111.13.51632.13022516453'
,它必须是String / varchar。
我做错了什么?
答案 0 :(得分:0)
您的查询没有意义。这是包含表别名的版本:
SELECT t.APPLICATION_ID, t.CLIENT_WRKSTNNAME
FROM TABLE(MON_GET_CONNECTION(cast(NULL as bigint), -2)) AS t
WHERE t.APPLICATION_ID IN (SELECT ''''||t.APPLICATION_ID||'''' FROM SYSIBM.SYSDUMMY1);
一种可能性是使用引号将字段APPLICATION_ID
与其自身进行比较。 SYSIBM.SYSDUMMY1
没有名为APPLICATION_ID
的列。因此,此查询等同于:
SELECT t.APPLICATION_ID, t.CLIENT_WRKSTNNAME
FROM TABLE(MON_GET_CONNECTION(cast(NULL as bigint), -2)) AS t
WHERE t.APPLICATION_ID = ''''||t.APPLICATION_ID||'''' ;
另一种可能性是APPLICATION_ID
是一个变量。在这种情况下,您应该将变量命名为v_APPLICATION_ID
,这样就不会与列名混淆。
看起来你想要这样的东西:
WHERE '.'||t.APPLICATION_ID||'.' like '%.'||v_APPLICATION_IDS||'.%' ;
这假设v_APPLICATION_IDS
中的列表以句点分隔。通常,它会以逗号分隔,您可以使用','
代替'.'
。
答案 1 :(得分:0)
WITH s AS (SELECT APPLICATION_ID AS application_id FROM SYSIBM.SYSDUMMY1)
SELECT CLIENT_WRKSTNNAME
FROM TABLE(MON_GET_CONNECTION(cast(NULL as bigint), -2)) AS t
INNER join s as s on s.application_id=t.APPLICATION_ID