我有一个带有Oracle 11的prod框和一个名为A
的模式。出于测试目的,我需要prod数据的本地快照。数据不是很大,因此导出不是问题。我已将A
导出到一个SQL文件包中(使用DBeaver),每个表一个,内容如下:
INSERT INTO A.TABLE1 (F1, F2, F3) VALUES ('v11', 'v21', 'v31');
INSERT INTO A.TABLE1 (F1, F2, F3) VALUES ('v12', 'v22', 'v32');
等等。问题是,出于开发目的,我使用名为B
的模式,因此在进行导入时我需要这样的插入:
INSERT INTO B.TABLE1 (F1, F2, F3) VALUES ('v11', 'v21', 'v31');
INSERT INTO B.TABLE1 (F1, F2, F3) VALUES ('v12', 'v22', 'v32');
我知道我可以使用INSERT INTO A.
查找并替换所有INSERT INTO B.
,这将解决我的问题,但也许我可以为架构B
创建某种别名,这样我就可以这样做(伪代码):
CREATE ALIAS 'A' FOR SCHEMA 'B'
@TABLE1.sql
@TABLE2.sql
DELETE ALIAS 'A'
答案 0 :(得分:4)
编写完全没有模式名称的脚本。或者,如果它是由一些愚蠢的工具生成的,则编辑模式名称:)
在驱动程序脚本中,在调用插入脚本之前运行ALTER SESSION SET CURRENT_SCHEMA x
。
答案 1 :(得分:2)
您无法创建将一个架构映射到另一个架构的别名。
INSERT
语句然而,我强烈质疑使用与生产中的模式名称不同的模式名称进行开发的智慧。这大大增加了提升代码等操作的复杂性。某人(或某些工具)会无意中将模式前缀添加到查询中的表名。在将脚本从一个环境推广到另一个环境之前,您必须手动编辑脚本,并且最终会有人在提升过程中出错并更改代码的功能。