TOAD for Oracle,模式变量/ table 名称
TOAD for Oracle, variables for schema/ table names
我有一个 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 -->
谨致问候,
安德烈
或许您可以通过 creating/dropping public 同义词来解决您要比较的 table 的问题。
说你想比较 table T1 改变模式,SA,SB,SC,...
您可以定义 public 同义词,例如
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 ...
每个月您只应更新 public 同义词以引用正确的模式,而无需更改您的查询。
好吧,如果 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;
注意两点:
- 定义时可以不使用引号,变量将在解析文本之前被替换,as-is。双引号也可以正常工作,但您实际上会执行类似
select a.*, b.* from "CALC1111".TABLE_1 a left join ...
的操作
- 您必须使用双句点 (
..
),因为如果不使用空格,则使用单句点将替换变量与后续文本分隔开,因此您当前的文本将解析为 select a.*, b.* from "CALC1111"TABLE_1 a left join ...
这显然是行不通的。
我有一个 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 -->
谨致问候, 安德烈
或许您可以通过 creating/dropping public 同义词来解决您要比较的 table 的问题。
说你想比较 table T1 改变模式,SA,SB,SC,... 您可以定义 public 同义词,例如
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 ...
每个月您只应更新 public 同义词以引用正确的模式,而无需更改您的查询。
好吧,如果 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;
注意两点:
- 定义时可以不使用引号,变量将在解析文本之前被替换,as-is。双引号也可以正常工作,但您实际上会执行类似
select a.*, b.* from "CALC1111".TABLE_1 a left join ...
的操作
- 您必须使用双句点 (
..
),因为如果不使用空格,则使用单句点将替换变量与后续文本分隔开,因此您当前的文本将解析为select a.*, b.* from "CALC1111"TABLE_1 a left join ...
这显然是行不通的。