首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle SQL使用空字符串更新非空列

Oracle SQL使用空字符串更新非空列
EN

Stack Overflow用户
提问于 2013-10-07 00:57:34
回答 4查看 20.1K关注 0票数 5

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

代码语言:javascript
运行
复制
UPDATE channel_mgmt.channels
    SET registered_address_id=p_address_id
        ,vendor_id=p_spc_code
     WHERE id=v_channel_id;

在本例中,SQL,可以设置为'',当我运行以下命令时,会遇到p_spc_code错误:

代码语言:javascript
运行
复制
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会抱怨空值。

代码语言:javascript
运行
复制
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)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-07 03:06:28

你有没有试过使用' ' (字符串中有一个空格)?如果是varchar,那么我相信比较(在大多数情况下,也就是你没有指定比较白色字符)会按预期工作。

我的意思是,对于varchar字段,' ' = ' ' (单空格和双空格)的计算结果应该是true

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

票数 4
EN

Stack Overflow用户

发布于 2013-10-07 01:10:30

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

票数 5
EN

Stack Overflow用户

发布于 2013-10-07 15:09:22

如果您有一个非NULL列,并且要将其更新为NULL,那么您可能需要考虑应用程序中的逻辑。否则,您可以定义nvl(列,some_pattern),例如‘?’(当然,取决于列的长度)对于未知的空数据,当您知道不允许插入/更新NULL时。

然后,您需要检查某些内容以查看是否有行为不正确,或者在视图或其他内容中过滤这三个问号并再次将其显示为NULL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19211419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档