日期:2014-05-17  浏览次数:20809 次

处理游标的FOR循环问题和记录变量问题
今天写了个简单的代码
DECLARE
TYPE pro_record IS RECORD(
name es_product.name%TYPE,
price es_product.price%TYPE
);
--v_pro pro_record;
CURSOR pro_cur IS
SELECT es_product.name,es_product.price FROM es_product;
BEGIN
FOR pro_record in pro_cur LOOP
dbms_output.put_line(pro_record.name);
END LOOP;
END;

这样是可以输出的。
问题一:当我在pro_record 记录里面把name 和price 改成v_name和v_price的时候 程序就会出错
不知道这里的命名有何规则。

问题二:这里for 后面跟的是一个记录的类型,这让我有点无法理解。正常的情况应该是先定义一个记录变量(比如这里的v_pro )然后for后面跟v_pro 。我试了下用v_pro 也是可行的。我觉得用v_pro更能理解,为什么这里是用pro_record 的。。求指导。



------解决方案--------------------
问题一,如何拿出来定义变量 就没有这种限制
问题二,for循环是一种游标的简化处理,因此不用openclose,也不用先定义。
------解决方案--------------------
第一个问题,我试了将name改成v_name呀,没有问题的,lz不妨再试试;
第二个问题,楼上的回答的很对的。
------解决方案--------------------
问题一:应该不会报错,要不然我猜就是你没把Loop里面的变量一起改掉
dbms_output.put_line(pro_record.name);
问题二:for是简化的循环,可以不定义变量。