oracle如何在一个存储过程中创建临时表-然后插入数据-查询数据 各位大大们帮菜菜看看错在哪里_____
2个回答
展开全部
因为在编译前oracle会检查test表是否存在,如果不存在就提示无视图。
建议先重建一下这个表,每次操作前先执行drop table操作,然后在执行create table操作,这样就能通过编译。
代码如下:
CREATE OR REPLACE PROCEDURE UP_TEST(STRBEGIN VARCHAR2,
STREND VARCHAR2,
OCUR OUT SYS_REFCURSOR) IS
V_I INT;
V_J INT;
ISQL VARCHAR2(200);
DPTABLE VARCHAR2(200) := 'drop table test';
BEGIN
V_I := STRBEGIN;
V_J := STREND;
EXECUTE IMMEDIATE DPTABLE;
ISQL := 'create global temporary table test(sid int) on commit delete rows';
EXECUTE IMMEDIATE ISQL;
WHILE V_I <= V_J LOOP
INSERT INTO TEST VALUES (V_I);
END LOOP;
OPEN OCUR FOR
SELECT T.SID FROM TEST T;
END;
同时临时表就是一个缓存数据的表,在执行提交操作的时候就被清空了,没有必要每次都去新建然后删掉,他占用的存储空间很少。
建议先重建一下这个表,每次操作前先执行drop table操作,然后在执行create table操作,这样就能通过编译。
代码如下:
CREATE OR REPLACE PROCEDURE UP_TEST(STRBEGIN VARCHAR2,
STREND VARCHAR2,
OCUR OUT SYS_REFCURSOR) IS
V_I INT;
V_J INT;
ISQL VARCHAR2(200);
DPTABLE VARCHAR2(200) := 'drop table test';
BEGIN
V_I := STRBEGIN;
V_J := STREND;
EXECUTE IMMEDIATE DPTABLE;
ISQL := 'create global temporary table test(sid int) on commit delete rows';
EXECUTE IMMEDIATE ISQL;
WHILE V_I <= V_J LOOP
INSERT INTO TEST VALUES (V_I);
END LOOP;
OPEN OCUR FOR
SELECT T.SID FROM TEST T;
END;
同时临时表就是一个缓存数据的表,在执行提交操作的时候就被清空了,没有必要每次都去新建然后删掉,他占用的存储空间很少。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询