输入大内容到oracle数据库

时间:2015-11-13 04:45:49

标签: sql oracle clob

我有一个.Net应用程序连接oracle数据库,并希望在DB中的列中输入超过4000个字符。

我尝试了CLOB仍然

  

输入字符串太长了。

我正在使用SQL查询输入数据任何帮助。

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用绑定变量。这是基本的例子:

CREATE TABLE clob_table (val CLOB);

void Main()
{
    using (var connection = new OracleConnection("DATA SOURCE=hq_pdb_tcp;PASSWORD=oracle;USER ID=HUSQVIK"))
    {
        using (var transaction = new TransactionScope())
        {
            connection.Open();

            using (var command = connection.CreateCommand())
            {
                command.CommandText = "INSERT INTO clob_table (val) VALUES (EMPTY_CLOB()) RETURNING val INTO :clob";
                var parameter = command.Parameters.Add("clob", OracleDbType.Clob, ParameterDirection.Output);

                command.ExecuteNonQuery();

                var clob = (OracleClob)parameter.Value;

                ChunkFile(@"LargeTextFile.txt", 8060, (b, l) => clob.Append(b, 0, l));
            }

            transaction.Complete();
        }
    }
}

private void ChunkFile(string fileName, int chunkSize, Action<char[], int> chunkAction)
{
    using (var stream = File.OpenText(fileName))
    {
        do
        {
            var buffer = new char[chunkSize];
            var length = stream.Read(buffer, 0, chunkSize);
            if (length == 0)
                return;

            chunkAction(buffer, length);
        }
        while (true);
    }
}

答案 1 :(得分:1)

  

我尝试使用CLOB仍然输入字符串太长了。

那不是真的。

来自documentation

  

包含单字节或多字节的字符大对象   字符。固定宽度和可变宽度字符集都是   支持,都使用数据库字符集。 最大尺寸为(4   千兆字节 - 1)*(数据库块大小)

例如,

SQL> CREATE TABLE t_clob(col CLOB);

Table created.

SQL> INSERT
  2  INTO t_clob VALUES
  3    (
  4      TO_CLOB(RPAD('*', 4000, '*'))
  5      ||RPAD('*', 4000, '*')
  6      ||RPAD('*', 4000, '*')
  7    );

1 row created.

SQL> SELECT LENGTH(col) FROM t_clob;

LENGTH(COL)
-----------
      12000

从Oracle 12c开始, VARCHAR2 的最大大小现在扩展 32767字节。默认情况下,参数 MAX_STRING_SIZE STANDARD ,最多可容纳4000个字节。

SQL> show parameter MAX_STRING_SIZE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_string_size                      string      STANDARD

您可以将参数值更改为 EXTENDED ,并将VARCHAR2的最大值增加到32767字节。

主要有两个重要步骤:

ALTER SYSTEM SET max_string_size=extended;

@?/rdbms/admin/utl32k