我在myqsl中有一组函数,我需要编写oracle版本。
在我遇到限制1 问题之前,情况会好转。我认为我的限制问题是问题,但无法弄清楚是什么问题。你能帮我个忙吗?
MySQL版
SELECT concat(fld_name, ' ', fld_surname)
INTO info
FROM tbl_customer
WHERE fld_flat_id = flatId and fld_type = typeId
order by fld_own_date desc limit 1;
Oracle版(导致问题)
SELECT Q1.*
FROM (
SELECT ROWNUM AS RWNR2, Q2.*
FROM (
SELECT (NAME || ' ' || SURNAME)
INTO info
FROM TB_CUSTOMER
WHERE FLAT_ID = flatId AND TYPE = typeId
ORDER BY OWN_DATE DESC
) Q2
WHERE ROWNUM <= 1
) Q1
WHERE Q1.RWNR2 > 0;
顺便说一下,我知道表名和字段不同,这个预览中的值是正确的。
答案 0 :(得分:3)
INTO
子句必须位于最外层SELECT
而不是内层rownum <= 1
。而且您不需要两个级别的嵌套,一个派生表和一个SELECT full_name
INTO info
FROM (
SELECT (NAME || ' ' || SURNAME) as full_name
FROM TB_CUSTOMER
WHERE FLAT_ID = flatId
AND TYPE = typeId
ORDER BY OWN_DATE DESC
) Q2
WHERE ROWNUM <= 1;
就足够了。
所以它应该是这样的:
{{1}}
请注意,如果内部选择没有返回任何内容,它可能仍然会失败并显示“找不到行”错误。