TOAD for Oracle,模式/表名的变量

时间:2015-12-30 12:38:46

标签: sql oracle toad

我有一个sql查询列表,用于比较两个模式之间的几个表。 有没有办法用模式名称定义变量?那么每个月都可以更新脚本顶部的变量?我正在寻找类似的东西:

define schema_name1="CALC1111";
define schema_name1="CALC2222";
select a.*, b.* 
from &schema_name1.TABLE_1 a left join
&schema_name2.TABLE_1 
on <-- some ON statements -->

最诚挚的问候, 安德烈

2 个答案:

答案 0 :(得分:0)

也许您可以通过为要比较的表创建/删除公共同义词来解决。

假设您想要在更改架构,SA,SB,SC,......上比较表T1 您可以定义公共同义词,如

create or replace public synonym T1_origin for SA.T1
create or replace public synonym T1_target for SB.T1

并编写您的查询,如

select a.*, b.* 
from T1_origin a left join T1_target
on ...

每个月您只需更新您的公共同义词以引用正确的模式,而无需更改您的查询。

答案 1 :(得分:0)

好吧,如果TOAD使用SQL * PLUS语法替换变量,那么你应该能够做到这一点。例如,在SQLDeveloper中,我经常运行以下脚本:

set define on;
define t_table=ENTER_TABLE_NAME_HERE;
define t_schema=MYSCHEMA;
create public synonym &t_table for &t_schema..&t_table;

注意两件事:

  • 定义时不能使用引号,变量将在解析文本之前被替换为原样。双引号也可以正常工作,但你实际上会执行select a.*, b.* from "CALC1111".TABLE_1 a left join ...
  • 之类的东西
  • 您必须使用双周期(..),因为如果没有使用空格,则使用单个句点将替换变量与以下文本分开,因此您当前的文本将被解析为{{1这显然不起作用。