PL / SQL:如何将行组合成一个字符串

时间:2017-12-27 18:39:21

标签: oracle plsql

在Oracle Database 12c上使用PL / SQL。

我有一张这样的表:

filename | priority                         
---------- -----------
foo  |    1         
bar  |    2   
baz  |    3      

我想创建这个字符串:foo,1,bar,2,baz,3

最好的方法是什么?以前我使用过SQL Server,这很有效:

DECLARE 
   @str varchar(100)
SELECT @str = COALESCE(@str + ', ', '') + CONCAT(filename, ', ', priority) 
FROM table_name;

但我现在尝试在Oracle中执行此操作,但我无法使其正常运行。我尝试了一些方法,如:

DECLARE 
   str varchar(100) := coalesce(str || ', ', '') || CONCAT(filename, ', ', priority) 
FROM table_name;

但我得到了这个错误," PLS-00103:遇到了符号" FROM"期待以下其中一项"

我也尝试过listagg:

listagg(filename|| ',' || priority, ',') within group (order by priority) as str 
from table_name;

这给了我错误," PLS-00103:遇到符号" WITHIN"期待以下其中一项"

我做错了什么?

1 个答案:

答案 0 :(得分:2)

Oracle中的存储过程由声明部分和执行部分组成。您可以使用DECLARE部分为程序声明变量和BEGINEND的块。使用SELECT INTO在变量中选择一个值。

DECLARE 
  v_str varchar(10000);
BEGIN
  select 
    listagg(filename || ',' || priority, ',') within group (order by priority)
  into v_str
  from table_name;

  ...
END;