Вы можете добавить дополнительный столбец в таблицу с ALTER TABLE
ALTER TABLE table_name
ADD( new_column_name NUMBER UNIQUE );
Вы можете создать новую последовательность, а затем создать триггер, который заполняет новый столбец, используя эту последовательность
CREATE SEQUENCE sequence_name;
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
:new.new_column_name := sequence_name.nextval;
END;
Если вы используете версию Oracle до 11g, ваш триггер должен будет сделать SELECT
из DUAL
, чтобы заполнить столбец :new.new_column_name
, а не делать прямое присвоение
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
SELECT sequence_name.nextval
INTO :new.new_column_name
FROM dual;
END;
Предположительно, вы также хотите инициализировать все существующие строки, используя значение последовательности, прежде чем начнете вставлять новые строки
UPDATE table_name
SET new_column_name = sequence_name.nextval
WHERE new_column_name IS NULL
Но, кажется, очень странно добавлять новый столбец, сгенерированный последовательностью, в существующую таблицу с составным первичным ключом, если только целью не было использование этого нового столбца в качестве первичного ключа. Смысл создания столбца, сгенерированного последовательностью, заключается в том, что у вас есть стабильный синтетический первичный ключ, который не зависит от реальных бизнес-данных. Таким образом, было бы гораздо разумнее удалить существующий первичный ключ, добавить новый столбец, заполнить данные, объявить новый столбец как новый первичный ключ, а затем определить уникальное ограничение для трех столбцов, которые составляли старый первичный ключ.