无法将 ORDER BY 命令添加到存储过程
Posted
技术标签:
【中文标题】无法将 ORDER BY 命令添加到存储过程【英文标题】:Cannot add an ORDER BY command to a stored procedure 【发布时间】:2011-05-16 11:20:46 【问题描述】:我正在将我正在维护的一些软件中的存储过程从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 syntax error has occurred”错误。
基本上tblHead
是一系列订单标题,tblDetails
是每个订单详细信息的表格。选择和加入数据工作正常,尝试排序失败。
排序应该适用于原始 SELECT、IIRC 中的任何内容,所以我看不出有什么问题,在这里...
【问题讨论】:
往表中插入数据为什么需要order by? 问题不是存储过程,问题是在 INSERT INTO ....SELECT 构造中不允许使用 ORDER BY 子句 【参考方案1】:如here所述:
..... 不是所有的子句和选项 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
);
【讨论】:
好的,很公平。它适用于 SQL Server。正如上面 Lieven 所提到的,无论如何都没有真正的充分理由存在 ORDER BY。感谢您提供文档参考和解决方法建议。以上是关于无法将 ORDER BY 命令添加到存储过程的主要内容,如果未能解决你的问题,请参考以下文章
SQL 分页查询存储过程中order by 后面不能传变量的问题怎么解决
MySQL 存储过程 SELECT、三个 WHERE CLAUSE 值和 ORDER BY
存储过程 - 在 ORDER BY 列表位置 2 中遇到常量表达式