2016-08-12 93 views
0

我有一个列类型为LONG的表。我知道我可以通过将列类型更改为CLOB来解决我的问题,但在这种情况下我没有该选项。我需要将超过32k个字符的值插入此列。将超过32k字符的值插入到oracle的长列中

假设我有一张名为test的表,名为c1的列为LONG

以下语句会产生错误。

insert into test(c1)values('string longer than 32k chars'); 

error:ORA-01704: string literal too long.

预先感谢任何帮助。

使用托尼的例子从下面我想要做的东西像下面这样:

declare 
    x varchar2(40000) := rpad('x',40000,'x'); 
begin 
    insert into test (c1) values (x); 
end; 

我知道你不能做VARCHAR(2)大,但我想锻炼的想法。

+0

LONGs已弃用20年了吗?如果你仍然在数据库中困住他们,有人真的放弃了这个球。 – sstan

+0

我不认为这是可能的与SQL。你会考虑编写一个最有可能用C语言编写的外部客户端,它可以使用旧的OCI API将这么多的数据插入到LONG中。 –

+0

也许用这个作为更新LONG到CLOB的一个很好的理由? – tbone

回答

1

您可以插入从PL/SQL 32K字:

declare 
    x varchar2(32767) := rpad('x',32767,'x'); 
begin 
    insert into test (c1) values (x); 
end; 
+0

在上面的例子中,4000字符串在哪里去? – Maxqueue

+0

在上面的例子中,'rpad('x',32767,'x')'是一个长度为32767的字符串,其中所有字符都是'x'。它被创建,然后分配给VARIABLE x(同时创建并赋值)。然后它被插入到'test',列'c1' – mathguy

+0

,所以当我用'[string long than 4000]替换“rpad('x',32767,'x')”'时,我得到错误。你的例子工作。我不明白为什么更换rpad('x',32767,'x')不起作用。 – Maxqueue

0

废话。你什么意思?

SQL> create table test(c1 long); 

Table created. 

SQL> insert into test(c1)values('string longer than 4000 chars'); 

1 row created. 

SQL> select * from test; 

C1 
------------------------------------------------- 
string longer than 4000 chars 

1 row selected. 
+1

哈哈有趣。我想我可以更新语句实际显示4000个字符的字符串 – Maxqueue

+0

所以,实际上,问题是插入一个长字符串,而不是像您的示例所示插入“任何”字符串。你目前的长字符串在哪里?你需要在哪里插入它? – mathguy

+0

在我的问题中,我特别声明“我需要在此列中插入超过4000个字符的值”。我只需要使用sqlplus插入它 – Maxqueue

相关问题