繁体   English   中英

Oracle 11g R2 Express,小写自动递增

[英]Oracle 11g R2 Express, Auto Increment in lowercase

我对小写的自动递增有疑问。 基于这个针对Oracle的自动增量问题,我能够创建自动增量,但表仍为大写字符。

我如何实际使用小写字母呢?

这是我的SQL清单:

CREATE TABLE  "myTable" 
   (    "tableID" NUMBER(*,0) primary key, 
        "tableColumn" VARCHAR2(30) 
   ) ;

CREATE SEQUENCE "tableID_SEQUENCE"
START WITH 1
INCREMENT BY 1;

CREATE OR REPLACE TRIGGER "tableID_TRIGGER"
BEFORE INSERT ON "myTable"
FOR EACH ROW
BEGIN
SELECT tableID_SEQUENCE.nextval INTO NEW.tableID FROM dual; //at this line, what changes needed to?
END;

INSERT INTO "myTable" ("tableColumn") VALUES ('ABC');

所以目前我被触发器查询卡住了:

SELECT tableID_SEQUENCE.nextval INTO NEW.tableID FROM dual; 

在Oracle数据库中,即使使用双引号,对象也不区分大小写(它们的名称)。 根据Oracle文档:

您可以使用带引号或不带引号的标识符来命名任何数据库对象。 但是,数据库名称,全局数据库名称和数据库链接名称始终不区分大小写,并以大写形式存储。 如果将此类名称指定为带引号的标识符,则引号将被忽略。

编辑:试图更精确地回答。

您需要在“ NEW”变量前面加上一个冒号,并在引号中引用对象名称(因为您使用了引号):

CREATE OR REPLACE TRIGGER "tableID_TRIGGER"
   BEFORE INSERT
   ON "myTable"
   FOR EACH ROW
BEGIN
   SELECT "tableID_SEQUENCE".NEXTVAL INTO :NEW."tableID" FROM DUAL;
END;
/

您需要使用-引号引用所有引用的名称!:

"tableID" <> tableID
"tableID" <> TABLEID
"tableID" <> tableid
"tableID" = "tableID"
 tableID  =  tableID
 tableID  =  TABLEID
 tableID  =  tableid

因此,除非您确实需要区分大小写,否则不要在对象命名中使用引号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM