1

最近,我在 Oracle 中遇到了序列问题。

alter sequence seq_name increment by 100

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

但是,如果我将其更改为

alter sequence "seq_name" increment by 100

它会工作得很好。任何人都能够解释这背后的理性吗?

谢谢塞巴斯蒂安

附言。我正在使用带有 oci8 的 rails 来创建我的 oracle 表。

4

2 回答 2

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
于 2013-09-17T05:56:41.493 回答
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

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

于 2019-02-10T06:35:28.850 回答