2010-09-10 177 views
1

如何在Oracle中我试图做CREATE TABLE [email protected][email protected]CREATE TABLE [email protected](..)

(..)

创建表但这给了我错误,所以我一直在寻找其他方式

+11

您确定为每个电子邮件地址创建表格是解决您问题的最佳解决方案吗?这听起来像个坏主意。 – roufamatic 2010-09-10 23:26:41

+4

**请不要这样做,它会让你的代码的其余部分变得丑陋。**注意,如果你这样做,当使用表格时,你将不得不双引号名称,并且表格名称可能是区分大小写。 'select * from“[email protected]”'。 'select * from abc @ gmail.com'将不起作用,从'[email protected]'中选择*可能不起作用。另请注意,对于Oracle,通常'@'表示链接的服务器。所以这会令人困惑。 – 2010-09-10 23:31:30

+1

你会从这张表中选择什么,因为你会有一个特定于多个实体的表。 – RobertPitt 2010-09-10 23:32:05

回答

3

我认为是一个不好的方法@.字符为名字的表。

我认为不是每个电子邮件用户创建每个表的方法。大概你有大数据库设计问题,你试图找到它不存在的解决方案。

想想数据库emails,表users有每个用户都有unique IDusernamedomain在另一列。在ID列中你已经创建了索引,那么你有一些东西需要在其他表中找到并添加关系的用户实例。

1

要在标识符中使用非标准字符,您可以使用双引号进行分隔。

CREATE TABLE "[email protected]"(a int); 

注:一些关于这个问题的讨论让我想起了simple talk article的。我刚刚测试过,这在Oracle中也是可行的。

CREATE TABLE "╚╦╩╗" ("└┬┴┐" nvarchar2(10)); 

INSERT INTO "╚╦╩╗" VALUES ('└┬┴┐'); 

SELECT * FROM "╚╦╩╗"; 

注意我并不是说任何人都会这样做。

+0

你其实是建议他这样做?你应该感到羞耻,你有19K ... – RobertPitt 2010-09-10 23:30:36

+3

@罗伯特 - 我不建议他以任何方式。我们对这个问题的动机一无所知,其他答案已经包含了警告的角度。 – 2010-09-10 23:31:45

+1

罗伯特,他有什么不同,他需要一个解决方案,我厌倦了这里的人与“你为什么要这样做”的回应。你不知道他为什么要这样做,或者他想要在大局中完成什么,只要帮助他一下,而不是一个无可奈何的人。 – 2010-09-10 23:32:50

4

或者:在你的表名

  1. 把双引号:

    CREATE TABLE "[email protected]" ... 
    
  2. 不要把特殊字符在你的表名。

数据库的未来用户会感谢你大汗如果您选择选项2

+0

你实际上建议他这样做? – RobertPitt 2010-09-10 23:29:56

+4

他问了这个问题。我回答了这个问题。这就是Stack Overflow的作用。我也给了他一些建议,但并没有真正回答他的问题,但他提出了一个更好的答案,因为它提到了最佳实践并避免了未来的问题。 – CanSpice 2010-09-10 23:31:05

+0

我们认为找到适合您的编程问题的**答案应该像落入成功的坑一样容易......您可能在技术上是正确的,但我们都知道这是一个糟糕的主意。 – RobertPitt 2010-09-10 23:35:12

2

http://ora-903.ora-code.com/

ORA-00903:无效的表名

原因: 表或集群名称无效或 不存在。这个消息也是,如果一个无效的群集名称或 在 ALTER CLUSTER或DROP CLUSTER 语句中指定集群名称出具 。

措施:检查拼写。 A 有效表名或集群名称必须以字母开头,并且可能只包含 字母数字字符和 特殊字符$,_和#。 名称必须小于或等于30 个字符,并且不能是保留的 字。

Martin和CanSpice已经指出它在技术上是可行的,但是,是的......你要求这种方法有很多麻烦。为什么(地球上)你会首先在一个电子邮件地址后列出一个表格?我会着迷于知道。

0

表格的奇怪名称。

我没有访问Oracle实例,找出你得到它的错误,但会参考下面的第三点:

  • 表名称必须以字母开头。
  • 表名不能超过30个字符。
  • 表名必须由字母数字字符或以下特殊字符组成:$,_和#。
  • 表名不能是保留字。

该电子邮件地址看起来应该是表中,作为数据。

想想你要存储在表中,并应该给你一个更合适的表名称。

0

如果必须的话,你总是可以命名表“abc_at_gmail.com”并继续。

我相信at-sign的意思是“链接到另一个数据库”在Oracle中。保存电子邮件地址的运气不佳。

如果你真的需要多个电子邮件地址,你为什么不创建一个用户表,并有多行,每个电子邮件地址之一,使E-mail地址表上的唯一索引?你的设计理念必须打破一些规范化规则。

相关问题