请高手解决个oracle存储过程的问题,源码如下

CREATEORREPLACEPROCEDUREGET_INHERITED_APPLICATIONS(VAR_APP_IDnvarchar2,VAR_INHERITED_... CREATE OR REPLACE PROCEDURE GET_INHERITED_APPLICATIONS(VAR_APP_ID nvarchar2,VAR_INHERITED_STATE INT)
AS
ROOT_LEVEL nvarchar2(32);
n int;
APP_TEMP APPLICATIONS%rowtype;
begin
n:=1;
SELECT RESOURCE_LEVEL into ROOT_LEVEL FROM APPLICATIONS WHERE ID = VAR_APP_ID;
SELECT * INTO APP_TEMP
FROM APPLICATIONS
WHERE (RESOURCE_LEVEL LIKE ROOT_LEVEL+'%'
AND bitand(INHERITED_STATE,VAR_INHERITED_STATE) = VAR_INHERITED_STATE)
OR ID = VAR_APP_ID
ORDER BY RESOURCE_LEVEL;
loop
exit when n = 0;
DELETE FROM APP_TEMP WHERE substr(RESOURCE_LEVEL,1,LENGTH(RESOURCE_LEVEL)-3) NOT IN (SELECT RESOURCE_LEVEL FROM APP_TEMP) AND RESOURCE_LEVEL <> ROOT_LEVEL;

n:=sql%rowcount;
end loop;
SELECT * FROM APP_TEMP
WHERE ID <> VAR_APP_ID;
end;

我想创建临时表,并对其做增删改查的操作,然后返回这个临时表,但是在DELETE那里总是报错说表或视图不存在,请高手指教啊!
展开
 我来答
请叫我召哥
2012-07-27 · TA获得超过792个赞
知道小有建树答主
回答量:572
采纳率:95%
帮助的人:381万
展开全部
APP_TEMP这个只是个变量,又不是表.你做DELETE当然会错 ,
你应该先考虑用动态SQL建一张临时表.
比如:
execute immediate 'create table xxx as
SELECT *
FROM APPLICATIONS
WHERE (RESOURCE_LEVEL LIKE ROOT_LEVEL+''%''
AND bitand(INHERITED_STATE,VAR_INHERITED_STATE) = VAR_INHERITED_STATE)
OR ID = VAR_APP_ID
ORDER BY RESOURCE_LEVEL';
然后在对这个表进行DELETE操作
更多追问追答
追问
哦哦 我试试 那最后那句select怎么写呢?oracle里不能直接写查询语句,那我怎么得到查询结果呢?
追答
你直接在PL/SQL上面查这个表就行了社
存储过程里面是不行的
桃太郎9U
2012-07-27
知道答主
回答量:12
采纳率:0%
帮助的人:9.6万
展开全部
SELECT * INTO APP_TEMP

要保证,插入到APP_TEMP是一个值,不能多个值呢。你这个明显不对啊,你把APP_TEMP当成一个表来用了,它只是一个变量啊,只能存一行值呢。
要保存多个值,你得学学Oracle的游标了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式