我有大约20个语句来创建表。每年数据都会发生变化。如何在Oracle的SQL窗口顶部声明一个变量,并在每个create语句中使用它。
Declare
new_yr number(5) := 2015;
BEGIN
create table my_table as
select new_yr as yr,
t.index,
t.xcode,
.........
.........
......
from acccounts t
Join persons a on a.new_yr=(new_yr-t.new_yr)
group by t.index,
t.xcode;
该代码似乎无法运作。
答案 0 :(得分:0)
您可以通过创建动态CTAS
脚本并发出EXECUTE IMMEDIATE
声明来执行此操作。
P.S。不确定您是否将所有表格加入到表格PERSONS
中,因此只需根据需要进行修改。
Declare
new_yr_var varchar2(100) := 2015;
cursor tbl_names
is
select owner
, Table_name
from dba_tables
where table_name in ('your_table_names_here');
sql_statement := varchar2(4000);
BEGIN
for c1 in tbl_names loop;
sql_statement := 'CREATE TABLE '||C1.owner||'.'||C1.Table_name||'_'||new_yr_var||' AS ';
sql_statement := sql_statement||'SELECT COLUMNS_HERE FROM'||C1.owner||'.'||C1.Table_name||'Join persons a on a.new_yr=(new_yr-t.new_yr) ';
sql_statement := sql_statement||'group by t.index, t.xcode';
EXECUTE IMMEDIATE (sql_statement);
end loop;
END;