SQLPLUS中ORA-00907缺失右括号错误排查求助
Oracle创建表时ORA-00907错误解决
问题代码
SQL> CREATE TABLE Reservation_21BAI1750( 2 PNR number(9), 3 Journey_Date Date NULL, 4 No_of_Seats INT(8) ZEROFILL CHECK (No_of_Seats < 50), 5 Address varchar2(50) NULL, 6 Contact_No number(9) UNIQUE, 7 BusNo varchar2(10), 8 Seat_No number NOT NULL 9 );
错误信息
No_of_Seats INT(8) ZEROFILL CHECK (No_of_Seats < 50),
*
ERROR at line 4:
ORA-00907: missing right parenthesis
即使移除ZEROFILL,仍会触发相同错误。
错误原因
INT(8)语法不合法:Oracle中INT是NUMBER(38)的别名,不支持通过INT(n)指定显示宽度,这种写法属于MySQL语法,Oracle需用NUMBER(n)定义数字精度。ZEROFILL属性不支持:该属性是MySQL特有功能,Oracle没有对应的存储层面语法,必须移除。
修正后的SQL语句
CREATE TABLE Reservation_21BAI1750( PNR NUMBER(9), Journey_Date DATE NULL, No_of_Seats NUMBER(8) CHECK (No_of_Seats < 50), Address VARCHAR2(50) NULL, Contact_No NUMBER(9) UNIQUE, BusNo VARCHAR2(10), Seat_No NUMBER NOT NULL );
补充:模拟ZEROFILL显示效果
若需要实现类似ZEROFILL的补零显示,可在查询时使用TO_CHAR函数处理:
SELECT TO_CHAR(No_of_Seats, 'FM00000000') AS No_of_Seats FROM Reservation_21BAI1750;
内容的提问来源于stack exchange,提问作者Manan Kumar
相关产品推荐
相关产品推荐

