cursor cur_YBT_IBP_MQGF is select * from YBT_IBP_MQGF where READFLAG=0;
fetch cur_YBT_IBP_MQGF into v_YBT_IBP_MQGF;
select ORGANCODE,ORGANNAME into v_companycode,v_companyname from organ where CORECODE=v_YBT_IBP_MQGF.COMPANYCODE and name=v_YBT_IBP_MQGF.name;
这种写法会报错,不能同时用两个v_YBT_IBP_MQGF.field用在where条件中。
我觉得这和fetch cur_YBT_IBP_MQGF into v_YBT_IBP_MQGF;有关系。
谁能告诉我fetch cur_YBT_IBP_MQGF into v_YBT_IBP_MQGF;的原理是什么

解决方案 »

  1.   

    你的cursor还没打开
    OPEN cur_YBT_IBP_MQGF;
      

  2.   

    这种写法不会报错啊,见我下面的例子。可以把你的代码以及详细错误信息贴出来看看。
    DECLARE
        CURSOR cur_YBT_IBP_MQGF IS
            SELECT rownum x, rownum y FROM dual CONNECT BY rownum <= 4;
        TYPE rec1 IS RECORD(
            COMPANYCODE INT,
            NAME        INT);
        v_YBT_IBP_MQGF rec1;
        v_companycode  INT;
        v_companyname  INT;
    BEGIN
        OPEN cur_YBT_IBP_MQGF;
        LOOP
            EXIT WHEN cur_YBT_IBP_MQGF%NOTFOUND;
        
            FETCH cur_YBT_IBP_MQGF
                INTO v_YBT_IBP_MQGF;
        
            SELECT ORGANCODE, ORGANNAME
            INTO   v_companycode, v_companyname
            FROM   (SELECT rownum ORGANCODE, rownum ORGANNAME
                    FROM   dual
                    CONNECT BY rownum <= 6) organ
            WHERE  ORGANCODE = v_YBT_IBP_MQGF.COMPANYCODE
            AND    ORGANNAME = v_YBT_IBP_MQGF.name;
        
            dbms_output.put_line(v_companycode || ',' || v_companyname);
        END LOOP;
    END;
      

  3.   

    fetch cur_YBT_IBP_MQGF into v_YBT_IBP_MQGF;语句的作用是读取数据,可以把游标指向位置的记录放到pl/sql声明的变量v_YBT_IBP_MQGF中使用游标四个步骤:声明,打开,读数,关闭;应该不是fetch出错,可能会是你漏写了某个步骤
      

  4.   

    楼上的对的,只有在for循环里面,游标才不需要打开,其余的情况都要经过楼上说的几个步骤