CREATE TABLE abc@gmail.com(..)

时间:2010-09-10 23:24:09

标签: sql oracle

如何在Oracle中创建名为abc@gmail.com的表

我尝试过CREATE TABLE abc@gmail.com(..)

但是这给了我错误所以我正在寻找其他方法来做到这一点

6 个答案:

答案 0 :(得分:4)

或者:

  1. 在表名周围加上双引号:

    CREATE TABLE "abc@gmail.com" ...
    
  2. 请勿在表名中添加特殊字符。

  3. 如果您选择选项2,数据库的未来用户将非常感谢您。

答案 1 :(得分:3)

我认为将<{1}}字符放在表名中是一种不好的方式

我认为每个电子邮件用户创建每个表都不是一个好方法。可能您有大数据库设计问题,并且您试图找到不存在的解决方案。

考虑数据库@.,表格emails每个用户在其他列中都有usersunique ID以及username。在domain列上您创建了索引,然后您可以找到一些内容并在其他表中添加用户实例关系

答案 2 :(得分:2)

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

  

ORA-00903:表名无效

     

原因:A   表或群集名称无效或   不存在。这条消息也是   如果群集名称无效,则发出   没有指定群集名称   ALTER CLUSTER或DROP CLUSTER   声明。

     

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

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

答案 3 :(得分:1)

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

CREATE TABLE "abc@gmail.com"(a int);

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

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

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

SELECT * FROM    "╚╦╩╗";

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

答案 4 :(得分:0)

桌子多么奇怪的名字。

我无权访问Oracle实例以找出您获得的错误,但它将参考下面的第三点:

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

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

考虑一下您将要存储在表中的内容,并且应该为您提供更合适的表名。

答案 5 :(得分:0)

如果必须,您可以随时将表格命名为“abc_at_gmail.com”并继续使用。

我认为at-sign意味着Oracle中的“链接到另一个数据库”。你在保存电子邮件地址方面很不幸。

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