Невозможно добавить команду ORDER BY к хранимой процедуре - PullRequest
1 голос
/ 16 мая 2011

Я конвертирую хранимую процедуру в некотором программном обеспечении, которое поддерживаю, из SQL Server SQL в Informix SQL, и проблем много.

По сути, я конвертирую каждый раздел построчно, покаконвертируем все это.

У меня есть следующее CREATE PROCEDURE:

CREATE PROCEDURE ifxdbase:dc_buildSP (WorkID INT, CompNo smallint)
CREATE TEMP TABLE Items
(
   Code smallint,
   Qty int,
   Total int
);

INSERT INTO Items
SELECT 
   tblDetails.code, 
   tblDetails.quantity,
   tblHead.quantity
FROM
   tblHead
INNER JOIN tblDetails ON (tblDetails.compno = tblDetails.compno AND tblDetails.id_num = tblHead.id_num)
WHERE tblHead.compno = CompNo AND tblHead.id_num = WorkID;
--ORDER BY tblDetails.code;

DROP TABLE Items;
END PROCEDURE

Как есть, это работает нормально, но когда я раскомментирую строку --ORDER BY tblDetails.seqno; (и удаляюточка с запятой из предыдущей строки) Я получаю сообщение об ошибке «-201 A синтаксическая ошибка произошла».

В основном tblHead - это серия заголовков заказов, а tblDetails - это таблица деталей каждого из них.заказы.Выбор и объединение данных работает нормально, попытка упорядочить их не удалась.

Порядок должен работать с чем угодно из исходного SELECT, IIRC, поэтому я не вижу, что может быть не так, здесь ...

1 Ответ

4 голосов
/ 16 мая 2011

Как указано здесь :

..... не все пункты и варианты оператор SELECT доступен для вам использовать в запросе в Вставить заявление. Следующий ВЫБРАТЬ пункты и опции не поддерживаются Informix в операторе INSERT:

ПЕРВЫЙ И В ТЕМП

ЗАКАЗАТЬ ПО И СОЮЗУ

, поэтому ORDER BY не поддерживается в команде INSERT в Informix.

Мне сейчас нечего тестировать, но вы можете попробовать что-то вроде этого, как обходной путь:

INSERT INTO Items
SELECT code, dQuantity, hQuantity
  FROM (
    SELECT 
     tblDetails.code, 
     tblDetails.quantity dQuantity,
     tblHead.quantity hQuantity
    FROM
     tblHead
    INNER JOIN tblDetails ON (tblDetails.compno = tblDetails.compno AND tblDetails.id_num = tblHead.id_num)
    WHERE tblHead.compno = CompNo AND tblHead.id_num = WorkID;
    ORDER BY tblDetails.code
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...