PL / SQL oracle函数与ora-01744 INTO

时间:2014-01-09 07:46:22

标签: sql oracle plsql

我在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;

顺便说一下,我知道表名和字段不同,这个预览中的值是正确的。

1 个答案:

答案 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}}

请注意,如果内部选择没有返回任何内容,它可能仍然会失败并显示“找不到行”错误。