如何插入长字符串oracle clob或blob

时间:2018-04-13 12:22:57

标签: oracle plsql

如何插入非常长的文本100000 <length(string) < 300000 oracle clob或blob?

DECLARE
    v_long_text CLOB;
BEGIN
    v_long_text := 'my long string text';

    INSERT INTO MYTABLE_NAME 
    VALUES      (v_long_text);
END;

其metod无效,返回错误PLS-00172: string literal too long

3 个答案:

答案 0 :(得分:1)

您的文字是隐式的varchar,因此您无法将 v_long_text 值分配给大于varchar的最大文字值(plsql中的最大varchar长度为32767)。

您可以使用连接:

protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint)
{
    Scale = MIN_SCALE;
    Content.TranslationX = Content.TranslationY = 0;
    Content.AnchorX = Content.AnchorY = 0.5;
    return base.OnMeasure(widthConstraint, heightConstraint);
}

当然,我假设MYTABLE_NAME列类型是CLOB

<强>更新 示例代码:

DBMS_LOB.APPEND(v_long_text, 'very long string');
DBMS_LOB.APPEND(v_long_text, 'yet another long string');

答案 1 :(得分:0)

其他方法都很好。但是,如果您将长字符串存储在文件系统中的某个位置,则可以使用这些内容。

  • 使用SQL* loader加载它:这很简单明了 可自动读取文件系统。
  • 使用带split选项的unix -b实用程序拆分长文本 将文件分成较小的块(比如32000或4000)并放在shell中 script构造多个insert语句。

类似的东西:

split -b 4000 yourbigfile split_files_
ct=1
for chunk in $(cat split_files_??)
 do
   # first time
   echo "INSERT INTO table_name(col_name) VALUES ('${chunk}');"
   # 2nd and subsequent
  echo " update table_name set col_name = col_name || '$chunk';"
  ct=$((ct + 1))
done >yourinsert_script.sql
  • 创建一个PL / SQL过程,使用该文件从文件中读取文本 UTL_FILE并插入表格。

答案 2 :(得分:0)

DECLARE
    definition_clob CLOB;

BEGIN
dbms_lob.createtemporary(definition_clob, true);
dbms_lob.append(definition_clob,'String 1.. ">
dbms_lob.append(definition_clob,'String 2.. ">
.
.
.
INSERT INTO TABLE
(CLOB_COLUMN)
VALUES
(definition_clob)

COMMIT
dbms_lob.freetemporary(definition_clob);

END;
/