Oracle SQL使用空字符串更新NOT NULL列

Joh*_*ell 4 sql oracle

我在编写SQL Update语句时遇到问题,我需要在其中使用空字符串更新非null字段。

UPDATE channel_mgmt.channels
    SET registered_address_id=p_address_id
        ,vendor_id=p_spc_code
     WHERE id=v_channel_id;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,可以将p_spc_code设置为”,并且在运行此命令时我遇到了SQL错误:

Error report:
ORA-01407: cannot update ("CHANNEL_MGMT"."CHANNELS"."VENDOR_ID") to NULL
ORA-06512: at line 8973
 01407. 00000 -  "cannot update (%s) to NULL"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

有什么想法可以解决这个问题吗?在某些情况下,我需要使用空字符串,但是我不确定为什么oracle在抱怨空值。

desc channel_mgmt.channels
Name                  Null     Type               
--------------------- -------- ------------------ 
ID                    NOT NULL NUMBER(16)         
CHANNEL_STATUS_KEY    NOT NULL VARCHAR2(64 CHAR)  
REGISTERED_ADDRESS_ID NOT NULL NUMBER(16)         
VENDOR_ID             NOT NULL VARCHAR2(64 CHAR)
Run Code Online (Sandbox Code Playgroud)

Nic*_*nov 6

如果NOT NULL在列上定义了约束,则不能通过将null零长度string('')指定为列的新值来更新表。Oracle将零长度的字符串(''分配给varchar2列或变量时)视为NULL,因此从oracle的角度来看,这两个语句与set col_name = null和相同set col_name = ''。如果要允许列接受NULLs,则需要从该列中移除不为null的约束(如果它会造成任何危害):

alter table <<table_name>> modify (<<column_name>> [<<data type>>] null)
Run Code Online (Sandbox Code Playgroud)


Wal*_*tty 5

Oracle 无法区分空字符串和空值。它对它们使用相同的标记(一个字节的零)。


vel*_*koz 4

您是否尝试过使用' '(其中包含一个空格的字符串)?如果是 varchar,我相信比较(对于大多数情况,即您没有指定比较白色字符)会按预期工作。

我的意思是' ' = ' '(单个和双空白)应该评估为true字段varchar

(我没有 Oracle 实例,所以我不能确定......)