我正在尝试从Oracle中的字段构建以逗号分隔的值列表。
我找到了一些示例代码:
DECLARE @List VARCHAR(5000)
SELECT @List = COALESCE(@List + ', ' + Display, Display)
FROM TestTable
Order By Display
但是当我尝试时,我总是得到一个关于FROM关键字的错误,而不是它的预期。我可以使用SELECT INTO
并且它可以工作,但如果我有多行,我会得到提取错误。
为什么我不能这样做:
SELECT myVar = Field1
FROM myTable
答案 0 :(得分:7)
在Oracle中,您将使用此页面上Tim Hall收集的众多string aggregation techniques中的一个。
如果您使用的是11.2,
SELECT LISTAGG(display, ',') WITHIN GROUP (ORDER BY display) AS employees
INTO l_list
FROM TestTable
在早期版本中,我的偏好是使用用户定义的聚合函数方法(Tim的名为string_agg
)来做
SELECT string_agg( display )
INTO l_list
FROM TestTable
答案 1 :(得分:0)
也许尝试DBMS_UTILITY.COMMA_TO_TABLE和TABLE_TO_COMMA来拆分/加入csv:
DECLARE
l_list1 VARCHAR2(50) := 'Tom,Dick,Harry,William';
l_list2 VARCHAR2(50);
l_tablen BINARY_INTEGER;
l_tab DBMS_UTILITY.uncl_array;
BEGIN
DBMS_OUTPUT.put_line('l_list1 : ' || l_list1);
DBMS_UTILITY.comma_to_table (
list => l_list1,
tablen => l_tablen,
tab => l_tab);
FOR i IN 1 .. l_tablen LOOP
DBMS_OUTPUT.put_line(i || ' : ' || l_tab(i));
END LOOP;
DBMS_UTILITY.table_to_comma (
tab => l_tab,
tablen => l_tablen,
list => l_list2);
DBMS_OUTPUT.put_line('l_list2 : ' || l_list2);
END;
答案 2 :(得分:-1)
除非以某种方式连接它们,否则不能将多个值插入单个变量中。
只获取单个值(不确定oracle语法),
select @myVar = select top 1 Field1 From myTable
否则,要连接值(再次,不确定Oracle)
set @myVar = '' -- Get rid of NULL select @myVar = @MyVar + ', ' + Field1 From myTable