добавление последовательности в существующую таблицу

#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. Если вы спрашиваете о создании процесса, то это в приложении. Конструктор, Конструктор страниц, Панель обработки.