如题,数据量太大,所以把‘table1’按年月拆分成‘table201001’,'table1201002'...
在查询时需要根据所选时间或时间段来分别到不同的表中查询,请高手指教一下如何实现!
我用以下两种方法均不能实现
1、在ADOQuery中写入:select * from :table,然后由外部传递表名,但不支持;
2、在pl/sql 中
declare 
T varchar2(30);  
begin
T := 'table201001';
select * from  T;             
end;
也不行
还请高手指点迷津,小弟在线等待

解决方案 »

  1.   

    动态SQL
    T := 'table201001';
    execute immediate 'select * from '||T ...; 
      

  2.   

    我用过,但为什么不返回值啊?sql server中是可以的
      

  3.   

    declare  
    T varchar2(30);   
    cur_ret sys_refcursor;
    begin
    T := 'table201001';
    open cur_ret for 'select * from  ' || t;end;ORACLE中只能用游标返回
      

  4.   

    还是没有返回值。
    我在pl/sql里运行的,不会是版本问题吧
      

  5.   

    还有一个问题,我在fastreport中的ADO控件里写这部分代码时系统会自动把'T := 'table201001';'这句里的'='当做参数,删还删不了
    无语了,这可咋整
      

  6.   

    你连最基本的oracle开发还没有弄明白
    oracle pl/sql与sql是不同的
    sql是静态的东西,有客户端工具,如sql*plus,plsql developer,toad等执行,然后立马能看到结果
    但是pl/sql是数据库编程语言,实现相关逻辑的。
    一般有变量接受返回值,变量类型有很多:如基本类型,集合类型,%rowtype,cursor类型等,一时半会和你说不清楚,下面做个例子给你看看:
      

  7.   

    SQL> set serveroutput on size 100000
    SQL> 
    SQL> declare
      2  --必须定义弱类型的cursor变量做数据接收
      3   v_cur sys_refcursor;
      4   --动态传入表名,注意这个可不能使用绑定变量
      5   v_tab varchar2(100):='test';
      6   v_id number;
      7   v_name varchar2(100);
      8   begin
      9    --动态cursor,id的值用绑定变量传入
     10    open v_cur for  'select id,name from '||v_tab||' where id=:1' using 1;
     11    --现在就可以从游标中获取数据了
     12    loop
     13    fetch v_cur into v_id,v_name;
     14    exit when v_cur%notfound;
     15     dbms_output.put_line('id is '||v_id||'   ,name is '||v_name);
     16    end loop;
     17    close v_cur;
     18   end;
     19  /
     
    id is 1   ,name is aa
     
    PL/SQL procedure successfully completed
      

  8.   

    select * from :table
    这种写法是错误的,:name是绑定变量的写法,绑定变量不支持schema对象
      

  9.   

    回复 “dingjun123”,小弟新学oracle,见笑了,
    你说的那种方法在什么工具里执行的?我这报错不是“有效SQL语句”,除了游标没别的办法实现吗?这个破表中有上百个字段,用这种方法光声明变量就得写一大篇子
      

  10.   

    使用替代变量,如下面的例子,表名为替代变量:SQL> select ename,empno from &v_table;
    Enter value for v_table: scott.emp
    old   1: select ename,empno from &v_table
    new   1: select ename,empno from scott.empENAME           EMPNO
    ---------- ----------
    SMITH            7369
    ALLEN            7499
    WARD             7521
    JONES            7566
    MARTIN           7654
    BLAKE            7698
    CLARK            7782
    SCOTT            7788
    KING             7839
    TURNER           7844
    ADAMS            7876