/* Formatted on 2007/07/03 09:50 (Formatter Plus v4.8.6) */
SET SERVEROUT ONDECLARE
   TYPE cur IS REF CURSOR
      RETURN category_header%ROWTYPE;   mycur   cur;
   crow    category_header%ROWTYPE;
BEGIN
   OPEN mycur FOR
      SELECT *
        FROM category_header;   FOR crow IN mycur
   LOOP
      DBMS_OUTPUT.put_line (crow.cat_code || '' || crow.cat_desc);
   END LOOP;   CLOSE mycur;
END;
/我在运行这段程序里,for循环那里老是出错,说mycur不是过程或没有定义.这是为什么啊,我把游标类型改为静态的就行.这是为什么呢.
是不是静态游标和动态游标的区别啊.

解决方案 »

  1.   

    CREATE TABLE category_header(cat_code VARCHAR2(4),
          cat_desc VARCHAR2(10)
    )
    表代码
      

  2.   

    FOR crow IN mycur
       LOOP
          DBMS_OUTPUT.put_line (crow.cat_code || '' || crow.cat_desc);
       END LOOP;
    需改为
       fot 0=0 
       loop
          fetch mycur into crow
          exit when mycur%NOTFOUND;
          DBMS_OUTPUT.put_line (crow.cat_code || '' || crow.cat_desc);
       END LOOP;
    或者不用定义动态游标,和行变量,直接这样写
       FOR crow IN (SELECT * FROM category_header)
       LOOP
          DBMS_OUTPUT.put_line (crow.cat_code || '' || crow.cat_desc);
       END LOOP;
      

  3.   

    for循环只能用于隐式打开/关闭游标~~~~~