首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle null和唯一约束

Oracle null和唯一约束
EN

Stack Overflow用户
提问于 2011-05-02 17:34:50
回答 1查看 10.9K关注 0票数 1

唯一约束是否包括null约束?

有一种情况是,一个属性cellPhone可以是NULL,但不能重复,所以我给出了两个约束:“null”和"unique",如果用户没有在字段中输入值,那么就可以更新记录,因此它会做出以下例外:

代码语言:javascript
复制
 SEVERE: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TEST1.OSQS_PARENTS_CELLPHONE_UK) violated

UPDATE的情况下,我该怎么办?

编辑这里是表ddl的定义

代码语言:javascript
复制
CREATE TABLE "TEST1"."OSQS_PARENTS" 
(   "PARENT_NO" NUMBER(38,0), 
"PARENT_NAME" VARCHAR2(4000 BYTE), 
"PARENT_ID" NUMBER(38,0), 
"PARENT_EMAIL" VARCHAR2(30 BYTE), 
"PARENT_CELLPHONE" NUMBER(38,0)
)

下面是约束的图像

以下是更新语句

代码语言:javascript
复制
    Parent aParent;      //is an object I pass through a function
String SQlUpdate = "UPDATE OSQS_PARENTS P SET P.PARENT_ID=?,P.PARENT_EMAIL=?,P.PARENT_CELLPHONE=?"
            + " where P.PARENT_NO=?";
    PreparedStatement pstmt = null;
    try {
        pstmt = con.prepareStatement(SQlUpdate);
        pstmt.setLong(1, aParent.getId());
        pstmt.setString(2, aParent.getEmail());
        pstmt.setLong(3, aParent.getCellPhoneNo());
        pstmt.setLong(4, parentNo);

        pstmt.executeUpdate();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-02 18:23:40

听起来是这样的:

cellPhone必须是唯一的。当用户不输入值时,将其标记为0。因此,当您尝试将多个0值插入“唯一”列时,它将失败。

我认为您需要删除列上的NULL约束(允许它是唯一的,是的,但允许NULL)。

然后,当用户没有输入任何值时,使用它作为一个no值(未知=空<> 0-0是一个已知值)。

在语句中抛出一个IF,如果值为您拥有的,则将其设置为空!\

代码语言:javascript
复制
pstmt.setNull(3, java.sql.Types.INTEGER);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5860388

复制
相关文章

相似问题

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