Oracle执行建表SQL报缺少右括号错误但实际无缺失该如何处理?
错误原因
- Oracle 数据库的
INT类型为NUMBER类型的别名,不支持在类型后通过括号指定长度,你代码中所有INT(1)、INT(4)的写法不符合Oracle语法要求,因此触发ORA-00907: missing right parenthesis报错,并非实际遗漏右括号。 - 可选优化:Oracle 官方推荐使用
VARCHAR2替代VARCHAR存储可变长字符串,避免后续版本的兼容性问题。
修正后可正常执行的建表脚本
create table driver ( d_id NUMBER(1), d_name VARCHAR2(45), d_contact CHAR(10), constraint driver_d_id_PK Primary Key(d_id) ); create table limo ( l_id NUMBER(1), l_callsign VARCHAR2(45), l_type VARCHAR2(45), constraint limo_l_id_PK Primary key(l_id) ); create table clients ( c_id NUMBER(1), c_name VARCHAR2(45), c_contact CHAR(10), c_methpmt VARCHAR2(25), constraint clients_c_id_PK Primary key(c_id) ); create table qualify ( q_id NUMBER(1), q_l_id NUMBER(1), q_d_id NUMBER(1), constraint qualify_q_id_PK Primary key(q_id), constraint qualify_q_l_id_FK Foreign key(q_l_id) references LIMO(l_id), constraint qualify_q_d_id_FK Foreign key(q_d_id) references DRIVER(d_id) ); create table rental ( r_id NUMBER(1), r_date DATE, r_fee NUMBER(4), r_c_id NUMBER(1), r_q_id NUMBER(1), constraint rental_r_id_PK Primary key(r_id), constraint rental_r_c_id_FK Foreign key(r_c_id) references CLIENTS(c_id), constraint rental_r_q_id_FK Foreign key(r_q_id) references QUALIFY(q_id) );
如果你不需要限制数值的精度,直接将INT(1)替换为INT也可以正常运行。
内容的提问来源于stack exchange,提问作者Taylor Renee Chaisson
相关产品推荐
相关产品推荐

