yoo*_*uri 0 sql oracle oracle11g
我正在尝试在Oracle SQL中创建一个自动增量的表.我有以下SQL代码:
DROP TABLE "Account" CASCADE CONSTRAINTS;
CREATE TABLE "Account" (
"Id" NUMBER(5) NOT NULL,
"Name" VARCHAR2(32) NOT NULL,
"User" VARCHAR2(16) NOT NULL,
"Email" VARCHAR2(32) NOT NULL,
"Password" VARCHAR2(16) NOT NULL,
"Level" VARCHAR2(16) NOT NULL,
CONSTRAINT "Account_pk" PRIMARY KEY ("Id")
);
DROP SEQUENCE "Account_seq";
CREATE SEQUENCE "Account_seq" START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10000;
INSERT INTO "Account" VALUES (Account_seq.NEXTVAL, 'xxx', 'xxx', 'xxx', 'xxx', 'user');
INSERT INTO "Account" VALUES (Account_seq.NEXTVAL, 'xxx', 'xxx', 'xxx', 'xxx', 'user');
Run Code Online (Sandbox Code Playgroud)
Oracle SQL Developer说创建了Account_seq,但它仍然给我一个错误:"序列不存在"......
如果您使用双引号来创建对象(并且对象名称不是全部大写),那么在您引用它的任何地方都必须使用双引号.
所以在这种情况下,这将工作(注意双引号Account_seq
):
INSERT INTO "Account" VALUES ("Account_seq".NEXTVAL, 'xxx', 'xxx', 'xxx', 'xxx', 'user');
Run Code Online (Sandbox Code Playgroud)
也就是说,到处使用双引号很烦人.相反,请考虑更改序列创建以避免使用双引号:
CREATE SEQUENCE Account_seq ...
Run Code Online (Sandbox Code Playgroud)
...这样,您可以在没有双引号的情况下引用它,并且序列名称不区分大小写.
编辑
为了澄清区分大小写部分:
当您双引号标识符时,Oracle会查找具有该确切大小写的标识符.
另一方面,如果您不使用双引号,它将查找所有大写的等效标识符.
例:
"Account_seq"
:它会寻找 Account_seq
"AcCoUnT_SeQ"
:它会寻找 AcCoUnT_SeQ
Account_seq
:它会寻找 ACCOUNT_SEQ
AcCoUnT_SeQ
:它会寻找 ACCOUNT_SEQ