当页导航

请教 DB2 怎么将一个字符串或全局变量当作表读取?

如 "ABC" ,select * from "ABC";   --读取abc表的内容;如:create variable cur_tab;set cur_tab = "ABC";select * from cur_tab;   --读取abc表的内容;因为要读取按时间进行分区的表,读最近半年时间的表,如11月的时候,读取a201606,a201607,a201608,a201609,a201610,a2...显示全部

如 "ABC" ,select * from "ABC";   --读取abc表的内容;

如:create variable cur_tab;

set cur_tab = "ABC";

select * from cur_tab;   --读取abc表的内容;

因为要读取按时间进行分区的表,读最近半年时间的表,如11月的时候,读取a201606,a201607,a201608,a201609,a201610,a201611, 12月的时候,读取:a201607,a201608,a201609,a201610,a201611,a201612,之前都是手工

根据时间修改脚本中的表名,现在想做成自动的,就是没办法解决 字符串 

转化为表来读取的问题,请教高手指导下????


非常感谢!

收起
希望获得:具体解决, 通用方法, 实例参考

4回答

l954368978l954368978数据库管理员 , ht
inst1songguihua165C821009263等赞同了此回答 
  • wanltwanlt(提问者)
    不好意思,还是我没描述清楚哦,比如:select * from a201612;查询结果返回数据,1,2,3,4等四条记录,我现在是想在sql脚本中表名字不写死,而是写成动态随时间变化的,如:'a'||to_char(timestamp,'YYYYMM'),然后查询这个字符串的时候同样返回1,2,3,4等四条记录,这样子随着时间的变化,查询的表也会变化,就不用每月手工修改表名字了。 不知道我描述清楚了没???
    2016-12-01
  • wanltwanlt(提问者) 回复 wanlt(提问者)
    实际数据库中表a201612中有百万条的数据,不仅仅是4条记录。
    2016-12-01
l954368978l954368978数据库管理员 , ht
  • wanltwanlt(提问者)
    你给的例子还是没有查询表aaa的数据内容,而只是将表名字读取出来了。。。。
    2016-12-01
  • l954368978l954368978(答主)
    图里面不是有结果吗?
    2016-12-01
  • wanltwanlt(提问者)
    是有结果;但我意思是读取表中记录,如表a201612中有数据,1,2,3,4...,select * from (values 'a'||to_char(current timestamp,'YYYYMM')),我想要的结果是返回1,2,3,4...而不是返回a201612。
    2016-12-01
  • l954368978l954368978(答主) 回复 wanlt(提问者)
    大哥,我是给你一个例子,变通一下就行了
    2016-12-01
  • wanltwanlt(提问者) 回复 l954368978(答主)
    不好意思,不好意思,我是个初学者,今天弄了一天也没找到方法。。。现在就是不知道怎么变通了。。。求你帮帮忙。。。非常感谢。。。。
    2016-12-01
dbliondblion数据库开发工程师 , 天阳
拼接SQL字符串,得到目标SQL。在执行目标SQL显示全部

拼接SQL字符串,得到目标SQL。

在执行目标SQL

收起
答案包含:原理分析, 通用方法 2016-12-04
kong_fanqingkong_fanqing数据库运维工程师 , 亚联信息技术有限责任公司
试试这个,把表名和月份显示出来了,其他的代码你自己增加就可以了。V_num=6while  [  $V_num  -ge  1  ];doV_a="Tab_name"V_b=`db2 -x "values varchar(to_char((current date - $V_num),'YYYYMM'),10)"`echo &nbs...显示全部

试试这个,把表名和月份显示出来了,其他的代码你自己增加就可以了。

V_num=6

while  [  $V_num  -ge  1  ];do

V_a="Tab_name"

V_b=`db2 -x "values varchar(to_char((current date - $V_num),'YYYYMM'),10)"`

echo  ${V_a}${V_b}

let  V_num=V_num-1

done

收起
答案包含:具体解决, 注意事项, 原理分析, 通用方法, 实例参考 2016-12-09

撰写回答

提问者

wanlt数据库管理员, wan
发布10
回答6

请稍候...