代码之家  ›  专栏  ›  技术社区  ›  Tom

pl sql-返回sqlcode作为out参数是否被接受?

  •  2
  • Tom  · 技术社区  · 15 年前

    我有一个返回out参数的过程。

    procedure foo (in_v IN INTEGER, out_v OUT integer)
    BEGIN
    ...
    EXCEPTION
      WHEN OTHERS THEN
        --sh*t happend
        out_v := SQLCODE;
    END
    

    如果一切正常,该参数将为0;如果发生了异常情况,该参数将为0。

    现在,如果一路上发生sh*t,就会抛出异常。

    是否可以将sqlcode值赋给out参数?或者这被认为是一种代码味道,我将被驱逐出编程社区?

    事先谢谢。

    4 回复  |  直到 15 年前
        1
  •  11
  •   Roland Bouman    15 年前

    如果没有对错误的额外处理,我可能会建议不要这样做。这种方法使得每个调用者都有必要检查out参数的值。如果调用者忘记了它,一个严重的问题可能会在一开始就被忽略,并在其他地方创建一个难以调试的问题。

    如果您在这里不能捕捉到其他人,那么您可以确保调用者必须显式地捕捉到它,这会更干净,更容易调试。

        2
  •  4
  •   David Aldridge    15 年前

    我想,这是否可以取决于你想用它实现什么。你想解决什么问题,或者你想满足什么要求?

    通常的错误行为是优雅地处理那些在正常工作中可能发生的错误,并允许那些你不希望被提升的错误,所以这看起来很奇怪。

        3
  •  2
  •   darreljnz    15 年前

    没关系,但我不推荐。通过这样做,您将强制调用代码执行非标准错误处理。如果您是唯一一个调用代码的人,并且您记得检查错误代码,那么这很好。但是,如果您在一个有多个程序员的大型系统中进行编码,我认为您应该对您的程序员同事友好,并遵循该语言支持的标准异常处理方法。

    如果您确实决定沿着该路径走下去,那么也要像没有错误文本一样返回sqlerm,因为您只有错误代码可以通过。经过多年对第三方软件中数百个应用程序错误捕捉“-20001”之后,sqlerm通常很重要。

        4
  •  0
  •   Beethoven    15 年前

    由于许多原因,这种编码风格不是一个好主意。

    首先,混合错误和异常是不好的做法,更糟糕的做法是混合返回值和异常。异常是为了跟踪异常情况——正常编程完全出乎意料的情况,例如内存不足问题、转换问题等等,您通常不想在每个调用站点编写处理程序,但需要在某个级别处理。

    编码风格的第二个令人担忧的方面是,代码有效地表示当遇到异常时,代码将向调用者发出信号,表示发生了错误的事情,但会很高兴地丢弃除sqlcode之外的所有异常信息。