在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"期待以下其中一项"
我做错了什么?
答案 0 :(得分:2)
Oracle中的存储过程由声明部分和执行部分组成。您可以使用DECLARE
部分为程序声明变量和BEGIN
到END
的块。使用SELECT INTO
在变量中选择一个值。
DECLARE
v_str varchar(10000);
BEGIN
select
listagg(filename || ',' || priority, ',') within group (order by priority)
into v_str
from table_name;
...
END;