UNION в ХП. Работать не хочет!

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Дмитрий
Сообщения: 127
Зарегистрирован: 26 окт 2004, 11:05

UNION в ХП. Работать не хочет!

Сообщение Дмитрий » 22 фев 2005, 17:16

Добрый день!
Есть проблемка. В хранимой процедуре есть необходимость использовать UNION. Пишу:

Код: Выделить всё

FOR SELECT CUSTOMER_ID, DOC_ID
       FROM TABLE1
       WHERE ЛЯ-ЛЯ-ЛЯ
       
       UNION

       SELECT CUSTOMER_ID, DOC_ID
       FROM TABLE2
       WHERE ЛЯ-ЛЯ-ЛЯ
       
       INTO :CUSTOMER_ID, :DOC_ID
DO
 SUSPEND;
При компиляции получаю сообщение: Datatype unknown.
Как побороть? Или нельзя UNION использовать?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Re: UNION в ХП. Работать не хочет!

Сообщение Merlin » 22 фев 2005, 17:40

Дмитрий писал(а):Добрый день!
Есть проблемка. В хранимой процедуре есть необходимость использовать UNION. Пишу:

Код: Выделить всё

FOR SELECT CUSTOMER_ID, DOC_ID
       FROM TABLE1
       WHERE ЛЯ-ЛЯ-ЛЯ
       
       UNION

       SELECT CUSTOMER_ID, DOC_ID
       FROM TABLE2
       WHERE ЛЯ-ЛЯ-ЛЯ
       
       INTO :CUSTOMER_ID, :DOC_ID
DO
 SUSPEND;
При компиляции получаю сообщение: Datatype unknown.
Как побороть? Или нельзя UNION использовать?
Вызывает некоторые сомнения ЛЯ-ЛЯ-ЛЯ :) Точно в select'ах только поля, констант нету? Если вырезать этот union и выполнить отдельно, вне процедуры - работает?

Дмитрий
Сообщения: 127
Зарегистрирован: 26 окт 2004, 11:05

Сообщение Дмитрий » 24 фев 2005, 09:07

Вызывает некоторые сомнения ЛЯ-ЛЯ-ЛЯ
Ну, если точнее, там есть еще несколько джоинов.
вырезать этот union и выполнить отдельно
А отдельно, вне процедуры, буду пробовать.

Slava Ekimov
Сообщения: 44
Зарегистрирован: 26 окт 2004, 14:30

Re: UNION в ХП. Работать не хочет!

Сообщение Slava Ekimov » 24 фев 2005, 10:14

При выборках cast-ом явно приводи к одному типу
select cast(customer_id as int) as customer_id

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 24 фев 2005, 10:16

есть вообще сомнения в использовании union для table1 и table2. ну если только не надо убрать одинаковые записи. Так что, вместо union all можно просто написать 2 for select.

Дмитрий
Сообщения: 127
Зарегистрирован: 26 окт 2004, 11:05

Сообщение Дмитрий » 24 фев 2005, 10:56

есть вообще сомнения в использовании union для table1 и table2
А у меня нет. Просто я кусок процедуры упрощенный написал. В table1 и table2 совершенно разные данные и критерии выборки разные. Одинаковых данных быть не может. Просто потом идет довольно сложная обработка этой выборки и повторять ее дважды не очень хочется, что бы не загромождать текст процедуры.

А на самом деле я проблему решил :lol: вернее ошибку нашел.
Полей выбирается много, и одно из них в table1 имеет тип integer, а в table2 - smallint. Вот и вся проблема.

Ответить