无法将ORDER BY命令添加到存储过程

时间:2011-05-16 11:20:47

标签: sql stored-procedures informix

我正在将我正在维护的某些软件中的存储过程从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语法错误已发生”错误。

基本上tblHead是一系列订单标题,tblDetails是每个订单详细信息的表格。选择和加入数据工作正常,尝试命令失败。

订购应该适用于最初的SELECT,IIRC,所以我看不出会出现什么问题,这里......

1 个答案:

答案 0 :(得分:4)

如上所述here

  

.....并非所有条款和选项   SELECT语句可用   你在一个查询中使用   INSERT语句。以下SELECT   不支持子句和选项   Informix在INSERT语句中的说明:

     

FIRST和INTO TEMP

     

ORDER BY和UNION

因此Informix中的INSERT命令不支持ORDER BY。

我现在没有测试的东西,但你可以试试这样的东西,作为一种解决方法:

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
  );