无法在sqlfiddle(oracle)

时间:2017-09-18 12:44:11

标签: oracle select sqlfiddle

我不是因为我错误地使用了sqlfidle,或者这是否缺少功能?

重现的步骤:

  1. 选择oracle选项(左上角)
  2. 创建表格并插入数据:

    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
    //
    
  3. 构建架构

  4. 运行查询并验证结果是否正确

    select * from products
    
  5. 使用列名(任意)运行查询并获取错误:

    select ProductName from products
    
  6. 错误:

      

    ORA-00904:“PRODUCTNAME”:标识符无效

    我的查询是否错误或 sqlfiddle 是否可以在select查询中使用列名?我是否有任何变通方法可以继续测试我的查询?

3 个答案:

答案 0 :(得分:4)

[TL; DR] The simplest thing要做的是永远不要在对象名称周围使用双引号,只让oracle以默认方式管理区分大小写。

但是,您可以在SQLFiddle中使用双引号:

SQL Fiddle

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

<强> Results

| ProductName |
|-------------|
|   Jarlsberg |
|  Mascarpone |
|  Gorgonzola |
  
      
  1. 使用列名(任意)运行查询并获取错误:

         

    select ProductName from products

  2.         

    错误:

         
        

    ORA-00904:&#34; PRODUCTNAME&#34;:无效标识符

      

默认情况下,Oracle数据库区分大小写;但是,默认情况下,它们还会将所有内容转换为大写,以便从用户那里抽象出区分大小写。只有当您使用双引号时,Oracle才会使用您为标识符指定的大小写。

由于您在CREATE TABLE语句中使用了带引号的标识符,因此您还需要在SELECT语句中使用带引号的标识符,并使用表创建中使用的确切大小写。

因此,列名称ProductName不是"ProductName"(带双引号)。

更好的解决方案是不使用双引号:

SQL Fiddle

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

<强> Results

| PRODUCTNAME |
|-------------|
|   Jarlsberg |
|  Mascarpone |
|  Gorgonzola |

答案 1 :(得分:1)

在Oracle中使用大小写混合的名称时,必须始终使用双引号。它假设标识符都是大写的。

因此,要访问名为ProductName的列,您应该运行:

select "ProductName" from products

答案 2 :(得分:1)

我在双引号“”之间看到你的列名。

当您希望使用特殊字符授权列名时,可以使用此选项。

所以你可以使用:

select "ProductName" from products;