【问题标题】:How to modify column to auto increment in PL SQL Developer?如何在 PL SQL Developer 中修改列以自动递增?
【发布时间】:2019-01-08 09:44:09
【问题描述】:

我在 PL SQL Developer 中创建了一张表。

CREATE TABLE Patient_List
(
   Patient_ID number NOT NULL,
   Patient_Name varchar(50) NOT NULL,
   Patient_Address varchar(100) NULL,
   App_Date date NULL,
   Descr varchar(50),
   CONSTRAINT patient_pk PRIMARY KEY(Patient_ID)
);

我想自动增加 P​​atient_ID,我尝试更改表并修改 Patient_ID 列,但它显示错误“无效的 ALTER TABLE 选项”

ALTER TABLE Patient_List
MODIFY Patient_ID NUMBER NOT NULL GENERATED ALWAYS AS IDENTITY;

请帮忙,在此先感谢。

【问题讨论】:

  • 您的 Oracle 版本是多少? (SELECT version FROM PRODUCT_COMPONENT_VERSION where product like 'Oracle%'; 会告诉你)
  • @a_horse_with_no_name 10.2.0.5.0
  • 标识列是在 Oracle 12.1 中引入的(即使在那里您也无法将现有列更改为标识列 - 您只能修改现有标识列或添加新的标识列身份列)
  • @a_horse_with_no_name 哦,谢谢。
  • 正如 a_horse_with_no_name 所说,除非您的版本是 12,否则您不能使用标识列。您可以创建一个 sequence 并编写 trigger 以自动插入值或从您的代码访问序列并将其设置为值到Patient_ID

标签: sql oracle oracle10g ddl identity-column


【解决方案1】:

这是不可能的。

Oracle 10g 甚至没有标识列,它们是在 Oracle 12.1 中引入的

但即使使用当前的 Oracle 版本,您也无法将常规列转换为标识列。您需要添加一个新的。

在标识列之前,通常的方法是创建一个序列和一个触发器来填充该列。

请看这里:How to create id with AUTO_INCREMENT on Oracle?

【讨论】:

    【解决方案2】:

    如果有人想将现有列修改为 auto_increment 使用这三行

    alter table Product drop column test_id;
    
    create sequence Product_test_id_seq INCREMENT BY 1 nocache;
    
    alter table Product add test_id Number default Product_test_id_seq.nextval not null;
    

    【讨论】:

      猜你喜欢
      • 2012-06-14
      • 2011-11-21
      • 2013-12-01
      • 2021-09-30
      • 2020-07-22
      • 2014-04-15
      • 2020-01-15
      • 1970-01-01
      • 2016-03-07
      相关资源
      最近更新 更多