Hana DB不允许在可为空的字段中提供空值

问题描述 投票:0回答:1

我的shema看起来像这样:

CREATE TABLE  newsletter_status(
    identificationnumber BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 0)  NOT NULL PRIMARY KEY,
    bpid varchar(10),
    consumer varchar(4) NOT NULL,
    source varchar(10),
    vkorg varchar(4) NOT NULL,
    cryptid varchar(255) NOT NULL,
    status varchar(25),
    regDat timestamp,
    confirmDat timestamp,
    updateDat timestamp
  );

CREATE TABLE  scpnewsletter (version varchar(255));

CREATE INDEX bpid_index ON newsletter_status (bpid);
CREATE INDEX cryptid_index ON newsletter_status (cryptid);

在H2-Database中本地运行,可以很好地插入。插入一个字段,其中设置了消费者,源,vkorg,密码和状态,其他对象未设置。数据库应生成一个标识号。而H2确实

[在带有HANA DB的客户DEV环境上运行时,插入失败,说:

PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO newsletter_status (identificationnumber,bpid,consumer,source,vkorg,cryptid,status,regDat,confirmDat,updateDat) VALUES (?,?,?,?,?,?,?,?,?,?)]; SQL state [HY000]; error code [287]; SAP DBTech JDBC: [287]: cannot insert NULL or update to NULL: Not nullable "IDENTIFICATIONNUMBER" column; nested exception is com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: [287]: cannot insert NULL or update to NULL: Not nullable "IDENTIFICATIONNUMBER" column  

它不喜欢Identificationnumber为null。

进一步。如果我添加一个Identificationnumber,它对bpid表示相同的意思:

PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO newsletter_status (identificationnumber,bpid,consumer,source,vkorg,cryptid,status,regDat,confirmDat,updateDat) VALUES (?,?,?,?,?,?,?,?,?,?)]; SQL state [HY000]; error code [287]; SAP DBTech JDBC: [287]: cannot insert NULL or update to NULL: Not nullable "BPID" column; nested exception is com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: [287]: cannot insert NULL or update to NULL: Not nullable "BPID" column

bpid在shema中显然可以为null。消费领域的这种歧义混淆了。

如果同时设置了bpid和Identificationnumber,则数据库不是问题。

我想存储一个对象,该对象的两个ID都可以为null,但也希望ID号为唯一的ID。

我无法从客户那里调试DEV env。任何想法这里可能出什么问题吗?

sql database h2 hana
1个回答
0
投票

好,所以您的IDENTIFICATIONNUMBER永远不会为NULL。

基于提供的DDL,它具有NOT NULL约束,并且是单列主键,隐式使其成为NOT NULL。

如果H2允许NULL插入,那是H2错误/不兼容的行为。

关于BPID列,您似乎仍在尝试插入IDENTIFICATIONNUMBER的值,即使此值已定义为IDENTITY列。我假设,通过指定NULL作为其值,您想让HANA使用DEFAULT值(序列)。

如果是正确的,那么答案是:它不能以这种方式工作。另外:错误消息错误地将BPID命名为有问题的字段。

在HANA中的INSERT语句中使用DEFAULT值的正确方法是,将应使用DEFAULT值的列从列列表中删除。

SQL标准也可以选择使用DEFAULT关键字,但是不支持(当前,HANA 2 SPS 04)。

© www.soinside.com 2019 - 2024. All rights reserved.