请问这样的动态SQL怎样实现?

cyberhui 2006-01-23 06:31:50
在一个存储过程pro_test里,有一个以字符串格式输入的参数,格式为‘YYYY-MM' .
其中要访问一张按分区建立的大表A,共有十二个分区,每一个月为一个分区,分区名从f_month1至f_month12。我想根据输入的参数决定选择访问哪个分区。例如。用户运行exec pro_test('2005-12');时则要访问 select * from A partition (f_month12).如果用户运行exec pro_test('2006-01');则要访问select * from A partion (f_month1);该如何实现?
年底了,就差这件事没搞定了,各位帮帮忙,谢谢啦!!
...全文
139 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aimcy 2006-01-24
  • 打赏
  • 举报
回复
楼上的有道理
rolandzhang 2006-01-24
  • 打赏
  • 举报
回复
olony的方法改造一下:
--传入参数:ymin
v_str varchar(250);
v_str := "select * from A partion (f_month"+
select substr(ymin,-2) case '01' then 1
case '02' then 2
......
case '12' then 12
end case
+");"

execute immediate v_str;



cyberhui 2006-01-23
  • 打赏
  • 举报
回复
TO olony(PCpig):分区表名有些是2位的月份,有些是1位的月份。如f_month1,和f_month11.所以您提供的方法还不可取,况且 值是从参数传进来的
olony 2006-01-23
  • 打赏
  • 举报
回复
比较本的方法是用case语句,这个我们当然不能用了!然后就是动态语句,最简单的方式就是
v_str varchar(250);
v_str := "select * from A partion (f_month"+substr('2006-01',-2)+");"

execute immediate v_str;

if sqlcode then ...

当然了你还可以用dbms_sql包来处理。。。。

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧