BEGIN
           FOR i IN (SELECT T.MOBILE MOBILE from T_EXCEPTION_USER T WHERE T.FID IN(i_Reciver) AND  ROWID IN(SELECT MAX(ROWID) FROM T_EXCEPTION_USER D WHERE T.USERNAEM=D.USERNAEM))
            LOOP
               dbms_output.put_line(i.MOBILE);
              /*[email protected](i_SmsSub,i.MOBILE,i_SmsTxt);*/
            END LOOP;
        END; 其中i_Reciver是一个变量,这样写不可以,有什么办法吗,i_Reciver 例如221,111,111
  用动态sql还是什么

解决方案 »

  1.   

    用动态的SQL
    在定义一变量来存值
    for i in 1...变量 LOOP
    END LOOP
      

  2.   

    但是在游标里面好象不能用 IN(i_Reciver) 这个把,
      

  3.   

    DECLARE
      TYPE X IS TABLE OF VARCHAR2(11);
      V_X       X;
      I_RECIVER VARCHAR2(2000) DEFAULT '1,2,3';
    BEGIN
      EXECUTE IMMEDIATE 'SELECT T.MOBILE MOBILE
       FROM T_EXCEPTION_USER T
      WHERE T.FID IN (' || I_RECIVER || ')
        AND ROWID IN (SELECT MAX(ROWID)
                        FROM T_EXCEPTION_USER D
                       WHERE T.USERNAEM = D.USERNAEM)' BULK
                        COLLECT
        INTO V_X
        USING I_RECIVER;  FOR I IN V_X.FIRST .. V_X.LAST LOOP
        DBMS_OUTPUT.PUT_LINE(V_X(I) || '=' || I);
        /*[email protected](i_SmsSub,i.MOBILE,i_SmsTxt);*/
      END LOOP;
    END;