任务:获取table_for_view.lst中的一行(每行格式为schame.table_prefix),抓出符合schame.table_prefix[四位后缀]模式的所有的表清单,构建一个视图,即,写出创建视图的语句。例如:
create or replace view schame_view.table_prefix_all as
select * from schame.table_prefix0001
union
select * from schame.table_prefix0002
union
select * from schame.table_prefix0002
对于第一个以后的都需要加上”union“,因此需要再第二重循环里面加以区分。最后跑成功的脚本是这样的(它的思路是通过环境变量标志第一次出现,它的问题是,打开命令行窗口后再运行一遍就是错误的):
@echo off
for /f "tokens=1,2* delims=." %%a in (list\table_for_view.lst) do (
java -jar TableListRetrieve.jar -env gpEnv.ini -schema %%a -table %%b____ -tablist list\%%b.forview.lst
echo create or replace view schema_view.%%b_all as
for /f "tokens=1,2* delims=." %%x in (list\%%b.forview.lst) do if not defined schema_view.%%b_all (
echo select * from %%x.%%y && set schema_view.%%b_all=a
) else (
echo union select * from %%x.%%y
)
)
不知道这个为什么不行(循环内部set /a count=0总是不起作用,并且后面的set /a count+=1也没有效果,结果是count的值没有变化):
@echo off
set /a num=0
for /f "tokens=1,2* delims=." %%a in (list\table_for_view.lst) do (
set /a count=0
java -jar TableListRetrieve.jar -env gpEnv.ini -schema %%a -table %%b____ -tablist list\%%b.forview.lst
echo create or replace view schema_view.%%b_all as
for /f "tokens=1,2* delims=." %%x in (list\%%b.forview.lst) do if %count% EQU %num% (
echo select * from %%x.%%y
set /a count+=1
) else (
echo union select * from %%x.%%y
set /a count+=1
)
)