如何查询动态的表名

[复制链接]
查看11 | 回复9 | 2007-7-4 17:27:50 | 显示全部楼层 |阅读模式
在数据库中,对一张大数据量的表进行管理的时候,是按时间粒度,每天去生成1张表,类似 table_20101115
想问下:在查询的时候能否对这样动态生成的时间维度的表,直接用sql进行查询,而不用把表名写完整?
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
用动态的方法来实现
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
用时间分区就不用动态表名了
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
怎么样个动态法?劳驾说下。谢谢。
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
目前已经是既定的模式了。
劳驾按照这种模式,如何对表名进行模糊查询呢?
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
原帖由 zhangblueant 于 2010-11-16 13:07 发表
在数据库中,对一张大数据量的表进行管理的时候,是按时间粒度,每天去生成1张表,类似 table_20101115
想问下:在查询的时候能否对这样动态生成的时间维度的表,直接用sql进行查询,而不用把表名写完整?


>>直接用sql进行查询,而不用把表名写完整?
我是新手。这句话,我不太理解??


看LZ的例子,表名应该是table_yyyymmdd
这还不够直接吗?根据日期想查什末,就查什末.这还不直接呀??


回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
SQL> create table table_20101115(a varchar(1));
表已创建。
SQL> create table table_20101116(a varchar(1));
表已创建。
SQL> create table table_20101117(a varchar(1));
表已创建。
SQL> var x varchar2(8);
SQL> exec :x:='20101115';
PL/SQL 过程已成功完成。
SQL> set serverout on
SQL> declare
2b number;
3begin
4execute immediate 'select count(*) from table_'||:x into b;
5dbms_output.put_line('table_'||:x||'行数'||b);
6end;
7/
table_20101115行数0
PL/SQL 过程已成功完成。
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
因为每天都要查,如果在做的时候每次都把表写死,这样不太灵活。
而且涉及到报表开发,报表里做的时候,不可能今天一个表名,明天一个表名,最好是一次搞定。
所以就想到对表名进行模糊查询。
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
SQL> exec :x:=to_char(sysdate,'yyyymmdd');
PL/SQL 过程已成功完成。
SQL> declare
2b number;
3begin
4execute immediate 'select count(*) from table_'||:x into b;
5dbms_output.put_line('table_'||:x||'行数'||b);
6end;
7/
table_20101116行数0
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
LZ,你可以参考一下。
CREATE OR REPLACE PROCEDURE get_table( p_name IN VARCHAR2,
p_recOUT table%ROWTYPE)
AS
v_queryVARCHAR2(50);
BEGIN
 v_query := 'SELECT *FROMtable_' ||p_name;
EXECUTE IMMEDIATEv_query RETURNING INTO p_rec;
END;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行