1

我有一个带有 Oracle 11 的产品盒和一个名为A. 出于测试目的,我需要产品数据的本地快照。数据不是很大,所以导出不是问题。我已经导出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');

等等。问题是,出于开发目的,我使用名为 schema 的模式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'
4

2 回答 2

5

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

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

于 2013-03-05T06:46:03.057 回答
2

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

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

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

于 2013-03-04T19:12:36.990 回答