create or replace function FN_1
return integer is
Result integer;
begin
CREATE GLOBAL TEMPORARY TABLE AR_TEMPTAB --这何这里报错,不能创建临时表
(
CUSPN VARCHAR2(50)
)ON COMMIT PRESERVE ROWS;
insert AR_TEMPTAB(CUSPN)values('1');
Result := 1;
return(Result);
end FN_1;
return integer is
Result integer;
begin
CREATE GLOBAL TEMPORARY TABLE AR_TEMPTAB --这何这里报错,不能创建临时表
(
CUSPN VARCHAR2(50)
)ON COMMIT PRESERVE ROWS;
insert AR_TEMPTAB(CUSPN)values('1');
Result := 1;
return(Result);
end FN_1;
2 return integer
3 authid current_user
4 as
5 str varchar2(1000);
6 Result integer;
7 begin
8 str:='CREATE GLOBAL TEMPORARY TABLE AR_TEMPTAB ';
9 str:=str||'(CUSPN VARCHAR2(50))ON COMMIT PRESERVE ROWS';
10 execute immediate str;
11 str:='insert into AR_TEMPTAB(CUSPN) values(:v)';
12 execute immediate str using '1';
13 Result := 1;
14 return(Result);
15* end FN_1;
SQL> /函数已创建。SQL> declare
2 n integer default 100;
3 begin
4 n:=FN_1;
5 dbms_output.put_line('n='||n);
6 end;
7 /
n=1PL/SQL 过程已成功完成。
-----------------------------------
虽然可以这么用,但从性能上考虑建议楼主不要用动态sql,
另,最好不要把临时表单独建好后,在函数里调用。
SQL Server中的临时表也是一样, 只是存在于tempdb库中,不过把表名起了一个永不重复的别名.