我正在将我正在维护的某些软件中的存储过程从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,所以我看不出会出现什么问题,这里......
答案 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
);