最近,我在Oracle中面临序列问题。
alter sequence seq_name increment by 100
会给我一个错误“无效的序列名称”
但是,如果我将其更改为
alter sequence "seq_name" increment by 100
它会完美无缺。任何人都能够解释这背后的理性吗?
由于 塞巴斯蒂安
PS。我使用带oci8的rails来创建我的oracle表。
答案 0 :(得分:2)
您的序列是使用区分大小写的名称(使用quatation标记)创建的,因此您只能使用严格的名称引用它 - 使用引号。如果你想在没有这些问题的情况下引用它,只需创建不使用引号的序列。以下示例(带表名):
SQL> create table "t1"(c int);
Table created.
SQL> select * from t1;
select * from t1
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select * from "t1";
no rows selected
SQL> select * from "T1";
select * from "T1"
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> create table t2(c int);
Table created.
SQL> select * from t2;
no rows selected
SQL> select * from T2;
no rows selected
SQL> select * from "t2";
select * from "t2"
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select * from "T2"; -- name without quatation marks is uppercase by default
no rows selected
答案 1 :(得分:0)
序列被创建为小写。像这样:
CREATE SEQUENCE "seq_name" MINVALUE 1 MAXVALUE 999999999999999 INCREMENT BY 2 START WITH 1 CACHE 20 NOCYCLE NOKEEP NOSCALE GLOBAL ;
示例:
select * from user_sequences where sequence_name='SEQ_NAME'; --No rows selected
select * from user_sequences where sequence_name='seq_name'; -- 1 row
如果您创建的名称是:“ SEQ_name”。
select * from user_sequences where sequence_name='SEQ_name'; -- 1 row
因为, 创建对象时(对象名称用双引号引起来),它将按原样存储/创建。没有双引号,它将是大写。