CLOB 列和 SQL 插入文件

Posted

技术标签:

【中文标题】CLOB 列和 SQL 插入文件【英文标题】:CLOB column and SQL Insert File 【发布时间】:2017-03-07 11:52:59 【问题描述】:

我必须准备一个 SQL 插入文件,该文件会将数据从测试导出到生产实例。其中一列是表中的 CLOB。

当我在 UAT 实例中进行测试运行时,出现以下错误

ORA-01704: 字符串文字太长 clob

有哪些选项可用于创建以 CLOB 作为列之一的 SQL 插入语句?

SQL 脚本是我唯一的选择。

更新 1

如果我将插入语句保存在一个名为 test.sql 的文件中,并尝试从 SQLPLUS 以@D:\temp\test.sql 执行,则会出现错误

ORA-01704: 字符串文字太长

表结构

CREATE TABLE test_tab
(
   prod_no            VARCHAR2 (100),
   prod_description   CLOB
);

插入声明

SET DEFINE OFF;
Insert into TEST_TAB
   (PROD_NO, PROD_DESCRIPTION)
 Values
   ('TEST_PROD', '
test

Symptoms and fault description: 

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2.  dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss

5. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

6. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

7. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work carried out:

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Date :13/07/2012  

Symptoms and fault description: 

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2.  dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

5. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

6. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

7. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
Work carried out:

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. Fault
dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work done by: 
____________________________________________________________________________________________________
Date :09/10/2011  

Symptoms and fault description: 

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2.  dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work carried out:

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work done by: 
______________________________________________________________________________________________________________________________________________________

Date :29/03/2011  

Symptoms and fault description: 

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2.  dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work carried out:

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work carried out:

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work done by: dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
_____________________________________________________________________________________________________
Date :27-April -2010  

Symptoms and fault description: 

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work carried out:

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. Fdsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work done by: 






dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work done by: 
_____________________________________________________________________________________________________

Date :31-January-2010  

Symptoms and fault description: 

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
2.  dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work carried out:

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

Work done by: 

_______________________________________________________________________________________________________________________________________________________________
Date :21-June-2009 

Symptoms and fault description: 

1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

3.dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

4. Edsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd');
COMMIT;

【问题讨论】:

简而言之,您的插入失败,您的猜测是因为 clob 列。对吧? sqlloader 怎么样?能用吗? @XING 是的,没错,因为 CLOB 列而失败。 @ArkadiuszŁukasiewicz 如何使用 SQLLoader 将数据从测试导出到生产。 能否请您发布您的插入语句以及一些示例数据和表 DDL 以复制问题 【参考方案1】:

根据提供的信息量,如果您遇到问题,可以使用以下逻辑:

ORA-01704: 字符串文字太长 clob

尝试将字符分成多个块,然后插入。

create table TBL (clob_col clob);
/    
INSERT INTO TBL (clob_col)
         VALUES (TO_CLOB ('chunk 1') || TO_CLOB ('chunk 2'));

where 'chunk 1' can be substr(data,1,32000).
      'chunk2   can be substr(data,32000)

查看演示:

DECLARE
   var   CLOB
      := 'Symptoms and fault description: 

            1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

            2.  dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

            3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

            4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

            3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

            4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
            Work carried out:

            1. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

            2. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

            3. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

            4. dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

            Work done by: dsdsdsdfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ';
BEGIN
   INSERT INTO TBL (clob_col)
           VALUES (
                        TO_CLOB (SUBSTR (var, 1, 1000))
                     || TO_CLOB (SUBSTR (var, 1000, 2000)));

   COMMIT;
END;

【讨论】:

@user75ponic。不是我为您提供的解决方案。试试看告诉我 chunk1 的范围是 1 - 32000,chunk2 的范围是 32000? 这是一个示例,具体取决于数据的长度。你可以把它变小并尝试。所以我的意思是说,首先从 1 到 200 的字符,然后在 chunk2 中从 200 到结束。如果它仍然给出错误,那么减小块大小并添加块 3 我有一个问题,我将如何在插入语句中创建以下内容? TO_CLOB (substr(data,1,32000)) || TO_CLOB (substr(data,32000)) 感谢您的解决方案和洞察力。谢谢【参考方案2】:

1) 使用 toad 将每个产品描述导出到单独的文件中。 (数据网格上的右键 -> 导出 Blob(Raws,Longs)

2) 创建 control.ctl 文件。在begindata 之后,您必须添加您的 prod_no 和相应的文件,用逗号分隔。 control.ctl 和文件必须在同一目录中。

LOAD DATA 
INFILE *
append
   INTO TABLE test_tab
   FIELDS TERMINATED BY ','
   (prod_no        CHAR(100),
    file_name       FILLER char(200),
    prod_description    LOBFILE(file_name) TERMINATED BY EOF)
begindata
prod1,prod1.dat
prod2,prod2.dat
prod3,prod3.dat

3) 从 cmd 运行 sqlloader。 sqlldr user/password@tns_to_uat control=control.ctl

【讨论】:

谢谢。我的表中有大约 153899 行。那么最好的方法是什么? 恕我直言。用蟾蜍导出一切。并编写查询 (select 'prod_no'||','||prod_no||'.dat' from test_tab;) 以生成 begindata 部分。请耐心等待整个导出和导入可能需要一段时间。

以上是关于CLOB 列和 SQL 插入文件的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 中插入 clob 数据时出错

插入 CLOB 列时出错:ORA-06502:PL/SQL:数字或值错误

使用 SQL*Plus 生成和插入大型 CLOB (1 MB)

如何通过sql的insert语句插入大量字符串到oracle的clob字段?

Oracle JDBC Clob 插入问题 ORA-00942

PL-SQL 操作列和插入