我想在字符串处理中使用NVL2函数,例如
some_variable := nvl2 (other_variable, '.' || other_variable, '');
为此,我收到了错误
PLS-00201: identifier 'NVL2' must be declared
令人惊讶的是,它是有效的:
some_variable := nvl (other_variable, '');
除了使用if-then-end之外,还有其他帮助吗?
谢谢Jan
发布于 2019-03-07 18:10:03
根据此link,nvl2仅适用于SQL,而不适用于PLSQL。
你可以像下面这样使用
select nvl2 (other_variable, '.' || other_variable, '') into some_variable from dual;发布于 2019-03-07 19:17:57
您还可以在PL/SQL中直接使用case表达式(这样可以避免在SQL引擎之间来回切换上下文):
DECLARE
v_chk VARCHAR2(1);
v_not_null VARCHAR2(1) := 'B';
v_null VARCHAR2(1) := 'C';
v_res VARCHAR2(1);
BEGIN
v_res := CASE WHEN v_chk IS NOT NULL THEN v_not_null
ELSE v_null
END;
dbms_output.put_line('v_chk = "'||v_chk||'", v_res = "'||v_res||'"');
v_chk := 'A';
v_res := CASE WHEN v_chk IS NOT NULL THEN v_not_null
ELSE v_null
END;
dbms_output.put_line('v_chk = "'||v_chk||'", v_res = "'||v_res||'"');
END;
/
v_chk = "", v_res = "C"
v_chk = "A", v_res = "B"发布于 2019-03-08 10:27:58
我创建了一个函数,这样我就可以使用nvl2,就像它存在于plsql中一样,它也可能适合您的目的
create or replace FUNCTION NVL2
( p_value IN VARCHAR2,
p_newval_if_not_null IN VARCHAR2,
p_newval_if_null IN VARCHAR2 ) RETURN VARCHAR2 DETERMINISTIC IS
BEGIN
IF p_value IS NOT NULL THEN
RETURN(p_newval_if_not_null);
ELSE
RETURN(p_newval_if_null);
END IF;
END;如果需要,可以重新创建它以使用不同的数据类型
https://stackoverflow.com/questions/55040919
复制相似问题