PL / SQL初始化出站变量?

问题描述 投票:1回答:1

我正在使用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;
oracle plsql
1个回答
1
投票

如果未在程序中设置BAR,则该变量将被初始化为the default value of its type(在这种情况下为NULL,并且对于任何类型(默认值为非NULL的记录类型除外))。那只是基本逻辑。

所以您的选择是:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.