Страница 1 из 1

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 использовать?

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

Добавлено: 22 фев 2005, 17:40
Merlin
Дмитрий писал(а):Добрый день!
Есть проблемка. В хранимой процедуре есть необходимость использовать 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 и выполнить отдельно, вне процедуры - работает?

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

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

Добавлено: 24 фев 2005, 10:14
Slava Ekimov
При выборках cast-ом явно приводи к одному типу
select cast(customer_id as int) as customer_id

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

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

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