#oracle #constraints #oracle-apex #primary-key
Вопрос:
я создал таблицу, но я забыл добавить последовательность в один из ПК, это последовательность на странице формы, я просто не могу найти что-либо об этом, возможно ли это, или мне нужно снова создавать форму. я попытался заменить ПК, но это не дает мне возможности добавить последовательность при создании новой. я искал везде и обращался в службу поддержки в чате (на самом деле это не помогло, так как это не их работа). все, что я мог найти, было это и это.
Ответ №1:
Я бы посоветовал вам пропустить Apex в этом вопросе и сделать следующее: предположим, что это ваша таблица:
SQL> create table test
2 (id number constraint pk_test primary key,
3 name varchar2(20)
4 );
Table created.
Это последовательность:
SQL> create sequence myseq;
Sequence created.
Поскольку вы забыли указать источник PK при создании страницы формы Apex, не обращайте внимания — пусть база данных обработает это. Как? Создайте BEFORE INSERT
триггер:
SQL> create or replace trigger trg_bi_test
2 before insert on test
3 for each row
4 when (new.id is null)
5 begin
6 :new.id := myseq.nextval;
7 end trg_bi_test;
8 /
Trigger created.
Давайте проверим это: я вставляю только NAME
(что и будет делать ваша форма Apex):
SQL> insert into test (name) values ('Littlefoot');
1 row created.
Каково содержание таблицы?
SQL> select * from test;
ID NAME
---------- --------------------
1 Littlefoot
SQL>
Видишь? Активируйте автоматически вставленное значение столбца ID (первичный ключ).
Если бы это была интерактивная сетка (которая позволяет вставлять несколько записей одновременно):
SQL> insert into test (name)
2 select 'Bigfoot' from dual union all
3 select 'FAD' from dual;
2 rows created.
SQL> select * from test;
ID NAME
---------- --------------------
1 Littlefoot
2 Bigfoot
3 FAD
SQL>
Работает просто отлично.
И что еще одно преимущество: вам вообще не нужно изменять приложение Apex.
Комментарии:
1. спасибо, но я ДОЛЖЕН использовать apex, я выполнял какой-то школьный проект, и я только что узнал, что это то, что я должен был сделать пару месяцев назад, поэтому я не знаю, должен ли я начинать всю свою работу с мая. я знаю, как это сделать с помощью только sql, но я не могу найти способ сделать это через apex или если есть какой-либо другой способ
2. Если это должно быть в Apex, создайте процесс, который заполняет элемент первичного ключа значением последовательности, например
:P1_ID := myseq.nextval;
, который запускается при нажатии кнопки СОЗДАТЬ.3. спасибо, я должен сделать это в SQL WORKSHOP>SQL-СКРИПТЫ, верно?
4. Что делать? Создать триггер? Да, в «Командах»SQL Workshop. Если вы спрашиваете о создании процесса, то это в приложении. Конструктор, Конструктор страниц, Панель обработки.