执行Oracle SQL时出现ORA-00933错误,求助问题原因及解决方法
错误原因
- 核心触发
ORA-00933报错的问题是INSERT语句语法不符合Oracle规范:Oracle原生不支持单条INSERT语句后跟随多个逗号分隔的VALUES组实现批量插入,该写法是MySQL等其他数据库的语法,放到Oracle中执行会被判定为命令未正确结束。 - 额外存在两处不规范/错误写法:
points字段定义为NUMBER(3)数值类型,插入的380、280不需要加单引号包裹,虽然Oracle支持隐式类型转换不会直接报错,但属于不规范写法- SELECT语句中的
>是大于号>的HTML转义形式,直接放到SQL引擎中执行会识别失败,需要替换为原生的>符号
修正后可正常执行的SQL代码
-- 建表语句无错误,可直接执行 CREATE TABLE student ( idnumber VARCHAR2(8), firstname VARCHAR2(20), lastname VARCHAR2(20), dateofbirth DATE, address VARCHAR2(20), email VARCHAR2(20), programme VARCHAR2(5), points number(3), PRIMARY KEY (idnumber) ); -- 插入数据写法1:拆分为多条独立INSERT语句 INSERT INTO student VALUES ('D1234567', 'Student ONE', 'TWO THREE', DATE '2000-05-10', 'Thetown, the address', 'd1234567@mydit.ie', 'DT228', 380); INSERT INTO student VALUES ('D2345678', 'Student TWO', 'FOUR FIVE', DATE '2000-04-10', 'Thetown, the address', 'd2345678@mydit.ie', 'DT228', 280); -- 插入数据写法2:用Oracle原生的INSERT ALL批量插入语法 /* INSERT ALL INTO student VALUES ('D1234567', 'Student ONE', 'TWO THREE', DATE '2000-05-10', 'Thetown, the address', 'd1234567@mydit.ie', 'DT228', 380) INTO student VALUES ('D2345678', 'Student TWO', 'FOUR FIVE', DATE '2000-04-10', 'Thetown, the address', 'd2345678@mydit.ie', 'DT228', 280) SELECT 1 FROM DUAL; */ -- 查询语句修正转义符 SELECT firstname, lastname FROM student WHERE points > 300;
内容的提问来源于stack exchange,提问作者Christina .V
相关产品推荐
相关产品推荐

