CREATE TABLE Customer ( CustomerMobileNumber CHAR(10), CustomerName&Address VARCHAR(255) )
据我所知,语法是正确的,我已经尝试过VARCHAR2,但它也不工作。有人知道怎么处理这个吗?我相信这是一个简单的修复
bprjcwpo1#
正如你被告知(在评论中),这不是关于数据类型-尽管Oracle建议我们使用varchar2而不是varchar-它是关于无效的列名,因为它包含&字符,所以Oracle * 假定 * 你试图在这里放置数据类型:
varchar2
varchar
&
SQL> CREATE TABLE Customer 2 ( 3 CustomerMobileNumber CHAR (10), 4 CustomerName&Address VARCHAR2 (255) 5 ); CustomerName&Address VARCHAR2 (255) * ERROR at line 4: ORA-00902: invalid datatype
一个选项--这是你真正应该使用的--是规范化表。把名字和地址放在同一栏里很可能是一个错误的选择。另一种方法是重命名列,使其只使用有效字符。请注意,Oracle在这方面不区分大小写,因此尽管您使用混合字母大小写,但列名将存储在数据字典中,因此您宁愿使用下划线来分隔单词。
SQL> CREATE TABLE Customer 2 ( 3 CustomerMobileNumber CHAR (10), 4 CustomerNameAddress VARCHAR2 (255) 5 ); Table created. SQL> desc customer Name Null? Type ----------------------------------------- -------- ---------------------------- CUSTOMERMOBILENUMBER CHAR(10) CUSTOMERNAMEADDRESS VARCHAR2(255)
vs.
SQL> CREATE TABLE Customer 2 ( 3 Customer_Mobile_Number CHAR (10), 4 Customer_Name_and_Address VARCHAR2 (255) 5 ); Table created. SQL> desc customer Name Null? Type ----------------------------------------- -------- ---------------------------- CUSTOMER_MOBILE_NUMBER CHAR(10) CUSTOMER_NAME_AND_ADDRESS VARCHAR2(255) SQL>
还有一种选择是将名称括在双引号中(这是另一个坏主意,因为每次引用该表时都必须使用双引号并匹配字母大小写)。此外,如果您运气不好,并且工具要求您提供替代变量的值(因为您使用了&,所以可以识别),则会得到
SQL> CREATE TABLE Customer 2 ( 3 CustomerMobileNumber CHAR (10), 4 "CustomerName&Address" VARCHAR2 (255) 5 ); Enter value for address: old 4: "CustomerName&Address" VARCHAR2 (255) new 4: "CustomerName" VARCHAR2 (255) Table created. SQL> desc customer Name Null? Type ----------------------------------------- -------- ---------------------------- CUSTOMERMOBILENUMBER CHAR(10) CustomerName VARCHAR2(255)
所以你会
SQL> set define off SQL> CREATE TABLE Customer 2 ( 3 "CustomerMobileNumber" CHAR (10), 4 "CustomerName&Address" VARCHAR2 (255) 5 ); Table created. SQL> desc customer Name Null? Type ----------------------------------------- -------- ---------------------------- CustomerMobileNumber CHAR(10) CustomerName&Address VARCHAR2(255) SQL>
现在你有各种各样的选择,选择你认为最合适的。
1条答案
按热度按时间bprjcwpo1#
正如你被告知(在评论中),这不是关于数据类型-尽管Oracle建议我们使用
varchar2
而不是varchar
-它是关于无效的列名,因为它包含&
字符,所以Oracle * 假定 * 你试图在这里放置数据类型:一个选项--这是你真正应该使用的--是规范化表。把名字和地址放在同一栏里很可能是一个错误的选择。
另一种方法是重命名列,使其只使用有效字符。请注意,Oracle在这方面不区分大小写,因此尽管您使用混合字母大小写,但列名将存储在数据字典中,因此您宁愿使用下划线来分隔单词。
vs.
还有一种选择是将名称括在双引号中(这是另一个坏主意,因为每次引用该表时都必须使用双引号并匹配字母大小写)。此外,如果您运气不好,并且工具要求您提供替代变量的值(因为您使用了
&
,所以可以识别),则会得到所以你会
现在你有各种各样的选择,选择你认为最合适的。