日期:2014-05-17  浏览次数:20877 次

Nclob处理的问题
SQL>   desc   tbl3;
Name     Type       Nullable   Default   Comments  
-----   ------   --------   -------   --------  
IDX       NUMBER   Y                                                  
CNAME   NCLOB     Y      


下面的一个存储过程,我传进去很长的字符串,为什么每次存到tbl3表里面的cname只有一部分?

CREATE   OR   REPLACE   PROCEDURE   TIF_ADD_NEW(SQL_COMMAND   IN   NCLOB)
IS
    S   NCLOB;
    tmpS   VARCHAR2(2000);
    iPOS   NUMBER;
BEGIN
    S   :=   SQL_COMMAND;
    INSERT   INTO   TBL3   VALUES(SEQ_TBL3.NEXTVAL,s);
    iPOS   :=   INSTR(S, '; ');
    WHILE   iPOS>   0
    Loop
        tmpS   :=   SUBSTR(S,1,iPOS-1);
        begin
            tmps   :=   replace(tmps,chr(13), ' ');
            execute   immediate   tmpS;
        exception   when   others   then
            rollback;
        end;
        S   :=   SUBSTR(S,iPOS+1,LENGTH(S)-iPOS);
        IPOS   :=   INSTR(S, '; ');
    END   LOOP;  
    COMMIT;  
END;

好像nclob读取和存储有另外的方法,请指教


------解决方案--------------------
NCLOB是固定长度的多字节Character Large Object,是不是长度小了
------解决方案--------------------
tmpS VARCHAR2(2000);是不是定义小了?