我正在使用IntelliJ来创建我的应用程序和Oracle数据库。
目前,我必须将数据从较旧的数据库SCHEMA
迁移到较新的数据库。表和列更改了,我想创建一个IQBase脚本,它将在安装新应用程序版本期间在不同的服务器上运行。
所以我得到了旧SCHEMA
中的数据(我们将讨论OLD_SCHEMA
),我想要SELECT
这些数据,将它们和INSERT INTO
转换为NEW_SCHEMA
。所以我想这样写:
INSERT INTO NEW_SCHEMA.TABLE_X (........) SET (SELECT ..... FROM OLD_SCHEMA.TABLE_Y)
但是当我试图在与IntelliJ捆绑的数据库工具中执行这种查询时,我得到了一个错误的解释,即有一个不存在的表或视图。
[2016-09-06 15:22:29] [42000][942] ORA-00942: Table ou vue inexistante
这看起来很正常,因为,当我创建一个SQL控制台文件来测试我的查询时,它被链接到两个模式之一。
那么,我可以,如果我可以,如何执行我的查询来使用两个模式的数据?
谢谢。
PS: a Import, export不是解决方案,结构改变了很多。
要使用两个模式,您的USER必须在两个模式中都有权限(SELECT, INSERT等)。
对于INSERT语句使用了错误的sintax,您需要像这样使用sintax
INSERT INTO NEW_SCHEMA.TABLE_X (........) SELECT ..... FROM OLD_SCHEMA.TABLE_Y
您不能在其他模式中查询表,除非您被授予这样做的权限。如果连接到new_schema,想查询old_schema。你需要在old_schema.table_y上选择特权
连接到old_schema并授予这些权限。
grant select on table_y to new_schema;
现在你的查询应该可以工作了(没有set语句)。
请参阅此链接以获取语法示例。