Oracle db中的序列名称无效

时间:2013-09-17 05:43:16

标签: sql ruby-on-rails-3 oracle

最近,我在Oracle中面临序列问题。

alter sequence seq_name increment by 100

会给我一个错误“无效的序列名称”

但是,如果我将其更改为

alter sequence "seq_name" increment by 100

它会完美无缺。任何人都能够解释这背后的理性吗?

由于 塞巴斯蒂安

PS。我使用带oci8的rails来创建我的oracle表。

2 个答案:

答案 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

因为, 创建对象时(对象名称用双引号引起来),它将按原样存储/创建。没有双引号,它将是大写。