【问题标题】:Oracle sql adding auto incremented fieldOracle sql添加自动递增字段
【发布时间】:2015-11-03 05:26:29
【问题描述】:

我在 oracle 中制作了一个使用自动递增字段完整序列的表。

这里是sql:

CREATE TABLE Users(
   user_ID   INT          NOT NULL,
   user_name VARCHAR (20)     NOT NULL,
   user_password  VARCHAR (20)              NOT NULL,
   user_role  INT  NOT NULL,

   PRIMARY KEY (user_ID)
);

ALTER TABLE Users 
   ADD FOREIGN KEY (user_role) REFERENCES User_Roles (role_ID);
CREATE SEQUENCE seq_users
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;

现在我需要通过一个java程序将数据插入到表中,有什么办法,我不必像这样使用查询:

Insert into User_Roles values (seq_user_roles.nextval,'system admin');

User Role Table:
CREATE TABLE User_Roles(
       role_ID   INT              NOT NULL,
       role_name VARCHAR (20)     NOT NULL,


       PRIMARY KEY (role_ID)
);


CREATE SEQUENCE seq_user_roles
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;

我想从 java 程序中插入数据,但无法指定序列的名称。

【问题讨论】:

  • 创建一个插入前触发器类型,以便将数据填充到 role_id 中。如果您需要更多解释,我会发布一些示例代码。
  • @Tarun 感谢您的回答,它对我帮助很大,如果我在通过 java 程序执行此操作时不为字段 role_id 指定任何内容,它是否会起作用,我已经尝试过并且它不适合我

标签: java sql oracle


【解决方案1】:

创建序列后,Crete 下面的触发器。所以它会将日期填充到您的列中。并且无需在插入语句脚本中提及 role_id 列。

CREATE OR REPLACE TRIGGER TRG_User_Roles_BRI
       BEFORE INSERT
       ON User_Roles
       REFERENCING NEW AS NEW OLD AS OLD
       FOR EACH ROW
    BEGIN
       :NEW.role_ID   := seq_user_roles.NEXTVAL;
    END;

【讨论】:

    猜你喜欢
    • 2016-01-31
    • 2013-12-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2012-03-27
    • 2018-02-23
    相关资源
    最近更新 更多