我想在表中插入新行。
我想在seq_name.nextval
的帮助下放置ID。
那么如何知道特定表的序列名称呢?
答案 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 同义词,因为它们很难控制并创建各种名称空间冲突。