我正在使用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;
答案 0 :(得分:1)
如果你没有在程序中设置BAR,那么变量将包含你调用function1()
之前的任何值。这只是基本逻辑。
所以你的选择是:
您发布的代码使用第一个选项。在简单的逻辑中,您提出的是我将采取的方法。如果内部更复杂 - 一个IF或一个包含许多分支的CASE - 我会选择让每个分支显式设置该值,因为这可能会使代码的意图更清晰。