如何在触发器中将LONG类型的记录存入另外一个表中?

解决方案 »

  1.   

    SQL> CREATE TABLE TT (A LONG);表已创建。SQL> INSERT INTO TT VALUES('ASS');已创建 1 行。SQL> COMMIT;提交完成。SQL> SELECT * FROM TT;A
    ----------------------------------------------------------------
    ASSSQL> SELECT SUBSTR(A,1,2) FROM TT;
    SELECT SUBSTR(A,1,2) FROM TT
                  *
    ERROR 位于第 1 行:
    ORA-00932: 不一致的数据类型: 要求 NUMBER 得到的却是 LONG
    SQL> DECLARE
      2  T VARCHAR2(4000):='';
      3  BEGIN
      4  SELECT A INTO T FROM TT;
      5  DBMS_OUTPUT.PUT_LINE(T);
      6  END;
      7  /ASSPL/SQL 过程已成功完成。可以取出来,当然就可以随便处理了
      

  2.   

    有人介绍说:声明一个变量,varchar2(32000),将LONG字段内容存入该变量,在将该变量存入另一个表的Long字段中,不知可行否?
      

  3.   

    varchar2(32000)肯定会出错,VARCHAR2可变长度字符域,最大长度可达4000个字符,也就是说最多也就4000字节或者8000字节
      

  4.   

    sorry,说错了,最长4000个字节。如果是汉字,最多2000个字
    SQL> SELECT LENGTHB(A) FROM TEST.TT;LENGTHB(A)
    ----------
          4000SQL> SELECT LENGTH(A) FROM TEST.TT; LENGTH(A)
    ----------
          2000SQL> UPDATE TEST.TT SET A=A||'1';
    UPDATE TEST.TT SET A=A||'1'
                *
    ERROR 位于第 1 行:
    ORA-01489: 字符串连接的结果过长
      

  5.   

    SQL> CREATE TABLE TEST.TT (A VARCHAR2(40000));
    CREATE TABLE TEST.TT (A VARCHAR2(40000))
                                     *
    ERROR 位于第 1 行:
    ORA-00910: 指定的长度对于数据类型而言过长
    SQL> CREATE TABLE TEST.TT (A VARCHAR2(4000));表已创建。