Oracle创建PAYMENT表触发ORA-00907错误 无括号或拼写问题无法定位原因
ORA-00907报错的定位与修正
ORA-00907本质是SQL语法和数据库规则不兼容触发的误导性提示,并非真的存在缺失右括号的问题——只要解析器在解析过程中遇到无法识别的语法片段,就会中断解析流程并抛出该报错。你提供的建表语句中,存在两处和Oracle语法规则不匹配的核心问题,直接触发了报错:
int(16)是MySQL的语法写法,Oracle原生INT类型不支持在类型名后追加长度参数,解析器遇到INT后续括号内的数值时无法匹配语法规则,就会抛出缺失右括号的提示。如果需要为字段限定16位的存储长度,应使用Oracle原生的number(16)写法替代。datetime不属于Oracle的可用数据类型,Oracle存储带时分秒的日期值,需使用DATE(精度到秒)或TIMESTAMP(精度到纳秒)类型,无法识别的类型名同样会打断SQL解析流程,触发ORA-00907报错。
修正后可直接运行的建表SQL
CREATE TABLE PAYMENT ( Payment_ID number(16) not null, Amount_paid varchar2(30) not null, Payment_ReceivedBy varchar2(30) not null, Payment_ReceivedFrom varchar2(30) not null, Payment_Date date not null, Card_Number varchar2(20) not null, Card_Holder_Name varchar2(30) not null, Is_CreditCard number(20), Is_DebitCard number(20), Online_Payment varchar(10), CashOnDelivery varchar(10), CONSTRAINT PaymentID_PK PRIMARY KEY (Payment_ID) );
内容的提问来源于stack exchange,提问作者whatavever2000
相关产品推荐
相关产品推荐

