【问题标题】:Cannot insert a null value but cannot insert a value since it is the primary key oracle不能插入空值但不能插入值,因为它是主键 oracle
【发布时间】:2015-03-15 10:53:27
【问题描述】:

我不能将值插入主键,也不能将其留空。为什么? 这是在oracle中创建表的sql

        CREATE TABLE users(
          id numeric(4),
          username varchar2(10) NOT NULL,
          password varchar2(100) NOT NULL,
          CONSTRAINT users_pk PRIMARY KEY(id)
        );

这也是在表中插入值的sql:

        insert into users (username, password) values ('jonaii', MD5('porter'));

【问题讨论】:

    标签: sql oracle oracle11g insert key


    【解决方案1】:

    主键必须有值。这是主键的特性。

    在 12c 中,Oracle 终于添加了 auto-generation of synthetic keys,但由于您仍在使用早期版本,因此您需要使用显式序列:

    create sequence user_id_seq;
    

    有用于配置序列的选项:find out more

    然后

     insert into users (id, username, password) 
         values 
     (user_id_seq.nextval, 'jonaii', MD5('porter'));
    

    或者,您可以在 BEFORE INSERT 上定义一个触发器来处理序列分配。


    "但是 MD5 在 oracle 中不起作用"

    哈希算法在两个包中实现,DBMS_CRYPTO 和较旧的(已弃用)DBMS_OBFUSCATION_TOOLKIT。您可能需要让 DBA 授予对这些包的执行权限。

    【讨论】:

    • 非常感谢!但是 MD5 在 oracle 中不起作用。你能帮我解决其他问题吗?
    • @Jonaii,“MD5 不起作用”是什么意思?你试过什么?
    猜你喜欢
    • 2023-03-10
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2020-02-28
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多