ORA-01400: 无法将 NULL 插入 ( "EnvironmentName" 。"Project name" ."ID" ) 在 ORACLE APEX 中



我"从文件"(xls(创建了一个应用程序,项目创建成功,我可以看到行。原始表显然没有在 APEX 上创建应用程序时自动添加的"ID"。我正在尝试添加一个新行,但它没有给我"ID"的文本字段,所以当我把所有数据都放在一个新行时,它会抱怨这条消息。如何使 ID 自动添加?或者任何其他方法可以停止收到此错误?

一种选择是将 ID 列(在 Apex 中(设置为"不需要",并使用数据库触发器将其填充到数据库中。通常,它是一个执行此操作的序列。

首先,查找 ID 的当前最大值为

SQL> select * From test;
ID ENAME
---------- ----------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
SQL> select max(id) from test;
MAX(ID)
----------
7654

序列应从 7655 开始:

SQL> create sequence seq_test_id start with 7655;
Sequence created.

触发:

SQL> create or replace trigger trg_bi_test
2    before insert on test
3    for each row
4  begin
5    :new.id := seq_test_id.nextval;
6  end;
7  /
Trigger created.

测试

SQL> insert into test (ename) values ('Littlefoot');
1 row created.
SQL> select * from test;
ID ENAME
---------- ----------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7655 Littlefoot
6 rows selected.
SQL>

由于它适用于SQL*Plus,因此它也可以从Apex工作。


另一种选择是在 Apex 中创建一个进程,这将执行以下操作:

:P1_ID := seq_test_id.nextval;

或者,如果数据库版本足够高(12c 及更高版本(,则可以使用标识列。遗憾的是,您无法更改表并将现有 ID 列修改为标识列。如果负担得起,请创建一个要用作 ID 的新列。

SQL> alter table test add new_id number
2    generated always as identity
3    start with 7655;
Table altered.

很遗憾,您无法将其设置为"旧"ID 值:

SQL> update test set new_id = id;
update test set new_id = id
*
ERROR at line 1:
ORA-32796: cannot update a generated always identity column

因此,如果这对您没问题:

SQL> select * From test;
ID ENAME      NEW_ID
---------- ------ ----------
7369 SMITH        7655
7499 ALLEN        7656
7521 WARD         7657
7566 JONES        7658
7654 MARTIN       7659

然后只需删除旧 ID 列并将新列重命名为其"旧"名称:

SQL> alter table test drop column id;
Table altered.
SQL> alter table test rename column new_id to id;
Table altered.
SQL> select * from test;
ENAME          ID
------ ----------
SMITH        7655
ALLEN        7656
WARD         7657
JONES        7658
MARTIN       7659
SQL>

最新更新