当前位置: 首页 > 面试题库 >

如何连接字符串?

姬高扬
2023-03-14
问题内容

我使用的是Oracle 10g,并具有以下表结构:id,段落

我想按ID分组并连接段落。每个段落可能超过1500个字符。

当我尝试wm_concat函数时,它抱怨html" target="_blank">字符串缓冲区太小。实际上,我在Oracle网站上尝试了许多示例,但所有示例均因字符串缓冲区太小而失败。

select id, wm_concat(paragraph) from paragraphs group by id

我该如何解决?


问题答案:

因此,我猜是错误的所在ORA-06502,我可以看到您在这种情况下如何认为这不适用于您。

但是,这是的错wm_concat。这是一个函数,并受PL \
SQL中Oracle的最大varchar长度(32,767和标准SQL中的4,000)的约束。不幸的是,由于wm_concat的工作方式或函数中的任何较低约束,或者由于您在select中使用它,因此我认为您无法获得接近上限的任何信息。

还有另一个选项,straggTom
Kyte的字符串聚合函数。如果我们看一下两者之间的以下比较,您会发现它们的性能几乎相同,并且两者的长度上限均为4,000,即标准SQL的最大值。stragg快一些,可能是由于缓存。

SQL> set serveroutput on
SQL>
SQL> create table tmp_test ( a varchar2(30) );

Table created.

SQL> insert into tmp_test
  2   select object_name
  3     from all_objects
  4          ;

81219 rows created.

SQL>  commit ;

Commit complete.

SQL>
SQL> declare
  2
  3    i integer := 1;
  4    k number(10);
  5    v_stragg varchar2(32767);
  6    v_test varchar2(32767) := '';
  7    start_time timestamp;
  8
  9  begin
 10
 11    select count(*)
 12      into k
 13      from tmp_test;
 14
 15    for i in 1 .. k loop
 16      start_time := systimestamp;
 17      begin
 18
 19        select wm_concat(a) into v_test
 20          from tmp_test
 21         where rownum < i;
 22
 23      exception when others then
 24        dbms_output.put_line('wm_concat: ' || length(v_test));
 25        dbms_output.put_line(systimestamp - start_time);
 26        exit;
 27     end;
 28    end loop;
 29
 30    for i in 1 .. k loop
 31      start_time := systimestamp;
 32
 33      select stragg(a) into v_test
 34        from tmp_test
 35       where rownum < i;
 36
 37      if v_test = 'OVERFLOW' then
 38        dbms_output.put_line('stragg: ' || length(v_stragg));
 39        dbms_output.put_line(systimestamp - start_time);
 40        exit;
 41      else v_stragg := v_test;
 42      end if;
 43    end loop;
 44  end;
 45  /
wm_concat: 3976
+000000000 00:00:00.005886000
stragg: 3976
+000000000 00:00:00.005707000

PL/SQL procedure successfully completed.

至于解决,恐怕你做不到。一旦达到该极限就可以了。您将必须找到一种不同的汇总方法,或者问自己是否 确实 需要这样做。



 类似资料:
  • 问题内容: 如何在python中连接字符串? 例如: 将其与形成字符串: 问题答案: 最简单的方法是 但为了提高效率,请参阅:https : //waymoot.org/home/python_string/

  • 问题内容: 我使用来了解Java与运算符的工作方式。 它是用同样的操作? 问题答案: 不。使用和做不一样。 在Java中,字符串实例是不可变的。 因此,如果您这样做: 每次连接时都在创建新的字符串。 另一方面,StringBuilder就像一个缓冲区,可以在追加新Strings时根据需要增长。 经验法则是(由于我的评论而改变): 如果要进行大量连接(例如,在循环内进行连接,或生成由多个字符串连接的

  • 问题内容: 如何在Swift中连接字符串? 在我们喜欢 要么 但是我想用Swift语言做到这一点。 问题答案: 您可以通过多种方式连接字符串: 您也可以这样做: 我相信还有更多方法。 描述位 创建一个常数。(有点像)。设置后就无法更改其值。您仍然可以将其添加到其他东西并创建新变量。 创建一个变量。(有点像),因此您可以更改其值。 注意 在现实中,并有 很大的不同 ,从和,但它可以帮助类比。

  • 一个非常基本的问题是,在Kotlin中连接字符串的正确方法是什么? 在Java中,可以使用concat()方法,例如。 但是Kotlin无法使用concat()函数。我应该使用符号吗?

  • 问题内容: 我试图在Python中连接字符串和数字。当我尝试这样做时,它给了我一个错误: 错误是: 为什么我不能做到这一点? 如何 可以 我将字符串和Python中的号码是多少? 问题答案: Python是强类型的。没有隐式类型转换。 您必须执行以下操作之一:

  • 本文向大家介绍如何在Python中用数字连接字符串?,包括了如何在Python中用数字连接字符串?的使用技巧和注意事项,需要的朋友参考一下 要用数字连接字符串,您需要使用str(number)将数字转换为字符串。例如, 在Python 2中,您还可以使用backtick(``)包围数字并使用数字和字符串获得相同的结果。请注意,反引号已从Python 3中删除。例如,