Sql Oracle数据库中的序列名称无效

Sql Oracle数据库中的序列名称无效,sql,ruby-on-rails-3,oracle,Sql,Ruby On Rails 3,Oracle,最近,我在Oracle中遇到了一个序列问题 alter sequence seq_name increment by 100 将给我一个错误“无效序列名” 但是,如果我把它改成 alter sequence "seq_name" increment by 100 它会很好地工作。有人能解释这背后的理性吗 谢谢 塞巴斯蒂安 另外,我正在使用rails和oci8来创建oracle表。您的序列是使用区分大小写的名称(使用四分之一标记)创建的,因此您只能使用严格的名称引号来引用它。如果您想引用它而不

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

alter sequence seq_name increment by 100
将给我一个错误“无效序列名”

但是,如果我把它改成

alter sequence "seq_name" increment by 100
它会很好地工作。有人能解释这背后的理性吗

谢谢 塞巴斯蒂安


另外,我正在使用rails和oci8来创建oracle表。

您的序列是使用区分大小写的名称(使用四分之一标记)创建的,因此您只能使用严格的名称引号来引用它。如果您想引用它而不出现这样的问题,只需创建不使用引号的序列即可。以下示例(表名):


序列被创建为小写。像这样:

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”

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

在创建序列时,您已创建为“序列名称”。这就是为什么它期望“同时也修改它。好吧,Oracle将所有标识符折叠为大写(根据SQL标准)除非它们是双引号。ActiveRecord将使用双引号小写名称创建所有列、表等,因此您必须到处双引号引用标识符。有什么解决方法吗?在任何情况下,是否有人知道如何在rails语句中转义双引号。我必须执行类似“select*from\“table\”的命令“它会抛出一个错误,你只需从表名中删除这个qoutes,然后从表中写入
select*from
,但我不知道这是否可行以及如何实现,因为我根本不知道ruby on rails。我想你可以发布新的问题,询问如何在这个技术中创建不区分大小写的名称。
select * from user_sequences where sequence_name='SEQ_NAME'; --No rows selected
select * from user_sequences where sequence_name='seq_name'; -- 1 row
select * from user_sequences where sequence_name='SEQ_name'; -- 1 row