我正在使用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 默认值的记录类型之外的任何类型)。 这只是基本的逻辑。
因此,您的选择是:
- 接受变量类型的默认值。
- 在 IF 语句的每个分支中将 BAR 设置为适当的值。
您发布的代码使用第一个选项。 在你提出的简单逻辑中,这就是我会采取的方法。 如果内部结构更复杂 - 一个 IF 或一个具有许多分支的 CASE - 我会选择让每个分支显式设置值,因为这可能会使代码的意图更清晰。