如何用一个字段作为CLOB编写oracle插入脚本?

Ash*_*ish 21 oracle

我想创建一个插入脚本,它只用于将一条记录插入一个表中.

它有5列,其中一列是CLOB类型.

每当我尝试,它说无法插入字符串是如此之久.大于4000.

我需要一个带有clob的insert语句作为一个字段.

INSERT INTO tbltablename 
            (id, 
             NAME, 
             description, 
             accountnumber, 
             fathername) 
VALUES      (1, 
             N'Name', 
             clob'some very long string here, greater than 4000 characters', 
             23, 
             'John') ;
Run Code Online (Sandbox Code Playgroud)

Har*_*son 19

请记住,SQL字符串不能大于4000字节,而Pl/SQL可以包含大到32767字节的字符串.请参阅下面的示例,通过匿名块插入一个大字符串,我相信它会完成您需要做的所有事情.

注意我将varchar2(32000)更改为CLOB

set serveroutput ON 
CREATE TABLE testclob 
  ( 
     id NUMBER, 
     c  CLOB, 
     d  VARCHAR2(4000) 
  ); 

DECLARE 
    reallybigtextstring CLOB := '123'; 
    i                   INT; 
BEGIN 
    WHILE Length(reallybigtextstring) <= 60000 LOOP 
        reallybigtextstring := reallybigtextstring 
                               || '000000000000000000000000000000000'; 
    END LOOP; 

    INSERT INTO testclob 
                (id, 
                 c, 
                 d) 
    VALUES     (0, 
                reallybigtextstring, 
                'done'); 

    dbms_output.Put_line('I have finished inputting your clob: ' 
                         || Length(reallybigtextstring)); 
END; 

/ 
SELECT * 
FROM   testclob; 


 "I have finished inputting your clob: 60030"
Run Code Online (Sandbox Code Playgroud)

  • 对于高达32'000个字符的CLOB来说,这是一个很好的答案.对于更大的CLOB,您需要创建一个临时CLOB(请参阅DBMS_LOB包),以32'000的块为其附加数据,并将临时CLOB插入表中. (2认同)

nev*_*ves 8

我用比投票最多的答案更简单的解决方案解决了我的问题。

您必须将大 clob 字符串分成多个字符串,每个字符串少于 4000 个字符,使用 方法转换每个字符串to_clob,然后使用||运算符将​​它们连接起来。

这是最终插入语句的示例:

INSERT INTO tbltablename 
            (id, 
             name, 
             big_clob_description) 
VALUES      (1, 
             N'A Name', 
             to_clob('string with less than 4000 chars') 
             || to_clob('rest of string here, with less than 4000 chars') 
) ;
Run Code Online (Sandbox Code Playgroud)

我的插入代码是由脚本生成的,打破字符串并不困难。