首先

我是Oracle Newbie,我没有当地的Oracle Guru来帮助我。

这是我的问题

我有一些SQL脚本,必须将其发布到许多Oracle实例。脚本创建存储过程。
创建存储过程的模式与包含存储过程读取的表的模式不同。

在不同的情况下,包含表格的模式具有不同的名称。

显然,我不想编辑脚本以使它们定制不同的情况。

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

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

是否还有其他方法可以在不每次编辑脚本的情况下进行此工作?

感谢您的任何帮助。

有帮助吗?

解决方案

知道什么版本的oracle,但是 从10G开始 - 不,您无法制作模式的同义词.
您可以为表创建同义词,这将允许您在脚本中指定架构。但这意味着同义词在每个实例上都必须相同。

另一个选项是用变量替换架构引用,因此,当脚本运行时,将提示用户为架构名称。我更喜欢这种方法,因为它的工作较少。这是一个可以在sqlplus中起作用的示例:

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

这样做的是,每个变量只会提示运行脚本的人一次,而不是每次遇到变量时。因此,请注意错别字:)

其他提示

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

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-to-create-synonynynynynonynonynynonynynyn-for-a-schema/

是的,有一种隐藏的方法来创建模式同义词。

有一个隐藏的参数 _enable_schema_synonyms. 。默认情况下它是错误的,但是您可以将其设置为true并创建同义词。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top