gpt4 book ai didi

sql - 从 Varray ORACLE SQL 中选择值

转载 作者:行者123 更新时间:2023-12-01 03:17:11 24 4
gpt4 key购买 nike

我正在使用 apex.oracle,我得到的错误是 [unsupported data type] .
解释:我有一个名为 Playlist 的表,我想将一组歌曲存储到 Songs 中。 field 。为此,我定义了一个名为 PlaylistSongs 的类型。的 varraychars .插入有效,但是当我执行 SELECT 时,我得到 [unsupported data type]而不是我的数组的值。

这是代码

CREATE OR REPLACE TYPE PlaylistSongs AS VARRAY(4) OF CHAR(16);

CREATE TABLE PLAYLIST (
IDPlaylist NUMBER(4) NOT NULL,
PlaylistName CHAR(64),
PlaylistAuthor NUMBER(2),
PlaylistDuration NUMBER,
ActivePlaylist NUMBER(1),
Songs PlaylistSongs,

CONSTRAINT PLAYLIST_PRIMARY_KEY PRIMARY KEY (IDPlaylist),
CONSTRAINT PLAYLIST_FOREIGN_KEY FOREIGN KEY (PlaylistAuthor) REFERENCES DJ (IDDJ)
);

INSERT INTO PLAYLIST VALUES (1, 'Rap', 1, 153, 1, 1, PlaylistSongs('River', 'Lose Yourself', 'Till I Collapse', 'Walk On Water'));

经过一番研究,我找到了 TABLE运算符(operator)。
SELECT *
FROM PLAYLIST p, TABLE(p.Songs) ps

这有效,但不是将数组显示为常规数组,而是在新行上显示每个条目。

enter image description here

我需要它看起来像 ['River', 'Lose Yourself', 'Till I Collapse', 'Walk On Water'] .可以做到吗?

最佳答案

是的 - 请参阅 listagg() 聚合函数(带有 group by 子句):

select idplaylist
, playlistname
, playlistauthor
, playlistduration
, activeplaylist
, listagg(rtrim(ps.column_value), ', ') within group (order by ps.column_value) as songs
from playlist p
cross join table(p.songs) ps
group by
idplaylist
, playlistname
, playlistauthor
, playlistduration
, activeplaylist;

此外, use varchar2 for strings, not char 只应用您不需要的空白填充(实际上,没有人需要它 - char 仅用于可移植性和 ANSI 完整性,不适用于新开发。使用 varchar2 数组,您将不需要 rtrim() .

关于sql - 从 Varray ORACLE SQL 中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48095257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com