获取 ORA-06503 的原因:PL/SQL:函数返回没有值?

Posted

技术标签:

【中文标题】获取 ORA-06503 的原因:PL/SQL:函数返回没有值?【英文标题】:Reason for getting ORA-06503: PL/SQL: Function returned without value? 【发布时间】:2011-08-09 22:01:48 【问题描述】:

所以我正在开发一个 Web 服务,该服务将利用两个调用数据库的函数从数据库中获取数据。目标是拥有它,以便如果其中一个参数中有特定值,可以说

            bool x= false;
        if ( "Y".Equals( parameterValve, StringComparison.InvariantCultureIgnoreCase ) )
            x= true;
                    if ( x)
                        cmd.Parameters.Add( "function_call1", OracleType.Cursor ).Direction = ParameterDirection.Output;  
                    else
                        cmd.Parameters.Add( "function_call2", OracleType.Cursor ).Direction = ParameterDirection.Output;                      
                        try
                        
grab data here

return to webservice

我已经完成了所有这些设置,并且它适用于第一个参数。但是,当我使用第二个参数调用 web 服务时,我得到了这个错误。

System.Data.OracleClient.OracleException: ORA-06503: PL/SQL: 
Function returned without value
ORA-06512: at "database.package", line 103
ORA-06512: at line 1

我的问题是发生此错误的确切原因是什么? 是因为我错误地调用了函数还是函数调用本身有问题?

基本上我已经盯着这段代码一段时间了,现在试图弄清楚我做错了什么,所以我希望有人能指出我应该寻找的正确方向纠正这个错误。

非常感谢任何帮助或建议。

谢谢!

【问题讨论】:

techonthenet.com/oracle/errors/ora06503.php "您尝试调用 PLSQL 函数,但该函数缺少 RETURN 语句。" 【参考方案1】:

函数本身有问题。

不知何故,Oracle 在没有返回任何内容的情况下完成了函数。例如,如果传入 1 个参数,此函数将成功运行,如果传入两个参数,则会抛出 ORA-6503 错误

CREATE OR REPLACE FUNCTION throw_error( p_arg1 IN NUMBER,
                                        p_arg2 IN NUMBER DEFAULT null )
  RETURN NUMBER
IS
BEGIN
  IF( p_arg2 IS NULL )
  THEN
    RETURN 1;
  END IF;
END;


SQL> select throw_error(1) from dual;

THROW_ERROR(1)
--------------
             1

SQL> select throw_error(1,2) from dual;
select throw_error(1,2) from dual
       *
ERROR at line 1:
ORA-06503: PL/SQL: Function returned without value
ORA-06512: at "HR.THROW_ERROR", line 10
ORA-06512: at line 1

【讨论】:

以上是关于获取 ORA-06503 的原因:PL/SQL:函数返回没有值?的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 语句的 SQL 查询不起作用

PL/SQL Developer 的调试器不进入程序的原因?

除了在 PL/SQL 中使用 elsif 与嵌套 if 的可读性之外,还有其他原因吗?

PL/SQL无法查询过滤中文字段解决方案

获取 SQL 执行计划。 PL/SQL Developer = 奇怪的行为。 SQL*Plus = 未选择任何行

PL/SQL连接时,报无法解析指定的字符串