【问题标题】:CLOB column and SQL Insert FileCLOB 列和 SQL 插入文件
【发布时间】: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 以复制问题

标签: sql oracle oracle11g clob


【解决方案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 部分。请耐心等待整个导出和导入可能需要一段时间。
猜你喜欢
  • 2012-05-30
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2012-11-12
  • 1970-01-01
相关资源
最近更新 更多