oracle 问题 ORA-00933: SQL 命令未正确结束 如何解决?

语句:Insert into videosource(select * from videosourcespare where VideoSourceID not in(select VideoSourceID from videosource))
补充:我在Oracle里面运行没有错误,但是在程序里面运行就报:ORA-00933: SQL 命令未正确结束 错误,怎么回事啊?
修改以后也不正确~ 增加了空格 分号 等等 还是不行啊 只能在数据库里运行 程序里还是报错 由于是个保密项目,源码不方便给出太多:
CString strSQL="Insert into videosource (select * from videosourcespare where videosourcespare.VideoSourceID not in (select VideoSourceID from videosource))";
if (!m_rs->Open(strSQL))//根据设备后备表将设备表中没有的数据插入
{
CString strtxt;
strtxt.Format("数据库操作错误,%s,语句:%s",m_rs->GetLastErrorString(),strSQL);
ErrorLog(strtxt);
return;
}

一、对于这个错误:

    首先仔细检查sql语句是否存在语法错误。

(如果确认没有错误,可以拿到sql development中去用sql工具试试)。

2.检查使用连接数据库的方法。

executeQuery、execute、executeUpdate是否存在使用错误,或者换个试试。

3.我把sql语句中的‘;‘去掉了,然后sql语句运行正常,没有报错,原因未知。

二、解决方案:

1)方案一:清空回收站(recyclebin)命令 : PURGE recyclebin;

2)方案二:收回表的命令:命令 :flashback table 原表名 to before drop;

3)方案三:直接删除表,不经过回收站:

(1)方法一: drop table 表名 purge;

(2) 方法二 :停用数据库的回收战功能; 10.1版本中,修改隐藏参数 _recyclebinalter system set "_recyclebin" = false;10.2版本中,alter system set recyclebin = off。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-22
你在程序中将这句sql打印出来,然后复制到数据库中运行看是否能成功呢。这种情况一般是一些细节的问题,比如说两个单词之间少了空格这些。
你这个videosource(select 之间好像就没空格吧。试试看。
希望我的回答对你有所帮助。本回答被网友采纳
第2个回答  推荐于2017-11-23
标准写法是:
insert into tablename values();
你加上 values试试吧.本回答被提问者采纳
第3个回答  2018-09-14
是否使用了mybatis,mybatis批量插入oracle时需要显式指定为 useGeneratedKeys="false" 不然报错~~~
第4个回答  2010-11-22
insert into table1 select * from table2 where table2id not in(select id from table3) 按照这个格式写试试
相似回答