【发布时间】:2015-08-06 08:53:39
【问题描述】:
我有一个单列的表 A
**TableA**
Row1
Row2
Row3
.....
我必须将表格行转换为列表并将它们存储在变量中。以便它们存储为
Row1,Row2,Row3,....,Rown
我使用listagg()函数实现了解决方案。
DECLARE
tbl_list CLOB;
BEGIN
SELECT listagg (''''||Column_name||'''',',') WITHIN GROUP (ORDER BY Column_name) INTO TBL_LIST FROM TableA;
END;
如果 TableA 的行数很少,这可以正常工作。但是如果表格有很多行,我会收到以下错误
ORA-01489: result of string concatenation is too long
这是因为变量 TBL_LIST 的存储限制吗?谁能解释我出了什么问题。 lisagg() 是否有替代方法来实现我想要的结果?
【问题讨论】:
-
为什么类型是Column_name?为什么必须将表格行转换为列表?
-
如果你想了解其他技术,可能想看看这个String Aggregation Techniques
-
column_name 是 varchar2,我需要将行排序为像 (row1,row2,....) 这样的列表,因为我将变量 tbl_list 传递给另一个进程,该进程接受表单中的输入列表中的
标签: oracle