发布网友 发布时间:2024-10-23 15:52
共5个回答
热心网友 时间:2024-11-11 01:51
不知道楼主的需求如何
一般没必要创建临时表,处理数据后又它drop。
存储过程中要用到的表应该会经常用到。就让它存在吧,用完用 truncate table 清理数据就可以了。
空表不会占很多资源。 我们就是这样做的。
热心网友 时间:2024-11-11 01:54
我现在和你遇到一模一样的问题,应该是你动态拼sql的时候出的问题,类似下面 sqls:='INSERT INTO temp_sc_gds_product_spec
(ID, CREATE_TIME,
SPEC_ID,
SPEC_VALUE_ID,
GOODS_ID,
PRODUCT_ID
)
VALUES
(UUID(), sysdate, ' || '''' || specId ||'''' ||','|| '''' || strIndexSubstr ||'''' ||','|| '''' || goodsId || '''' || ',' ||'''' || productId || '''' || ')';
热心网友 时间:2024-11-11 01:49
见图,直接不能回复
热心网友 时间:2024-11-11 01:48
Oracle 的临时表的 处理机制, 和 SQL Server 的不一样。
假如你的临时表的结构不是每次执行都发生变化的话
那么就是事先 通过 CREATE GLOBAL TEMPORARY TABLE 语句,把临时表建立好。
存储过程里面,就根据需要, 执行 INSERT / SELECT 之类的操作就可以了。
至于什么事情清理临时表的数据,就取决于你的临时表是 基于会话的临时表 还是 基于事务的临时表 了。
假如你的临时表的结构是每次执行都有可能发生变化的,没办法,必须动态创建的话......
这个我暂时还没学到那么透彻。
热心网友 时间:2024-11-11 01:50
create procduce test
is
isql varchar2(200);
dptable varchar2(100):='drop table test';
begin
isql:='create global temporary table test (sid int,sname varchar2(20)) on commit delete rows';
execute immediate isql; --创建临时表
insert into test values (1,'abc');
execute immediate dptable; ---删除临时表
end;
-------------------
对于oracle 临时表在存储过程中调用,我是觉得这视乎没什么意义,oracle 提供在数据库里预定义临时表,只有在调用的时候才会在临时表空间里分配空间,也就是说你可以提前在数据库里创建临时表,然后再到存储过程里直接调用临时表就行了