我正在使用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;
如果未在程序中设置BAR,则该变量将被初始化为the default value of its type(在这种情况下为NULL,并且对于任何类型(默认值为非NULL的记录类型除外))。那只是基本逻辑。
所以您的选择是:
您发布的代码使用第一个选项。用简单的逻辑介绍我将采用的方法。如果内部更复杂-IF或具有许多分支的CASE-我将选择让每个分支显式设置值,因为这可能会使代码的意图更加清晰。