我在编写 SQL 更新语句时遇到问题,我需要用空字符串更新非空字段。
UPDATE channel_mgmt.channels
SET registered_address_id=p_address_id
,vendor_id=p_spc_code
WHERE id=v_channel_id;
在这种情况下,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:
有什么想法可以解决这个问题吗?在某些情况下我需要使用空字符串,但我不确定 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)
最佳答案
如果有 NOT NULL
在列上定义的约束不能通过指定 null
更新表或零长度字符串( ''
)作为列的新值。 Oracle 将零长度字符串(当分配给 ''
列或变量时 varchar2
)视为 NULL
,所以从oracle的角度来看,这两条语句是一样的set col_name = null
和 set col_name = ''
.如果您想允许某列接受 NULL
如果它会造成任何伤害,您需要从该列中删除非空约束:
alter table <<table_name>> modify (<<column_name>> [<<data type>>] null)
关于sql - Oracle SQL 使用空字符串更新 NOT NULL 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211419/