【问题标题】:How use to_char in nvl()如何在 nvl() 中使用 to_char
【发布时间】:2020-06-06 09:56:37
【问题描述】:
V_MAX:=NVL(CREAR_DEPART(V_NOMB),TO_CHAR('the value is null'));

DBMS_OUTPUT.PUT_LINE(V_MAX);

函数给了我一个型号

如何使用nvl 获取varchar2 中的值?

【问题讨论】:

    标签: sql oracle plsql oracle-sqldeveloper


    【解决方案1】:

    那个字符串已经是一个......好吧,字符串,你不要to_char它。

    SQL> with test (v_nomb) as
      2    (select to_number(null) from dual)
      3  select nvl(to_char(v_nomb), 'the value is null') result
      4  from test;
    
    RESULT
    -----------------
    the value is null
    
    SQL>
    

    或者,在你的情况下,

    V_MAX := NVL(to_char(CREAR_DEPART(V_NOMB)), 'the value is null');
    

    正如您所评论的,函数返回number。或者 - 为了使用 NVL 捕获它 - 让它返回 null

    SQL> create or replace function crear_depart(par_nomb in number)
      2  return number is
      3  begin
      4    return null;
      5  end;
      6  /
    
    Function created.
    
    SQL> set serveroutput on;
    SQL> declare
      2    v_max  varchar2(20);
      3    v_nomb number := 2;
      4  begin
      5    v_max := nvl(to_char(crear_depart(v_nomb)), 'the value is null');
      6    dbms_output.put_line('v_max = ' || v_max);
      7  end;
      8  /
    v_max = the value is null
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    【讨论】:

    • ORA-06502:PL/SQL:错误:字符到数字的转换
    • 啊哈;该函数似乎返回一个数字,所以 - 它必须有 to_char,而不是 string(NVL 函数的第二个参数)。固定的;请看一下。
    • 它似乎仍然不起作用,如果我将“值为空”更改为 0 它确实有效,但我想要一个字符串
    • 我忘了说这个函数给了我一个型号
    • 好的;我创建了一个示例,其中包含一个返回数字的函数以及应该在 PL/SQL 块中使用它的方式,试图模仿您迄今为止发布的内容。它对我有用。如果这不是您所拥有的,请发布类似的测试用例(通过编辑您的问题!不是作为评论!),以便我们可以看到它的样子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2019-10-16
    • 2014-10-04
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多