Один из вариантов - установить столбец идентификатора (в Apex) как «не требуется» и заполнить его в базе данных, используя триггер базы данных. Обычно это последовательность, которая делает это.
Сначала найдите текущее значение MAX идентификатора как
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;
Или, если ваша версия базы данных достаточно высока (12 c и выше), вы можете использовать идентификатор столбец. К сожалению, вы не можете изменить таблицу и изменить существующий столбец идентификатора в столбце идентификатора. Если вы можете себе это позволить, создайте новый столбец для использования в качестве идентификатора.
SQL> alter table test add new_id number
2 generated always as identity
3 start with 7655;
Table altered.
К сожалению, вы не можете установить для него "старые" значения идентификатора:
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
, тогда просто отбросьте столбец старого идентификатора и переименуйте новый столбец в его «старое» имя:
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>