Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Дмитрий
- Сообщения: 127
- Зарегистрирован: 26 окт 2004, 11:05
Сообщение
Дмитрий » 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
Сообщение
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
Сообщение
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 совершенно разные данные и критерии выборки разные. Одинаковых данных быть не может. Просто потом идет довольно сложная обработка этой выборки и повторять ее дважды не очень хочется, что бы не загромождать текст процедуры.
А на самом деле я проблему решил

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