使用序列插入

时间:2018-07-04 07:47:46

标签: sql oracle

我想在表中插入新行。 我想在seq_name.nextval的帮助下放置ID。 那么如何知道特定表的序列名称呢?

1 个答案:

答案 0 :(得分:0)

要使用序列生成ID,通常在表所在的架构中创建序列。

作为用户应用程序用户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 同义词,因为它们很难控制并创建各种名称空间冲突。