首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >varchar处理中使用的PL/SQL语言中的NVL与NVL2

varchar处理中使用的PL/SQL语言中的NVL与NVL2
EN

Stack Overflow用户
提问于 2019-03-07 18:00:58
回答 3查看 372关注 0票数 2

我想在字符串处理中使用NVL2函数,例如

some_variable := nvl2 (other_variable, '.' || other_variable, '');

为此,我收到了错误

PLS-00201: identifier 'NVL2' must be declared

令人惊讶的是,它是有效的:

some_variable := nvl (other_variable, '');

除了使用if-then-end之外,还有其他帮助吗?

谢谢Jan

EN

回答 3

Stack Overflow用户

发布于 2019-03-07 18:10:03

根据此link,nvl2仅适用于SQL,而不适用于PLSQL。

你可以像下面这样使用

代码语言:javascript
复制
select nvl2 (other_variable, '.' || other_variable, '') into some_variable from dual;
票数 3
EN

Stack Overflow用户

发布于 2019-03-07 19:17:57

您还可以在PL/SQL中直接使用case表达式(这样可以避免在SQL引擎之间来回切换上下文):

代码语言:javascript
复制
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"
票数 1
EN

Stack Overflow用户

发布于 2019-03-08 10:27:58

我创建了一个函数,这样我就可以使用nvl2,就像它存在于plsql中一样,它也可能适合您的目的

代码语言:javascript
复制
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;

如果需要,可以重新创建它以使用不同的数据类型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55040919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档