oracle PL/SQL函数返回多行

r7xajy2e  于 2023-04-11  发布在  Oracle
关注(0)|答案(1)|浏览(247)

我在Oracle SQL数据库中有一个这样的函数

create or replace function DEF_ID(
in_checkid IN SQLTEXTDEFN.SQLID%type
) 
return varchar2
as
sql_stmt clob;
ret varchar2(254);
begin
   begin 
     execute immediate 'select SQLTEXT from SQLTEXTDEFN where sqlid=:1'
         into sql_stmt
         using in_checkid;
       begin
         execute immediate sql_stmt into ret;
         EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    RETURN 'NO DATA FOUND';
                when others then
                    return substr(sqlerrm,1,200);
       end; 
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    RETURN 'NO CHECK FOUND';
                when others then
                    return substr(sqlerrm,1,200);
            END;
return ret;
end;

SQLTEXTDEFN表是一个包含不同SQL语句的表。当我执行此函数时,会得到SQL语句的响应。在某些情况下,我会得到一个错误:

ORA-01422: exact fetch returns more than requested number of rows

如果获取多行,我只希望第一行作为结果。

dluptydi

dluptydi1#

将结果限制为一行:

execute immediate 'select SQLTEXT from SQLTEXTDEFN where sqlid=:1 and rownum = 1'

如果SQLTEXT是一个varchar2,那么对它执行MAX会更安全:

execute immediate 'select MAX(SQLTEXT) from SQLTEXTDEFN where sqlid=:1'

这将防止重复行和没有行的异常。但是如果它是一个CLOB,则不能这样做。在这种情况下,添加异常处理以安静地处理NO_DATA_FOUND。

相关问题