Oracle Apex. SQL Workshop. ORA-01400:无法将NULL插入

63lcw9qa  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(131)

Oracle Database 23 c免费版- VirtualBox Appliance for Developers
使用Apex对象浏览器创建了两个表。第一个表-table 1(id,name)。我从预先准备好的集合中插入行到一个表中。
在此之后,如果我尝试通过Apex对象浏览器插入一行,则会得到ORA-01400: cannot insert NULL into table1.id.
我决定我的顺序错了,于是运行了这个命令

ALTER TABLE table1 MODIFY id GENERATED BY DEFAULT AS IDENTITY (START WITH LIMIT VALUE);

字符串
但这并没有解决问题。我得到了ORA-01400: cannot insert NULL into table1.id.
我用INSERT INTO table1 (name) VALUES ('test')命令插入了一行。该行已被添加,ID具有正确的值(如下)。
如果我尝试通过 Apex Object Browser 插入一行,我又得到ORA-01400: cannot insert NULL into table1.id.
在第二个表中,我可以通过Apex对象浏览器插入一行,没有任何问题。
我该怎么做才能解决这个问题?

vsdwdz23

vsdwdz231#

在标识列定义中使用“on null”子句
第一个月
你会发现APEX正在构造一个以null作为值的insert语句,因为没有为该列定义任何东西。
使用一个进程来获取序列值也可以,但我认为这会更清晰。

kulphzqa

kulphzqa2#

无法将现有列更改为标识列。您发布的ALTER TABLE语句将重置现有标识列,使其从下一个可用值开始。它不会将该列修改为标识列,并且会引发错误。
相反:重命名现有列、添加新标识列、使用现有列值更新标识列、更改标识列以从下一个可用值开始。

koen 19c >CREATE TABLE tab1 ( id    NUMBER NOT NULL ,value VARCHAR2(10) NOT NULL );

Table TAB1 created.

koen 19c >INSERT INTO tab1 ( id ,value ) VALUES ( 1 ,'foo' );

1 row inserted.

koen 19c >ALTER TABLE tab1 RENAME COLUMN id TO id_old;

Table TAB1 altered.

koen 19c >ALTER TABLE tab1 ADD id NUMBER
  2*    GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 );

Table TAB1 altered.

koen 19c >UPDATE tab1 SET id = id_old;

1 row updated.

koen 19c >ALTER TABLE tab1 MODIFY id GENERATED BY DEFAULT AS IDENTITY ( START WITH LIMIT VALUE );

Table TAB1 altered.

koen 19c >ALTER TABLE tab1 DROP COLUMN id_old;

Table TAB1 altered.

koen 19c >INSERT INTO tab1 ( value ) VALUES ( 'bar' );

1 row inserted.

koen 19c >select * from tab1;

VALUE       ID 
________ _____ 
foo          1 
bar          2 

koen 19c >

字符串
但是.因为这是测试,只需删除测试表并使用标识列重新创建它,这要快得多。

相关问题