【问题标题】:Creating a sequence on an existing table - ORA-00940: invalid ALTER command在现有表上创建序列 - ORA-00940:ALTER 命令无效
【发布时间】:2017-03-05 03:41:37
【问题描述】:

我创建了一个序列,我想要一个表来使用它。序列的创建工作正常。但是,当我尝试更改表以使用序列时,我收到此错误(personInformationSequenceAlterTest):

ORA-00940: 无效的 ALTER 命令

请注意我需要使用 Java (Eclipse IDE)。

    String personInformationSequenceTest = 
              "CREATE SEQUENCE seq_person "
            + "start with 1 "
            + "increment by 1 "
            + "NOCACHE "
            + "NOCYCLE ";

    String personInformationSequenceAlterTest =
              "alter table personInformationTest "
            + "alter column personId " 
            + "set default nextval('seq_person')";

    String personInformationSequenceOwnedTest = 
            "alter sequence seq_person owned by personInformationTest.personId";

【问题讨论】:

    标签: java sql oracle alter


    【解决方案1】:

    您的 alter 语句有语法问题。

    试试这个(假设该列的数据类型是 int。相应地更改):

    alter table personInformationTest modify (personId int default seq_person.nextval);
    

    这仅适用于 Oracle 12c 及更高版本。

    对于 11g 或更低版本,您可以使用触发器。如果您不想使用触发器,可以在插入中显式使用seq_person.nextval

    insert into personInformationTest (personId, . . .)
    values (seq_person.nextval, . . .)
    

    【讨论】:

    • 我现在用的是11g,有没有办法在这种情况下不使用触发器?
    • 唯一的办法就是在你的插入语句中显式写 seq_person.nextval。
    • 非常感谢
    【解决方案2】:

    通过更改检查

    字符串 personInformationSequenceAlterTest = “更改表 personInformationTest” +“更改列personId” + "设置默认 nextval('seq_person')";

    字符串 personInformationSequenceAlterTest = “更改表 personInformationTest” + "修改列personId" + "设置默认 nextval('seq_person')";

    在 Oracle 和 MySql 中,我们使用“修改”来更改现有列。在 SQL Server/MS Access 中,使用了“Alter”。

    【讨论】:

    • 我尝试使用它,但它给了我一个 - ORA-00936: missing expression - 当我尝试运行它时
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多