Oracle 10g。导入数据时为架构创建别名

时间:2013-03-04 19:05:55

标签: sql oracle plsql oracle10g dbeaver

我有一个带有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'

2 个答案:

答案 0 :(得分:4)

编写完全没有模式名称的脚本。或者,如果它是由一些愚蠢的工具生成的,则编辑模式名称:)

在驱动程序脚本中,在调用插入脚本之前运行ALTER SESSION SET CURRENT_SCHEMA x

答案 1 :(得分:2)

您无法创建将一个架构映射到另一个架构的别名。

  • 您可能会导致生成脚本的工具完全省略模式名称。然后,您可以在任何您想要的模式中运行INSERT语句
  • 您可以使用其他工具。例如,Oracle导出和导入实用程序(经典或DataPump)具有允许您从一个模式映射到另一个模式的参数。

然而,我强烈质疑使用与生产中的模式名称不同的模式名称进行开发的智慧。这大大增加了提升代码等操作的复杂性。某人(或某些工具)会无意中将模式前缀添加到查询中的表名。在将脚本从一个环境推广到另一个环境之前,您必须手动编辑脚本,并且最终会有人在提升过程中出错并更改代码的功能。