本帖最后由 hanvslin 于 2011-01-10 15:13:09 编辑

解决方案 »

  1.   

    1.采用long类型
    2.使用dbms_sql包
      

  2.   

    dbms_sql貌似只能只能查询的操作!
      

  3.   

    http://hi.baidu.com/chenjiang1985/blog/item/a4aac8c2dc5a7e190ef477e1.html
    参照这个看看
      

  4.   

    貌似有点困难度
    8i及以前,可以用dbms_sql包执行动态的SQL的
    9i之后也可以用 execute immediate SQL 方式
      

  5.   

    DECLARE
      v_stmt_str         VARCHAR2(200);
      v_cur_hdl          NUMBER;
      v_deptnumber       NUMBER := 99;
      v_deptname         VARCHAR2(20);
      v_location         VARCHAR2(10);
      v_rows_processed   NUMBER;
    BEGIN
      v_stmt_str := 'INSERT INTO dept 
        VALUES (:g_deptno, :g_dname, :g_loc)';
      v_cur_hdl := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(v_cur_hdl, v_stmt_str, 
                     DBMS_SQL.NATIVE);
      -- Supply binds
      DBMS_SQL.BIND_VARIABLE
        (v_cur_hdl, ':g_deptno', v_deptnumber);
      DBMS_SQL.BIND_VARIABLE
        (v_cur_hdl, ':g_dname', v_deptname);
      DBMS_SQL.BIND_VARIABLE
        (v_cur_hdl, ':g_loc', v_location);
      v_rows_processed := DBMS_SQL.EXECUTE(v_cur_hdl);  
      DBMS_SQL.CLOSE_CURSOR(v_cur_hdl);
    END;
    /DECLARE 
      deptname_array   DBMS_SQL.VARCHAR2_TABLE; 
      v_cur_hdl        INT;
      v_stmt_str       VARCHAR2(200);
      v_location       VARCHAR2(20);
      v_deptnumber     NUMBER := 10;
      v_rows_procsd    NUMBER;
    BEGIN 
      v_stmt_str := 'UPDATE dept 
        SET loc = :g_newloc
        WHERE deptno = :g_deptno
        RETURNING dname INTO :g_dname';
      v_cur_hdl := DBMS_SQL.OPEN_CURSOR; 
      DBMS_SQL.PARSE
        (v_cur_hdl, v_stmt_str, DBMS_SQL.NATIVE); 
      -- Supply binds 
      DBMS_SQL.BIND_VARIABLE
        (v_cur_hdl, ':g_newloc', v_location); 
      DBMS_SQL.BIND_VARIABLE
        (v_cur_hdl, ':g_deptno', v_deptnumber); 
      DBMS_SQL.BIND_ARRAY
        (v_cur_hdl, ':g_dname', deptname_array); 
      -- Execute cursor 
      v_rows_procsd := DBMS_SQL.EXECUTE(v_cur_hdl); 
      -- Get RETURNING column into OUT bind array 
      DBMS_SQL.VARIABLE_VALUE
        (v_cur_hdl, ':g_dname', deptname_array); 
      DBMS_SQL.CLOSE_CURSOR(v_cur_hdl); 
    END;
    /
      

  6.   

    execute immediate sql有长度限制,
    只能使用dbms_sql
    给个参考
    http://www.softcov.com/zh-cn/database/oracle-sql-length.html也可用clob存储过长sql
      

  7.   

    dbms_sql
    执行的时候发现一个问题,就是碰到查询字段中含decode加括号嵌套的时候出现异常,具体是什么原因引起的还不清楚
    使用execute immediate 没有问题,我的sql长度快3万了,都没有发生异常