更正:
用存储过程的那句话敲错了
sql_stmt := 'UPDATE ' || V_TABLE.TABLE_NAME || ' A SET a=(SELECT b2 FROM b WHERE b.b1=a.a1) WHERE ROWNUM<1000;

解决方案 »

  1.   

    最后少个 ;’
    sql_stmt := 'UPDATE ' || V_TABLE.TABLE_NAME || ' A SET a!=(SELECT b2 FROM b WHERE b.b1=a.a1) WHERE ROWNUM<1000; '
    ================================================================ok?
      

  2.   

    sql_stmt := 'UPDATE ' || V_TABLE.TABLE_NAME || ' A SET a!=(SELECT b2 FROM b WHERE b.b1=a.a1) WHERE ROWNUM<1000';
      

  3.   

    更新:
    sql_stmt := 'UPDATE ' || V_TABLE.TABLE_NAME ||  ' a SET a1 =   (SELECT b2 FROM b WHERE b.b1=a.a1) WHERE ROWNUM<1000';
      

  4.   

    动态sql执行时a.a1已经改变,而下面又循环比较b.b1和a.a1的值,执行出错
      

  5.   

    SQL> select * from a;        A1
    ----------
             2
             2
             2SQL> select * from b;        B1         B2
    ---------- ----------
             1          5
             2          8SQL> declare
      2    v_sql varchar2(100);
      3    v_tablename varchar2(10) :='a';
      4  begin
      5    v_sql :='update ' || v_tablename || ' set a1=(select b2 from b where b.b1
    =a.a1) where rownum<=2';
      6    execute immediate v_sql;
      7  end;
      8  /PL/SQL procedure successfully completed.SQL> select * from a;        A1
    ----------
             8
             8
             2SQL> select * from b;        B1         B2
    ---------- ----------
             1          5
             2          8你的“sql_stmt := 'UPDATE ' || V_TABLE.TABLE_NAME || ' A SET a=(SELECT b2 FROM b WHERE b.b1=a.a1) WHERE ROWNUM<1000;”
    中“V_TABLE.TABLE_NAME”变量存什么,不是已经有表名“A”了吗?难道是表的owner,那也不应该起这个“TABLE_NAME”名字呀。