我使用IntelliJ创建我的应用程序和Oracle数据库。
目前,我必须将数据从较旧的数据库SCHEMA
迁移到较新的数据库SCHEMA
。表和列已更改,我想创建一个IQBase脚本,该脚本将在安装新应用程序版本期间在不同的服务器上运行。
所以我有了旧OLD_SCHEMA
中的数据(我们将讨论SELECT
),我希望INSERT INTO
这些数据,转换它们并NEW_SCHEMA
{ {1}}。所以我想做类似的事情:
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:导入,导出不是解决方案,结构发生了很大变化。
答案 0 :(得分:2)
要使用两个模式,您的USER必须在两个模式中授予(在SELECT,INSERT等上)。
你也使用错误的sintax for INSERT语句,你需要像这样使用sintax
INSERT INTO NEW_SCHEMA.TABLE_X (........) SELECT ..... FROM OLD_SCHEMA.TABLE_Y
答案 1 :(得分:1)
您无法查询其他架构中的表,除非您有权这样做。如果您连接到new_schema并想要查询old_schema.table_y,则需要在old_schema.table_y上选择权限。
为此,请连接到old_schema并授予这些权限。
grant select on table_y to new_schema;
现在您的查询应该有效(没有set语句)。
有关语法示例,请参阅此链接。 Oracle insert from select into table with more columns