INSERT..Oracle中的SELECT始终失败,并带有“QUOTE”;SQL命令未正确结束";

INSERT..Oracle中的SELECT始终失败,并带有“QUOTE”;SQL命令未正确结束";,oracle,sqlfiddle,Oracle,Sqlfiddle,我精通SQL Server和其他形式的SQL,但我正在努力学习Oracle SQL。由于某种原因,我甚至无法将最简单的插入。。选择..工作,它总是会失败,并显示“SQL命令未正确结束” 以下是我目前的例子: CREATE TABLE table1 (year INT, id INT, dat DATE, categ VARCHAR(99)); INSERT INTO table1 (year, id, dat, categ) select year, id, dat, categ from t

我精通SQL Server和其他形式的SQL,但我正在努力学习Oracle SQL。由于某种原因,我甚至无法将最简单的
插入。。选择..
工作,它总是会失败,并显示“SQL命令未正确结束”

以下是我目前的例子:

CREATE TABLE table1 (year INT, id INT, dat DATE, categ VARCHAR(99));

INSERT INTO table1
(year, id, dat, categ)
select year, id, dat, categ from table1 where id=5000 and year=2013;
这里有一把小提琴:

我似乎不知道这里出了什么问题。我在SO网站上查了十几个其他相关问题,在谷歌上查了十几个,但所有答案要么不适用,要么不起作用。我也尝试过上面一百万种不同的命令,但似乎没有任何效果

非常感谢您的帮助


FWIW,我现在认为这只是一个SQLFiddle问题,正如许多人所主张的那样

向我报告代码问题的Oracle用户,当然是在使用完整的SQL语句,在我将其剥离以尝试隔离问题之前。该查询有一个完全不同的问题,恰好在SQLFIDLE中报告了相同的错误。具体地说,它的问题是我使用了
作为表别名,这在Oracle中显然是无效的(或者,可能只是在我编写的查询中)

无论如何,衷心感谢所有试图帮助我的人。

这是可行的,也就是说,如果您在SQLFIDLE的左侧(模式)窗口中粘贴这两条语句。我认为SQL Fiddle根本不允许在SQL窗口中选择
insert..select


这是可行的,也就是说,如果您在SQLFIDLE的左侧(模式)窗口中粘贴这两条语句。我认为SQL Fiddle根本不允许在SQL窗口中选择
insert..select

我不知道您为什么会遇到这个问题,但语法没有问题

我想这就是你在fiddle上执行查询的方式,我只是在schema build部分更改了执行流程并移动了Insert语句,然后整个过程在不更改单词的情况下运行良好(但我插入了一些示例数据以显示确切的工作情况)


请看此

我不知道您为什么会面临此问题,但语法没有问题

我想这就是你在fiddle上执行查询的方式,我只是在schema build部分更改了执行流程并移动了Insert语句,然后整个过程在不更改单词的情况下运行良好(但我插入了一些示例数据以显示确切的工作情况)



请参阅此生成“缺少表达式”错误的

@Linger。您使用哪个工具运行该脚本?Oracle XE(Express)的web界面不允许您作为脚本运行多个语句。如果您正在使用XE web界面(在浏览器中),您最好立即转储该界面,并使用适当的GUI客户端(例如SQL Developer或任何其他,甚至SQL*Plus都会更好)。不幸的是,我自己没有Oracle,我现在必须使用SQLFiddle,所以我不确定如何回答这个问题。SQLFiddle工具似乎允许DDL和多个DML用于我尝试过的所有其他情况。(我欢迎任何便宜的方式让Oracle出现在我的桌面上,这是a'la SQL Server的开发者版)。在SQLDeveloper(从Oracle中释放IDE)中,将其放入SQL工作表并点击F5(运行脚本)。这不是Oracle的一般问题(您的脚本在我的SQL客户机中工作正常)。如果您使用左侧面板中的insert:@Linger生成“Missing Expression”错误,它在SQLFIDLE中也可以工作。您使用哪个工具运行该脚本?Oracle XE(Express)的web界面不允许您作为脚本运行多个语句。如果您正在使用XE web界面(在浏览器中),您最好立即转储该界面,并使用适当的GUI客户端(例如SQL Developer或任何其他,甚至SQL*Plus都会更好)。不幸的是,我自己没有Oracle,我现在必须使用SQLFiddle,所以我不确定如何回答这个问题。SQLFiddle工具似乎允许DDL和多个DML用于我尝试过的所有其他情况。(我欢迎任何便宜的方式让Oracle出现在我的桌面上,这是a'la SQL Server的开发者版)。在SQLDeveloper(从Oracle中释放IDE)中,将其放入SQL工作表并点击F5(运行脚本)。这不是Oracle的一般问题(您的脚本在我的SQL客户机中工作正常)。如果您在左侧的面板中使用insert,它在SQLFIDLE中也可以工作:这只会产生更多错误:第一个错误后是“缺少或无效选项”,第二个错误后是“缺少表达式”。您的SQLFIDLE在构建架构窗口中拥有所有内容,因此它从不执行insert。.在运行SQL窗口中选择。确定后通过更改“语句终止符”,清除了
创建表
上的“缺少或无效选项”错误“SQLFiddle上的下拉选项。但是,当我尝试在RunSQL窗口中执行您的
INSERT
时,原始错误仍然存在。在这方面,您可以选择并将数据插入同一个表中。这只会生成更多错误:第一个之后是“缺少或无效选项”,第二个之后是“缺少表达式”。您的SQLfiddle在构建架构窗口中拥有所有内容,因此,它从不在运行SQL窗口中执行INSERT..SELECT。好的,通过更改SQLFIDLE上的“语句终止符”下拉选项,清除了
创建表
上的“缺少或无效选项”错误。但是,当我尝试在RunSQL窗口中执行
INSERT
时,原始错误仍然存在。在这一点上,可以选择数据并将其插入到同一个表中。SQLFIDLE允许在SQL窗口中插入数据<代码>插入..值(..)
工作正常。和
INSERT..SELECT..
适用于SQLFiddle中的其他DBMS。和“;”是在我的示例的两个SQLFiddle窗口中选择的分隔符。尽管如此:语句在左窗口中工作,而在右窗口中失败,即使没有分号。@rbaryyoung
CREATE TABLE table1 (year INT, id INT, dat DATE, categ VARCHAR(99))
//

INSERT INTO table1 (year, id, dat, categ)
SELECT year, id, dat, categ 
FROM table1 
WHERE id = 5000 AND year=2013
//
CREATE TABLE table1 (year INT, id INT, dat DATE, categ VARCHAR(99))
/

INSERT INTO table1
(year, id, dat, categ)
select year, id, dat, categ from table1 where id=5000 and year=2013