数据库查询,游标。

1把test1中,价格高于2000,产地是中国,杭州的产品信息,放到新建表test1_temp中,2并且要求test1中的category替换成test2中的catego... 1把test1中,价格高于2000,产地是中国,杭州的产品信息,放到新建表test1_temp中,
2并且要求test1中的category替换成test2中的categoryname,
3最后商品价格高于2000的下调5%

麻烦高手,帮我检查下我写的代码,哪里有错误。

declarecursor yb1 is select * from test1 where productprice>2000 and origin in('中国','杭州');
cur_bl test1%rowtype;
cursor cur_cat is select * from test2;cur_cat2 test2%rowtype;
begin
--把符合要求的数据放进表test1_tmp open yb1;
loop
fetch yb1 into cur_b1;
exit when yb1%notfound;
insert into test1_tmp(productid,productname,productprice,quantity,category,desperation,origin)
values(yb1.productid,yb1.productname,yb1.productprice,yb1.quantity,yb1.category,yb1.desperation,yb1.origin);

commit;

--test1中的category替换成test2中的categorynameopen cur_cat;
loop
fetch cur_cat into cur_cat2;
exit when cur_cat2%notfound;

update test1_tmp set test1_tmp.category=cur_cat2.categoryname where test1_tmp.category=cur_cat2.categoryid;
--更改价格
update test1_tmp set test1_tmp.productprice=test1_tmp.productprice*0.95 where test1_tmp.productprice>2000;
commit;
end loop;
end;
展开
 我来答
匿名用户
2013-03-14
展开全部
简单看了看你的 第一个 游标的处理

open yb1;

fetch yb1 into cur_b1;

后面

insert into test1_tmp(productid,productname,productprice,quantity,category,desperation,origin) values(yb1.productid,yb1.productname,yb1.productprice,yb1.quantity,yb1.category,yb1.desperation,yb1.origin);

都是 游标名称.列名
这显然是不正确的。

应该是 变量名.列名

下面是一个 游标处理的例子。
注意 游标名是 c_ 开头的。
变量名是 v_ 开头的。

FETCH 游标名 INTO 变量名; 以后。

获取数据, 都是通过 变量名.列名。 来获取数据的。

不是通过 游标名.列名 来获取数据的。

DECLARE
-- 定义游标.
CURSOR c_test_main IS
SELECT id, value FROM test_main;
-- 保存游标数据的变量
v_main_data c_test_main%ROWTYPE;
BEGIN
-- 打开游标.
OPEN c_test_main;
LOOP
-- 填充数据(主表).
FETCH c_test_main INTO v_main_data;
-- 假如没有检索到(主表)数据,结束循环处理
Exit when c_test_main%NOTFOUND;

dbms_output.put_line(TO_CHAR(v_main_data.id)
|| ':' || v_main_data.value );

END LOOP;
-- 关闭游标
CLOSE c_test_main;
END;
/
badkano
2013-03-14 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885371
团长

向TA提问 私信TA
展开全部
问题是你都没close 游标,你两个loop,最后只end loop了一个
sql语句那些没细看,你可以单独把sql语句拎出来,执行一下,看能通过并且不报错吗?
貌似这三个需求放一起,也不用游标吧,就把三个sql语句都整合到一起就行了呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式