Oracle không có một chức năng như GROUP_CONCAT của MySQL, đây chính xác là chức năng bạn đang yêu cầu. Các tùy chọn khác nhau để tổng hợp chuỗi như vậy được cung cấp trên trang này - một là sử dụng một chức năng tùy chỉnh:
CREATE OR REPLACE FUNCTION get_subjectkey (IN_PK IN MYTABLE.PRIMARY_KEY%TYPE)
RETURN VARCHAR2
IS
l_text VARCHAR2(32767) := NULL;
BEGIN
FOR cur_rec IN (SELECT subject_key
FROM MYTABLE
WHERE primary_key = IN_PK) LOOP
l_text := l_text || ',' || cur_rec.ename;
END LOOP;
RETURN LTRIM(l_text, ',');
END;
Sau đó, bạn sẽ sử dụng nó như:
SELECT get_subjectkey(?) AS subject_key
FROM DUAL
...Thay thế "?" với giá trị khóa chính.
Trước đây
Giả sử bạn chỉ muốn thêm dấu phẩy vào cuối giá trị cột, hãy sử dụng:
SELECT DISTINCT TO_CHAR(subject_key) || ','
FROM MYTABLE
Đường ống đôi - "||" - là phương tiện Oracle [, PostgreSQL và bây giờ là ANSI] để nối các chuỗi trong SQL. Tôi đã sử dụng TO_CHAR để chuyển đổi kiểu dữ liệu một cách rõ ràng, nhưng bạn có thể sử dụng:
SELECT DISTINCT subject_key || ','
FROM MYTABLE
... nếu điều đó không cần thiết.