PL\SQL varchar2 变量为 null

PL\SQL varchar2 variable with null

我在 SQL Developer 中有一个查询,变量 (varchar2) 中有一条记录是 JOYABCD。 使用记事本++查看它是这样写的:JOYnulABCD。所以实际上 JOY 和 ABCD 之间有一个空字符。

在 PL\SQL 中有没有办法摆脱这个 nul? 我尝试了以下内容: regexp_replace(name_variable, '\0', NULL)

但是 R 说:不允许使用 nul 字符

为什么,R这么说?在 slq 中它起作用并消除了 nul 字符..

谢谢, 安德里亚

如果字符串 str 包含 chr(0)nul 字符),您可以像这样从字符串中删除它:

replace(str, chr(0))

这将是同一个字符串,每次出现的 chr(0) 都会从中删除。

演示

这里我在 with 子句中创建了一个字符串 str,但在现实生活中它应该是您的变量或列名。然后,我 "replace" chr(0) 使用正则表达式(如您所见,它什么都不做),并使用标准 REPLACE。我使用 DUMP 函数来显示字符串中的实际字符。正如您将看到的,对于原始字符串和正则表达式结果,第四个字符是 nul(值 0),但是当我使用标准 Oracle 函数 REPLACE(不是基于正则表达式)时,0 被删除).

with inputs as ( select 'JOY' || chr(0) || 'ABC' as str from dual )
select dump(str)                         as dump_str,
       dump(regexp_replace(str, chr(0))) as dump_after_regexp_replace,
       dump(replace(str, chr(0)))        as dump_after_replace
from   inputs
;

DUMP_STR                         DUMP_AFTER_REGEXP_REPLACE        DUMP_AFTER_REPLACE           
-------------------------------- -------------------------------- ------------------------------
Typ=1 Len=7: 74,79,89,0,65,66,67 Typ=1 Len=7: 74,79,89,0,65,66,67 Typ=1 Len=6: 74,79,89,65,66,67