gpt4 book ai didi

oracle - 在 Oracle 中使用 CREATE 命令在双引号内包含列名无法正常工作。为什么?

转载 作者:行者123 更新时间:2023-12-03 23:26:53 24 4
gpt4 key购买 nike

让我们考虑一个简单的表说 products在 Oracle 中(我在 Oracle 9i 上试过)。我正在使用以下 CREATE 语句创建此表。

CREATE TABLE products

("prod_id" varchar2(7) primary key, "product_name" varchar2(30) NOT NULL);

需要特别指出的是,我将列名括在双引号中 ""我们通常不会这样做。它显然可以工作, products将使用具有指定 CONSTRAINTS 的那两列创建表。

现在,让我们使用以下 INSERT INTO 命令向该表中插入一些行。
INSERT INTO products VALUES('P0001', 'Nokia-N97');
INSERT INTO products VALUES('P0002', 'Nokia-1208');
INSERT INTO products VALUES('P0003', 'Nokia-1115');

将三行插入 products table 。

为了确保这些行确实插入与否,我们可以发出如下的 SELECT 语句。
SELECT * FROM products;

可以正常工作并显示我们插入的三行。

现在,真正的问题在这里。当我们发出以下 SELECT 语句时,
SELECT prod_id, product_name FROM products;

即使我们在这个 SQL 中没有犯任何错误,也不会工作。 Oracle 会改为报告此类列不存在。为什么会发生这种情况?我想这背后一定有非常具体的原因。

我确信将列名不必要地用双引号括起来,就像我刚刚所做的那样可能不是最佳实践,但只是我想到了一个问题。

最佳答案

与普遍看法相反,Oracle 在列名和表名中区分大小写。默认情况下,它只是将所有内容都转换为大写。

但是,如果您在双引号中使用名称,则您告诉 Oracle 以您提供的确切拼写(在 CREATE 语句中为小写)创建列。

由于在 SELECT语句,您不使用引号,名称被转换为大写,因此不等于 CREATE 中的小写名称。陈述。

所以这应该有效:

SELECT "prod_id", "product_name" FROM products;

如果您不知道列名或表名是如何指定的,您可以在数据字典中查找。您会发现 product 的小写列名表,但是大写的表名,因为它没有被引用。

关于oracle - 在 Oracle 中使用 CREATE 命令在双引号内包含列名无法正常工作。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8628412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com