今天写了个简单的代码
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 的。。求指导。

解决方案 »

  1.   

    问题一,如何拿出来定义变量 就没有这种限制
    问题二,for循环是一种游标的简化处理,因此不用openclose,也不用先定义。
      

  2.   

    第一个问题,我试了将name改成v_name呀,没有问题的,lz不妨再试试;
    第二个问题,楼上的回答的很对的。
      

  3.   

    问题一:应该不会报错,要不然我猜就是你没把Loop里面的变量一起改掉
            dbms_output.put_line(pro_record.name);
    问题二:for是简化的循环,可以不定义变量。