如题,数据量太大,所以把‘table1’按年月拆分成‘table201001’,'table1201002'...
在查询时需要根据所选时间或时间段来分别到不同的表中查询,请高手指教一下如何实现!
我用以下两种方法均不能实现
1、在ADOQuery中写入:select * from :table,然后由外部传递表名,但不支持;
2、在pl/sql 中
declare
T varchar2(30);
begin
T := 'table201001';
select * from T;
end;
也不行
还请高手指点迷津,小弟在线等待
在查询时需要根据所选时间或时间段来分别到不同的表中查询,请高手指教一下如何实现!
我用以下两种方法均不能实现
1、在ADOQuery中写入:select * from :table,然后由外部传递表名,但不支持;
2、在pl/sql 中
declare
T varchar2(30);
begin
T := 'table201001';
select * from T;
end;
也不行
还请高手指点迷津,小弟在线等待
T := 'table201001';
execute immediate 'select * from '||T ...;
T varchar2(30);
cur_ret sys_refcursor;
begin
T := 'table201001';
open cur_ret for 'select * from ' || t;end;ORACLE中只能用游标返回
我在pl/sql里运行的,不会是版本问题吧
无语了,这可咋整
oracle pl/sql与sql是不同的
sql是静态的东西,有客户端工具,如sql*plus,plsql developer,toad等执行,然后立马能看到结果
但是pl/sql是数据库编程语言,实现相关逻辑的。
一般有变量接受返回值,变量类型有很多:如基本类型,集合类型,%rowtype,cursor类型等,一时半会和你说不清楚,下面做个例子给你看看:
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
这种写法是错误的,:name是绑定变量的写法,绑定变量不支持schema对象
你说的那种方法在什么工具里执行的?我这报错不是“有效SQL语句”,除了游标没别的办法实现吗?这个破表中有上百个字段,用这种方法光声明变量就得写一大篇子
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