Использование последовательности для вставки - PullRequest
0 голосов
/ 04 июля 2018

Я хочу вставить новую строку в мою таблицу. Там я хочу поставить идентификатор с помощью seq_name.nextval. Итак, как узнать имя последовательности для этой конкретной таблицы?

1 Ответ

0 голосов
/ 05 июля 2018

Чтобы использовать последовательность для генерации идентификаторов, вы обычно создаете ее в схеме, где находится таблица.

Как пользователь приложения пользователя GEM_APP:

CREATE TABLE my_table (id NUMBER, col1 ...);
CREATE SEQUENCE my_seq;

Сам пользователь приложения (и, например, его хранимые процедуры) может напрямую использовать последовательность:

INSERT INTO my_table (id, col1) VALUES (my_seq.nextval, 'bla');

Однако другим пользователям нужны правильные привилегии. Обычно вы предоставляете права выбора для последовательности тем же пользователям или ролям, которым вы предоставляете права на вставку для таблицы:

GRANT SELECT, INSERT ON my_table TO user_xy;
GRANT SELECT ON my_seq TO user_xy;

Тогда другой пользователь может вставить данные в таблицу, но должен указать схему:

INSERT INTO gem_app.my_table(id, col1) VALUES (gem_app.my_seq.nextval, 'bla');

Вы можете создавать псевдонимы, чтобы скрыть схемы, некоторым людям они нравятся, другим нет, но я бы определенно не рекомендовал использовать синонимы PUBLIC , поскольку их трудно контролировать и создавать всевозможные конфликты пространства имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...