Я относительно новичок в Oracle и последние несколько часов просматриваю веб-страницы и до сих пор не могу найти окончательного ответа на вопрос, который меня прослушивал.Auto increment alternatives in oracle DB
Я нахожусь на фоне программного обеспечения, и количество повторений кода, которое я делаю, создавая последовательности ИИ для каждой таблицы, расстраивает меня. Есть ли в любом случае я могу определить функцию ИИ, которая принимает имя последовательности и таблицы, чтобы я мог просто вызвать функцию в моем триггере или мне нужно жестко кодировать каждую последовательность?
Я в настоящее время есть последовательность, как это для каждого из 12 таблиц, у меня есть
CREATE OR REPLACE TRIGGER trg_site_addr
BEFORE INSERT OR UPDATE ON site_addr FOR EACH ROW
BEGIN
IF INSERTING THEN
IF :NEW.site_addr_id IS NULL THEN
SELECT seq_site_addr_id.nextval
INTO :NEW.site_addr_id
FROM sys.dual;
END IF;
END IF;
END;
В идеале я хотел бы быть в состоянии сделать следующее
CREATE OR REPLACE TRIGGER trg_site_addr
BEFORE INSERT OR UPDATE ON site_addr FOR EACH ROW
BEGIN
IF INSERTING THEN
IF :NEW.site_addr_id IS NULL THEN
-- Param 1 = sequence name, Parm 2 = table name
auto_increment(seq_site_addr_id, site_addr);
END IF;
END IF;
END;
Как бы я идти о выполнении это, любой указатель будет очень признателен.
Alex.
* EDIT * Чтобы прояснить путаницу, я хотел бы создать функцию, но я не знаю, если это возможно, чтобы встроить последовательность внутри функции и затем использовать параметры, т.е.
CREATE FUNCTION auto_increment(seq_name, table_col_id)
SELECT seq_name.nextval
INTO :NEW.table_col_id
FROM sys.dual;
END;
Таким образом, он будет динамически создавать последовательности инкремента в триггере для каждой таблицы без необходимости жесткого кодирования триггера AI на каждой таблице.
Если это невозможно, то жесткое кодирование не имеет большого значения, это был просто запрос, который у меня был.
Вы пробовали настоящую «ПОСЛЕДОВАТЕЛЬНОСТЬ»? См. Http://stackoverflow.com/questions/7681122/oracle-modify-an-existing-table-to-auto-increment-a-column и http://docs.oracle.com/cd/B28359_01/server.111. /b28286/statements_6015.htm#SQLRF01314 – admdrew
Итак, вы хотите создать что-то вроде цикла for? –
обновление вопрос реальный быстрый. – Alex