PL / SQL初始化出站变量?

时间:2012-08-16 15:58:44

标签: oracle plsql

我正在使用OCI编写一个C ++程序来调用存储过程。在我的PL / SQL存储过程测试中,如果没有初始化出站变量,我可能会收到"fetched column value is 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;

1 个答案:

答案 0 :(得分:1)

如果你没有在程序中设置BAR,那么变量将包含你调用function1()之前的任何值。这只是基本逻辑。

所以你的选择是:

  1. 在程序流进入IF语句之前将BAR设置为默认值。
  2. 将BAR设置为IF语句的每个分支中的适当值。
  3. 您发布的代码使用第一个选项。在简单的逻辑中,您提出的是我将采取的方法。如果内部更复杂 - 一个IF或一个包含许多分支的CASE - 我会选择让每个分支显式设置该值,因为这可能会使代码的意图更清晰。