[TL;DR] 最简单的事 https://stackoverflow.com/a/35556194/1509264要做的就是永远不要在对象名称周围使用双引号,而只是让 Oracle 以默认方式管理区分大小写。
但是,您可以在 SQLFiddle 中使用双引号:
SQL小提琴 http://sqlfiddle.com/#!4/cbabd2/1
Oracle 11g R2 架构设置:
CREATE TABLE products
("P_Id" int, "ProductName" varchar2(10), "UnitPrice" numeric, "UnitsInStock" int, "UnitsOnOrder" int)
//
INSERT ALL
INTO products ("P_Id", "ProductName", "UnitPrice", "UnitsInStock", "UnitsOnOrder")
VALUES (1, 'Jarlsberg', 10.45, 16, 15)
INTO products ("P_Id", "ProductName", "UnitPrice", "UnitsInStock", "UnitsOnOrder")
VALUES (2, 'Mascarpone', 32.56, 23, NULL)
INTO products ("P_Id", "ProductName", "UnitPrice", "UnitsInStock", "UnitsOnOrder")
VALUES (3, 'Gorgonzola', 15.67, 9, 20)
SELECT * FROM dual
//
Query 1:
SELECT "ProductName" FROM products
Results http://sqlfiddle.com/#!4/cbabd2/1/0:
| ProductName |
|-------------|
| Jarlsberg |
| Mascarpone |
| Gorgonzola |
-
使用列名(任意)运行查询并得到错误:
select ProductName from products
给出的错误:
ORA-00904: “ProductNAME”: 无效标识符
Oracle 数据库默认区分大小写;但是,默认情况下,它们也会将所有内容转换为大写,以便从用户那里抽象出区分大小写的情况。仅当您使用双引号时,Oracle 才会使用您为标识符指定的大小写。
由于您在中使用了带引号的标识符CREATE TABLE
语句中您还需要使用带引号的标识符SELECT
语句与表创建中使用的情况完全相同。
所以,列名不是ProductName
it is "ProductName"
(带双引号)。
更好的解决方案是不使用双引号:
SQL小提琴 http://sqlfiddle.com/#!4/3e6e1f/1
Oracle 11g R2 架构设置:
CREATE TABLE products(
P_Id int,
ProductName varchar2(10),
UnitPrice numeric,
UnitsInStock int,
UnitsOnOrder int
)
//
INSERT INTO products ( P_Id, ProductName, UnitPrice, UnitsInStock, UnitsOnOrder )
SELECT 1, 'Jarlsberg', 10.45, 16, 15 FROM DUAL UNION ALL
SELECT 2, 'Mascarpone', 32.56, 23, NULL FROM DUAL UNION ALL
SELECT 3, 'Gorgonzola', 15.67, 9, 20 FROM DUAL
//
Query 1:
SELECT ProductName FROM products
Results http://sqlfiddle.com/#!4/3e6e1f/1/0:
| PRODUCTNAME |
|-------------|
| Jarlsberg |
| Mascarpone |
| Gorgonzola |