如何忽略跳过 pl/sql 查询中的空值

问题描述 投票:0回答:1

我在“ ”内有查询:

X:=NULL;
v_sql:='insert into users(id) values(NVL('||X||',NULL))';

我得到的结果是:

insert into users(id) values(NVL(,NULL))

为什么会跳过空值? 以及如何解决这个问题

plsql oracle-apex oracle
1个回答
0
投票

实际上,它并没有被跳过,而是导致串联失败而无提示。

  1. X 为 NULL。

  2. 当您执行“||”时X ||',X 的 NULL 值不被视为字符串,而是被视为缺失值。

  3. 与 NULL ('|| NULL ||') 的字符串连接会导致整个连接表达式变为 NULL。

    因此,v_sql 赋值的计算结果为 NULL,并且您会在结果中看到 NVL(,NULL)

    如果您希望当 X 为 NULL 时,文字文本 NULL 出现在 SQL 查询中,则需要显式处理此替换。例如:

    v_sql := '插入用户(id)值(NVL(' || CASE WHEN X IS NULL THEN 'NULL' ELSE X END || ', NULL))';

© www.soinside.com 2019 - 2024. All rights reserved.