1

我正在编写一个使用 OCI 调用存储过程的 C++ 程序。在我的 PL/SQL 存储过程测试中,如果不初始化出站变量,我可能会收到“获取的列值为 NULL”错误,因为在 的情况下foo != 0,bar 为 NULL。所以在第一行,我先初始化 bar。这是处理出站变量的正确方法吗?

  FUNCTION function1(
    foo   IN  INTEGER,
    bar   OUT VARCHAR2
  ) RETURN INTEGER
  IS
    ret      INTEGER;
  BEGIN

    bar := ' '; -- do I need to initialize this variable?

    IF foo = 0 THEN
      ret := 0;
      bar := 'a';
    ELSE
      ret := 1;
    END IF;

    RETURN ret;

  END function1;
4

1 回答 1

1

如果您没有在程序中设置 BAR,那么该变量将被初始化为其类型的默认值(在这种情况下为 NULL,并且对于除具有非 NULL 默认值的记录类型之外的任何类型)。这只是基本逻辑。

所以你的选择是:

  1. 接受变量类型的默认值。
  2. 在 IF 语句的每个分支中将 BAR 设置为适当的值。

您发布的代码使用第一个选项。在您提出的简单逻辑中,这就是我将采取的方法。如果内部结构更复杂——IF 或具有许多分支的 CASE——我会选择让每个分支都明确设置值,因为这可能会使代码的意图更清晰。

于 2012-08-17T12:49:40.503 回答