У меня есть запрос MySQL, который работает с моей текущей базой данных MySQL.Я был вынужден перейти к оракулу, поэтому я пытаюсь перенести все свои хранимые процедуры / программы на использование синтаксиса 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, поэтому я искал обходной путь.Вот мой запрос оракула.(что не работает.)
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?