Oracle SQL Developer跨库迁移数据报错ORA-00936求助
解决ORA-00936: missing expression错误的方案
你碰到的这个错误根源很明确——INSERT语句的语法用错了!当你通过SELECT子查询批量导入数据时,根本不需要加VALUES关键字,这就是导致Oracle报"缺少表达式"的原因。
为什么会出错?
VALUES关键字是用来插入单行常量值的,比如这种写法是合法的:
INSERT INTO my_table (col1, col2) VALUES ('a', 123);
但如果你要从另一个表(甚至跨库的表)查询数据插入,直接把SELECT语句接在列列表后面就可以,完全不需要VALUES来画蛇添足。
修正后的正确SQL
把你原来的语句去掉VALUES即可,同时别忘了Oracle跨库访问的前提:你需要先创建数据库链接(DB_LINK),所以<SOURCE_DB>和<DESTINATION_DB>其实是你创建的数据库链接名称(如果是同一数据库下的不同用户,那就是用户名)。修正后的代码如下:
INSERT INTO <DESTINATION_DB>.<TABLE_NAME> (COLUMN1, COLUMN2) SELECT COLUMN1, COLUMN2 FROM <SOURCE_DB>.<TABLE_NAME> WHERE <CONDITION>;
额外注意事项
- 确认你有访问源表的
SELECT权限,以及插入目标表的INSERT权限; - 确保源表和目标表的列数据类型完全匹配,避免出现隐式转换错误;
- 如果是跨库操作,先检查数据库链接是否正常可用,可以用
SELECT * FROM DBA_DB_LINKS查看已创建的链接。
内容的提问来源于stack exchange,提问作者Rakesh Narang
相关产品推荐
相关产品推荐

