数据库查询,游标。
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; 展开
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;
/
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;
/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询