Ewg*_*ski 4 oracle plsql group-by collect
我想按属性对我的数据库条目进行分组,并同时知道每个组中有哪些条目。我使用 Oracle COLLECT 函数COLLECT 函数收集分组条目的 ID
DECLARE
TYPE ids_type IS TABLE OF number(19, 0);
ids ids_type;
BEGIN
select cast(collect(r.id) as ids_type) into ids from rechnungsdaten r group by r.status;
END;
Run Code Online (Sandbox Code Playgroud)
但后来我得到了错误:
错误报告 -
ORA-06550:第 5 行,第 44 列:
PL/SQL:ORA-00902:无效数据类型
ORA-06550:第 5 行,第 5 列:
PL/SQL:SQL 语句被忽略
06550。00000 -“行 %s,列%s:\n%s"
*原因:通常是 PL/SQL 编译错误。
*行动:
这里有什么问题?
不能COLLECT在 PL/SQL 匿名块中声明的类型上使用函数。您还有其他选择,例如
创建数据库类型并运行您的收集查询。
create or replace TYPE ids_type IS TABLE OF number(19, 0);
SELECT
r.status,
CAST(COLLECT(r.id) AS ids_type)
FROM
rechnungsdaten r
GROUP BY
r.status;
Run Code Online (Sandbox Code Playgroud)
使用简单的LISTAGG查询以字符串形式查看 id 列表
SELECT
r.status,
LISTAGG(r.id,',') WITHIN GROUP(
ORDER BY
id
)
FROM
rechnungsdaten r
GROUP BY
r.status;
Run Code Online (Sandbox Code Playgroud)