Oracle不接受VARCHAR

xkftehaa  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(118)
CREATE TABLE Customer
(
    CustomerMobileNumber CHAR(10),
    CustomerName&Address VARCHAR(255)
)

据我所知,语法是正确的,我已经尝试过VARCHAR2,但它也不工作。有人知道怎么处理这个吗?我相信这是一个简单的修复

bprjcwpo

bprjcwpo1#

正如你被告知(在评论中),这不是关于数据类型-尽管Oracle建议我们使用varchar2而不是varchar-它是关于无效的列名,因为它包含&字符,所以Oracle * 假定 * 你试图在这里放置数据类型:

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>

现在你有各种各样的选择,选择你认为最合适的。

相关问题