在存储过程里:   str1 varchar2(200);
   str2 varchar2(50);
   str3 varchar2(200);   cursor ctest is select * from tab_test;   begin
   for cur_test in ctest  
  loop
   str1 := 'aa,bbb,c,dd,eee'; --给字符串str1赋类似的值,每个用,号分隔的都是上面tab_test中的一个字段名称如何循环取出这些字段并把游标值取出,例如循环取出值赋值给str2
   str2 := aa; --取出第一个分隔字符串付给str2,aa实际是表tab_test的一个字段名   
  str3 := cur_test.str2; ------编译本行时提示“必须声明 str2组件” ,请问这个要如何写?主要就是这个问题,请各位指教,谢谢!
   end loop;
   end;
 

解决方案 »

  1.   


    DECLARE
      str1 varchar2(200);
      v_aa TAB_TEST.aa%TYPE;
      v_bbb TAB_TEST.bbb%TYPE;
      v_c TAB_TEST.c%TYPE;
      v_dd TAB_TEST.dd%TYPE;
      v_eee TAB_TEST.eee%TYPE;
      
      o_cursor Sys_Refcursor;
    BEGIN
      str1 := 'aa,bbb,c,dd,eee';
      OPEN o_cursor FOR
        'SELECT '||str1||' FROM TAB_TEST';
      LOOP
        FETCH o_cursor INTO
          v_aa,v_bbb,v_c,v_dd,v_eee;
        EXIT WHEN o_cursor%NOTFOUND;
        --处理逻辑自己加
        
      END LOOP;
     
    END;