2013-08-25 4 views
0

Пытается запустить некоторый запрос для DB2, но не получить никаких результатов.Запуск запроса SQL sql

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

Ваш запрос не имеет смысла. Вот версия с настольными псевдонимами:

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 разделяется на периоды. Обычно он разделяется запятыми, и вы должны использовать ',' вместо '.'.

+0

Это разные APPLICATION_ID здесь: 'SELECT '' '' || APPLICATION_ID || '' '' FROM SYSIBM.SYSDUMMY1', не t.APPLICATION_ID. Этот APPLICATION_ID из SYSIBM.SYSDUMMY1 (фиктивная таблица) и APPLICATION_ID выбирается из t. –

+0

@udar_molota. , , Я не знаю, какую версию DB2 вы используете, но во всех версиях, о которых я знаю, эта таблица не имеет поля под названием «APPLICATION_ID» (см. Http://pic.dhe.ibm.com/infocenter/dzichelp /v2r2/index.jsp?topic=%2Fcom.ibm.db2z10.doc.sqlref%2Fsrc%2Ftpc%2Fdb2z_sysibmsysdummy1table.htm). Таким образом, запрос разрешит поле из внешней области, которое имеет псевдоним 't'. –

+0

Ты почти прав. 'MON_GET_CONNECTION' - таблица FUNCTION, а SYSIBM.SYSDUMMY1 - фиктивная таблица. Я использую 9.7, правильный ответ для моего вопроса ниже. –

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 
Смежные вопросы