oracle 如何在SQL DEVELOPER中设置表中主键的自动增量?

ecfdbz9o  于 2022-11-22  发布在  Oracle
关注(0)|答案(4)|浏览(212)

我 一直 试图 设置 一 个 " w _ no " 自动 增量 , 就 像 我们 在 MySQL 中 做 的 那样 , 但 它 一直 在 给 错误 。
我们 如何 在 sql developer 中 设置 自动 增量 ? 我们 可以 通过 代码 来 做 还是 必须 做 其他 事情 ?
Here is the code 的 最 大 值

CREATE TABLE ward (
      w_no      INT PRIMARY KEY AUTO_INCREMENT,
      wname     VARCHAR(30),
      w_loc     VARCHAR(30),
      phone_no  NUMERIC(10, 0),
      sno       INT
);

/*alter table ward ;*/  /*Can we do auto_increment using alter table here*/

中 的 每 一 个

rekjcdws

rekjcdws1#

不要使用VARCHAR,使用VARCHAR2
此外,如果需要帮助,请尝试CREATE TABLE对话框。
我们将为您创建表、PK、序列和触发器。
或者,如果您使用的是12c或更高版本的数据库,则可以使用IDENTITY子句。

然后点击向导的DDL页面,我们会给你看代码,这样你就不用猜这个对话框在做什么了。

CREATE TABLE TABLE1 
(
  COLUMN1 INTEGER NOT NULL 
, COLUMN2 VARCHAR2(20) 
, COLUMN3 VARCHAR2(20) 
, CONSTRAINT TABLE1_PK PRIMARY KEY 
  (
    COLUMN1 
  )
  ENABLE 
);

CREATE SEQUENCE TABLE1_SEQ;

CREATE TRIGGER TABLE1_TRG 
BEFORE INSERT ON TABLE1 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF INSERTING AND :NEW.COLUMN1 IS NULL THEN
      SELECT TABLE1_SEQ.NEXTVAL INTO :NEW.COLUMN1 FROM SYS.DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/
nszi6y05

nszi6y052#

我认为Oracle直到12c才引入IDENTITY数据类型。在这种情况下,您应该使用SEQUENCE对象来代替IDENTITY类型的缺失。

vom3gejh

vom3gejh3#

由于您的Oracle数据库版本为11g,因此您需要使用SEQUENCE对象来递增主键。有关CREATE SEQUENCE的信息,请参阅文档。
您可以在插入数据时引用序列号。或者,您可以使用sequence.NEXTVAL创建TRIGGER来递增表中的值。
12c版本开始,Oracle引入了IDENTITY列,这些列可用作:

NUMBER GENERATED ALWAYS AS IDENTITY

另请注意,请避免使用VARCHAR,因为Oracle强烈建议使用VARCHAR2来存储可变长度的字符串。

wqsoz72f

wqsoz72f4#

如果 你 遇到 这个 主题 , 我 想 对 以前 的 回复 做 一些 补充 。
您 不 需要 创建 一 个 额外 的 trigger 来 与 主键 关联 , 但 首先 应该 创建 序列 。

CREATE SEQUENCE some_schema_name.your_sequence_name
START WITH 1
INCREMENT BY 1;

中 的 每 一 个
之后 , 您 所 要 做 的 就是 在 创建 表 时 将 此 序列 赋 给 PK 字段 。

CREATE TABLE some_schema_name.my_table (
ID NUMBER(8) default "some_schema_name"."your_sequence_name".nextval PRIMARY KEY NOT NULL
NAME NVARCHAR2(200)
);

格式

相关问题