当前位置:数据库 > Oracle >>

oracle如何在一个存储过程中创建临时表-然后插入数据-查询数据 各位大大们帮菜菜看看错在哪里_____

答案:因为在编译前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错误

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,