9

首先

我是甲骨文新手,我没有当地的甲骨文大师来帮助我。

这是我的问题/问题

我有一些 SQL 脚本必须发布到多个 Oracle 实例。脚本创建存储过程。
创建存储过程的架构不同于包含存储过程从中读取的表的架构。

在不同的实例上,包含表的架构具有不同的名称。

显然,我不想编辑脚本以使它们为不同的实例定制。

有人向我建议,解决方案可能是设置同义词。

是否可以在每个实例上为表模式定义同义词,并在我的脚本中使用同义词?

有没有其他方法可以在不每次都编辑脚本的情况下完成这项工作?

感谢您的任何帮助。

4

3 回答 3

4

是的,您可以为模式创建同义词。

select ksppinm, ksppstvl from x$ksppi a, x$ksppsv b where a.indx=b.indx and ksppinm like '%schema%synonym%'
ALTER SYSTEM SET  "_enable_schema_synonyms" = true SCOPE=SPFILE;
STARTUP FORCE
show parameter synonym

假设您已经有一个名为 ORA 的模式...

CREATE SCHEMA SYNONYM  ORASYN for ORA;   -- create synonym for schema
CREATE TABLE ORASYN.TAB1(id number(10)); -- create table in schema

更多信息在这里: http: //oracle-network.com/database/how-to-create-synonym-for-a-schema/

于 2015-08-10T16:37:53.497 回答
2

Yes, there is a hidden way to create a schema synonym.

There is a hidden parameter _enable_schema_synonyms. It's false by default , but you can set it to true and create a synonym.

于 2015-04-11T08:07:30.653 回答
2

了解 Oracle 的哪个版本会有所帮助,但从10g 开始——不,您不能为 schema 设置同义词
您可以为表创建同义词,这将允许您不在脚本中指定架构。但这意味着同义词必须在每个实例上都相同才能有任何用途......

另一种选择是将架构引用替换为变量,因此当脚本运行时会提示用户输入架构名称。我更喜欢这种方法,因为它的工作量更少。下面是一个适用于 SQLPlus 的示例:

CREATE OR REPLACE &schema1..vw_my_view AS
  SELECT *
    FROM &&schema2..some_other_table

这样做的好处是运行脚本的人对于每个变量只会被提示一次,而不是每次遇到变量时。所以要小心拼写错误:)

于 2010-09-23T16:03:22.213 回答