Joh*_*ust -1 oracle null plsql varchar2 oracle12c
在匿名块中,我有一个空/空的输入字符串,并且想要针对非空字符串进行检查。例子:
DECLARE
v_notnull varchar2(50):='this string is never null';
v_input varchar2(50):='';
BEGIN
IF trim(v_input) != trim(v_notnull) THEN
dbms_output.put_line('the strings do NOT match');
ELSE
dbms_output.put_line('the strings DO match');
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
这里的问题是,当我运行这个块时,'the strings DO match'即使我输入''与 string 不同的空字符串(又名 null),输出也始终v_input是这样'this string is never null'。如何确保 oracle 覆盖空字符串大小写?当v_input为空时我希望输出为'the strings do NOT match'.
该文档有一个关于 null 处理的部分。空字符串被视为与 null 相同,并且您不能将 null(任何类型)与相等性进行比较 - 正如文档中的表格所示,将任何内容与 null 进行比较的结果都是未知的 - 既不是 true 也不是 false。您必须使用is [not] nullnull 来比较任何内容。
在这种情况下,您可以通过查看一个变量是否为 null 而另一个变量是否为 null 来显式地拼写出来,反之亦然,并且仅在告诉您两个变量都不为 null 时才比较实际值:
DECLARE
v_notnull varchar2(30):='this string is never null';
v_input varchar2(30):='';
BEGIN
IF (trim(v_input) is null and trim(v_notnull) is not null)
or (trim(v_input) is not null and trim(v_notnull) is null)
or trim(v_input) != trim(v_notnull) THEN
dbms_output.put_line('the strings do NOT match');
ELSE
dbms_output.put_line('the strings DO match');
END IF;
END;
/
the strings do NOT match
PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)
我已经添加了缺少的varchar2尺寸;想必您是基于一个程序,该程序接受参数而不运行您独立发布的内容......