29

是否可以创建一个列名包含空格的表?如果是这样,我该如何创建和使用它?

4

6 回答 6

41

这是可能的,但不建议这样做。您需要用双引号将列名括起来。

create table my_table ("MY COLUMN" number);

但请注意文档中的警告:

注意:Oracle 不建议对数据库对象名称使用带引号的标识符。SQL*Plus 接受这些带引号的标识符,但在使用其他管理数据库对象的工具时它们可能无效。

该名称将区分大小写,并且每次引用该名称时都必须将其括在双引号中:

select "MY COLUMN" from my_table;

所以......不要,这将是我的建议......

于 2012-12-10T09:28:11.013 回答
5

是的,这是可能的。您只需要确保引用列名。例如:

CREATE TABLE Fubar ("Foo Bar" INT);
INSERT INTO Fubar VALUES (1337);
SELECT "Foo Bar" FROM SpaceMonster

尽管有可能,但这并不是一个好主意。如果只是用下划线替换所有空格,您可能会避免很多痛苦。

于 2012-12-10T09:27:42.120 回答
3

可以通过命名两个" 示例之间的列: "My columN" ,列名区分大小写,这意味着。

SELECT "my column" from table; --NOT OK
SELECT "My columN" from table; --OK
于 2012-12-10T09:28:54.943 回答
2

如果您适当地引用这些内容,您可以(参见Oracle 文档)。但是我怀疑这不是一个好主意,因为您必须引用所有内容。通常 db 命名标准/约定(例如herehere)倾向于使用下划线(不需要引用)而不是空格。

于 2012-12-10T09:27:34.367 回答
0

你谷歌了吗?我做到了 - 第 6 个链接是this,我在其中找到以下内容:

create table employee (
   "First Name" varchar2(20),
   "Last Name" varchar2(20),
   Address varchar2(60),
   Phone varchar2(15),
   Salary number,
   EmpID number,
   DeptID number
); 

...当我在 10g 中尝试时效果很好。

于 2012-12-10T09:28:27.923 回答
-1

这是为 oracle 定义的列规则

列(用于表格)

  1. 所有列的格式为 {alias}_{colname}。例如 prs_id、prs_name、prs_adr_id、adr_street_name。这保证了列名在模式中是唯一的,但来自另一个表的非规范化列除外,这些列使用触发器或应用程序逻辑填充。
    1. 所有列都是单数。如果您认为您需要一个列名的复数形式,请三思它是否是正确的设计?通常这意味着您在同一列中包含多个值,应该避免这种情况。
    2. 所有表都有 {alias}_id 形式的代理主键列,它是表中的第一列。例如,prs_id、mat_id、adr_id。

您始终可以使用“”为列名 bu 设置别名

于 2012-12-10T09:27:38.423 回答