最近,我在 Oracle 中遇到了序列问题。
alter sequence seq_name increment by 100
会给我一个错误“无效的序列名称”
但是,如果我将其更改为
alter sequence "seq_name" increment by 100
它会工作得很好。任何人都能够解释这背后的理性吗?
谢谢塞巴斯蒂安
附言。我正在使用带有 oci8 的 rails 来创建我的 oracle 表。
最近,我在 Oracle 中遇到了序列问题。
alter sequence seq_name increment by 100
会给我一个错误“无效的序列名称”
但是,如果我将其更改为
alter sequence "seq_name" increment by 100
它会工作得很好。任何人都能够解释这背后的理性吗?
谢谢塞巴斯蒂安
附言。我正在使用带有 oci8 的 rails 来创建我的 oracle 表。
您的序列是使用区分大小写的名称(使用 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
序列被创建为小写。像这样:
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
因为,当您创建一个对象(对象名称用双引号括起来)时,它将按原样存储/创建。如果没有双引号,它将是大写的。