在Orcale里如何建立和使用临时表?我写了一个返回数据集的存储过程,但我不知道如何在里面建立和使用临时表?CREATE OR REPLACE PROCEDURE sp_getResult(IDvalue in integer,rst out sys_refcursor) is
begin
open rst for select * from test1 where id =IDvalue;
end;
我现在现在 sp_getResult的存储过程里建立一个临时表yy(id int,test varchar2(20)) 然后把表test1里的数据用while循环一条一条读出记录然后插入到临时表yy里,最后select * from yy列出yy表里的记录,具体代码该如何写,请高手指教,谢谢
begin
open rst for select * from test1 where id =IDvalue;
end;
我现在现在 sp_getResult的存储过程里建立一个临时表yy(id int,test varchar2(20)) 然后把表test1里的数据用while循环一条一条读出记录然后插入到临时表yy里,最后select * from yy列出yy表里的记录,具体代码该如何写,请高手指教,谢谢
SQL> create global temporary table tmp_tb1(id number,name varchar2(10))
2 on commit preserve rows
3 /表已创建。SQL> ---会话行的,会话结束数据就清空
SQL> create global temporary table tmp_tb2(id number,name varchar2(10))
2 on commit delete rows
3 /表已创建。SQL> --事件型的,事件完成就清空数据
on commit preserve rows
以上建表的语句我知道,但是我把它加到存储过程里保存的时候就会出错,你放在命令行里是可以运行,但我需要的是放到存储过程里来实现呀!麻烦再帮看看,谢谢!CREATE OR REPLACE PROCEDURE sp_getResult(IDvalue in integer,rst out sys_refcursor) is
begin create global temporary table tmp_tb1(id number,name varchar2(10))
on commit preserve rows
如果存储过程里加上上面这段代码就保存不了,放在命令行是可以执行的open rst for select * from test1 where id =IDvalue;
end;
存储过程中不能直接使用DDL语句(如:create、alter等),需要转换下才能执行。
例如:
is
str varchar2(1000);
begin
str:='create global temporary table tmp_tb1(id number,name varchar2(10)) on commit preserve rows';
execute immediate str;
open rst for select * from test1 where id =IDvalue;
end;
str:='create global temporary table tmp_tb1(id number,name varchar2(10)) on commit preserve rows';
execute immediate str;这个语句我试过,但如果是用这种形式的话那在存储过程里如何应用零时表呢例如:
open rst for select * from tmp_tb1;如果我再存储过程里写入这句的话就不法保存,提示找不到此表!还有如何用循环读出零时表里的数据呢?麻烦告知谢谢?
str:='create global temporary table tmp_tb1(id number,name varchar2(10)) on commit preserve rows';
execute immediate str;这个语句我试过,但如果是用这种形式的话那在存储过程里如何应用零时表呢例如:
open rst for select * from tmp_tb1;如果我再存储过程里写入这句的话就不法保存,提示找不到此表!还有如何用循环读出零时表里的数据呢?麻烦告知谢谢?
to wkc168create global temporary table tmp_tb1(id number,name varchar2(10))
on commit preserve rows
以上建表的语句我知道,但是我把它加到存储过程里保存的时候就会出错,你放在命令行里是可以运行,但我需要的是放到存储过程里来实现呀!麻烦再帮看看,谢谢!CREATE OR REP……
execute immediate str;这个语句我试过,但如果是用这种形式的话那在存储过程里如何应用零时表呢例如:
open rst for select * from tmp_tb1;如果我再存储过程里写入这句的话就不法保存,提示找不到此表!还有如何用循环读出零时表里的数据呢?麻烦告知谢谢?
execute immediate str;这个语句我试过,但如果是用这种形式的话那在存储过程里如何应用零时表呢例如:
open rst for select * from tmp_tb1;如果我再存储过程里写入这句的话就不法保存,提示找不到此表!还有如何用循环读出零时表里的数据呢?麻烦告知谢谢?