PL/SQL oracle 函数与 ora-01744 INTO

Fre*_*Pro 2 sql oracle plsql

我在 myqsl 中有一组函数,我需要编写 oracle 版本。

在我遇到limit 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;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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;
Run Code Online (Sandbox Code Playgroud)

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