PL/SQL 来初始化出站变量



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

  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;

如果未在程序中设置 BAR,则变量将初始化为其类型的默认值(在本例中为 NULL,适用于除具有非 NULL 默认值的记录类型之外的任何类型)。 这只是基本的逻辑。

因此,您的选择是:

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

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

最新更新