create or replace procedure SP_INT   is
   --记数器
   rowlimit integer;
   --定义类型
   TYPE TYPE_ROW IS RECORD
          (                 
       aaaa VARCHAR2(30),                  
       bbbb CHAR(1)     
          );            
   TYPE TYPE_TAB IS TABLE OF TYPE_ROW;    --定义v_tab为TYPE_TAB
   v_tab  TYPE_TAB; 
   
   --定义请求接口表游标 
   CURSOR CUR_INT is SELECT A.aaaa,C.bbbb FROM A 
                                left join B on (A.id = c.id); 
 BEGIN
   rowlimit:=1000;
   OPEN CUR_INT;
   LOOP
    --定义1000条 
    FETCH CUR_INT BULK COLLECT INTO v_tab LIMIT rowlimit;
    FOR i IN 1..v_tab.COUNT 
     SELECT aaaa into v_a from  a;
     LOOP
     END LOOP;
     --关闭游标
     EXIT WHEN CUR_INT%notfound; 
    END LOOP;
 END;    
---这样的过程,老提示v_tab 类型错误。不是写法有问题,还是不能这样写。
各位帮忙看看。

解决方案 »

  1.   

    怎么没人回应啊。
    帮个忙啦。
     TYPE TYPE_ROW IS RECORD 
              (                
          aaaa VARCHAR2(30),                  
          bbbb CHAR(1)    
              );            
      TYPE TYPE_TAB IS TABLE OF TYPE_ROW;   --定义v_tab为TYPE_TAB 
      v_tab  TYPE_TAB; 
      
      --定义请求接口表游标 
      CURSOR CUR_INT is SELECT A.aaaa,C.bbbb FROM A 
                                    left join B on (A.id = c.id); 
    这两个的定义是完全一样的,大家可以把A,B表替换掉看看。
      

  2.   


    就这么几句语句,你竟然能搞出10个错误,这也是本事。 :)
    修改后:
    CREATE OR REPLACE PROCEDURE SP_INT IS
      ROWLIMIT INTEGER;
      TYPE TYPE_ROW IS RECORD(
        AAAA VARCHAR2(30),
        BBBB CHAR(1));
      TYPE TYPE_TAB IS TABLE OF TYPE_ROW;
      V_TAB TYPE_TAB;
      CURSOR CUR_INT IS
        SELECT A.AAAA, C.BBBB FROM A LEFT JOIN B ON (A.ID = C.ID);
    BEGIN
      ROWLIMIT := 1000;
      OPEN CUR_INT;
      LOOP
        FETCH CUR_INT BULK COLLECT
          INTO V_TAB LIMIT ROWLIMIT;
        FOR I IN 1 .. V_TAB.COUNT LOOP
          /*     SELECT AAAA INTO V_A FROM A;
          LOOP
           
          END LOOP;*/
          NULL;
        END LOOP;
        EXIT WHEN CUR_INT%NOTFOUND;
      END LOOP;
      CLOSE CUR_INT;
    END;
    /
      

  3.   

    楼上的兄台:
    好象就2个错误吧?一个是select 没写在LOOP,一个是没CLOSE 游标
    我用你的SQL,也是一样的错哦。
    就一个‘INTO 列表中的表达式 'V_TAB'  类型错误 ’吧?
    主要的还是这个错啦?
    您老,能帮在看看先。
    呵呵。
      

  4.   

    create or replace procedure SP_INT  is 
      rowlimit integer; 
      TYPE TYPE_ROW IS RECORD 
              (                
          aaaa VARCHAR2(30),                  
          bbbb CHAR(1)    
              );            
      TYPE TYPE_TAB IS TABLE OF TYPE_ROW; 
      v_tab  TYPE_TAB; 
      CURSOR CUR_INT is SELECT A.aaaa,C.bbbb FROM A 
                                    left join B on (A.id = c.id); 
    BEGIN 
      rowlimit:=1000; 
      OPEN CUR_INT; 
      LOOP 
        FETCH CUR_INT BULK COLLECT INTO v_tab LIMIT rowlimit; 
        FOR i IN 1..v_tab.COUNT 
        LOOP 
         NULL;
        END LOOP; 
        EXIT WHEN CUR_INT%notfound;     
        END LOOP; 
        CLOSE CUR_INT
    END;/*INTO 列表中的表达式 'V_TAB'  类型错误 这个问题啦,A,B表大家随便拿别的表代替*/
      

  5.   

    oracle 版本?如果是9i,把oracle升下级看看。