答案:因为在编译前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;
同时临时表就是一个缓存数据的表,在执行提交操作的时候就被清空了,没有必要每次都去新建然后删掉,他占用的存储空间很少。
其他:这个错误是因为存储过程探查不到test这个表,在你编译的时候它是不存在的,建议在语句前加如下字符 execute immediate 'insert into test values (v_i)'; 或者你就直接建一个永久性的表(建表语句就不要写在存储过程当中了),然后每次赋值前先截断 ,这样存储过程是不会因为对象不存在而失效。
上一个:oracle 10g odbc 配置, window7 32位
下一个:运行exp备份oracle数据库提示oracle-12154错误