我有一个适用于我当前的 MySQL 数据库的 MySQL 查询。我被迫转向 Oracle,因此我尝试移植所有存储过程/程序以使用 Oracle SQL 语法。我在一个特定查询上遇到了很多麻烦。这是 MySQL 查询。它使用子查询更新表。
update table1 alf
set nextcontractid =
(
select
contractid from table1copy alf2
where
alf2.assetid = alf.AssetID
and
alf2.lasttradedate > alf.LastTradeDate
order by lasttradedate asc limit 1
)
where complete = 0
在oracle中,我无法使用limit命令,所以我寻找解决方法。这是我的 Oracle 查询。 (这是行不通的。)
update table1 alf
set nextcontractid =
(select contractid from
(
SELECT contractid, rownum as row_number
FROM table1copy alf2
WHERE alf2.assetid = alf.assetid
AND alf2.lasttradedate > alf.lasttradedate
ORDER BY lasttradedate ASC
)
where row_number = 1)
where alf.complete = 0
我收到以下错误:
Error at Command Line:8 Column:29
Error report:
SQL Error: ORA-00904: "ALF"."LASTTRADEDATE": invalid identifier
00904. 00000 - "%s: invalid identifier"
第 8 行是:
AND alf2.lasttradedate > alf.lasttradedate
删除更新语句并将一些虚拟值放入子查询中会产生子查询的正确结果:
(select contractid from
(
SELECT contractid, rownum as row_number
FROM asset_list_futures_copy alf2
WHERE alf2.assetid = 'GOLD'
AND alf2.lasttradedate > '20110101'
ORDER BY lasttradedate ASC
)
where row_number = 1)
查看错误,看起来对 alf 的第二个引用不起作用。知道如何更改我的查询以便它在 Oracle 中工作吗?