不能在 sqlfiddle (oracle) 的 select 查询中使用列名
Can't use column names in select query on sqlfiddle (oracle)
我不知道是我使用 sqlfidle 不正确还是缺少功能?
重现步骤:
- Select oracle 选项(左上角)
创建table并插入数据:
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
//
构建模式
运行查询验证结果正确
select * from products
运行 使用列名(任意)查询并得到错误:
select ProductName from products
给出的错误:
ORA-00904: "PRODUCTNAME": invalid identifier
我的查询是错误的还是无法在 sqlfiddle 上使用 select 查询中的列名?我有任何解决方法来继续测试我的查询吗?
在 Oracle 中,当您使用大小写混合的名称时,必须始终在它们周围使用双引号。它假定标识符将全部大写。
因此,要访问名为 ProductName 的列,您应该 运行:
select "ProductName" from products
我看到你的列名在双引号“”之间。
当你想用特殊字符命名你的列名时,可以使用它。
所以你可以使用:
select "ProductName" from products;
[TL;DR] 永远不要在对象名称周围使用双引号,只让 oracle 以其默认方式管理区分大小写。
但是,您可以在 SQLFiddle 中使用双引号:
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
//
查询 1:
SELECT "ProductName" FROM products
| ProductName |
|-------------|
| Jarlsberg |
| Mascarpone |
| Gorgonzola |
Run query with column name (any) and get the error:
select ProductName from products
error given:
ORA-00904: "PRODUCTNAME": invalid identifier
默认情况下,Oracle 数据库区分大小写;但是,默认情况下,它们还会将所有内容都转换为大写,以便从您(用户)那里抽象出区分大小写的问题。只有当您使用双引号时,Oracle 才会使用您为标识符指定的大小写。
由于您在 CREATE TABLE
语句中使用了带引号的标识符,因此您还需要在 SELECT
语句中使用带引号的标识符,其大小写与 table 创建时使用的完全一样。
因此,列名不是 ProductName
,而是 "ProductName"
(带双引号)。
更好的解决方案是不使用双引号:
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
//
查询 1:
SELECT ProductName FROM products
| PRODUCTNAME |
|-------------|
| Jarlsberg |
| Mascarpone |
| Gorgonzola |
我不知道是我使用 sqlfidle 不正确还是缺少功能?
重现步骤:
- Select oracle 选项(左上角)
创建table并插入数据:
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 //
构建模式
运行查询验证结果正确
select * from products
运行 使用列名(任意)查询并得到错误:
select ProductName from products
给出的错误:
ORA-00904: "PRODUCTNAME": invalid identifier
我的查询是错误的还是无法在 sqlfiddle 上使用 select 查询中的列名?我有任何解决方法来继续测试我的查询吗?
在 Oracle 中,当您使用大小写混合的名称时,必须始终在它们周围使用双引号。它假定标识符将全部大写。
因此,要访问名为 ProductName 的列,您应该 运行:
select "ProductName" from products
我看到你的列名在双引号“”之间。
当你想用特殊字符命名你的列名时,可以使用它。
所以你可以使用:
select "ProductName" from products;
[TL;DR]
但是,您可以在 SQLFiddle 中使用双引号:
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
//
查询 1:
SELECT "ProductName" FROM products
| ProductName |
|-------------|
| Jarlsberg |
| Mascarpone |
| Gorgonzola |
Run query with column name (any) and get the error:
select ProductName from products
error given:
ORA-00904: "PRODUCTNAME": invalid identifier
默认情况下,Oracle 数据库区分大小写;但是,默认情况下,它们还会将所有内容都转换为大写,以便从您(用户)那里抽象出区分大小写的问题。只有当您使用双引号时,Oracle 才会使用您为标识符指定的大小写。
由于您在 CREATE TABLE
语句中使用了带引号的标识符,因此您还需要在 SELECT
语句中使用带引号的标识符,其大小写与 table 创建时使用的完全一样。
因此,列名不是 ProductName
,而是 "ProductName"
(带双引号)。
更好的解决方案是不使用双引号:
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
//
查询 1:
SELECT ProductName FROM products
| PRODUCTNAME |
|-------------|
| Jarlsberg |
| Mascarpone |
| Gorgonzola |