Tôi nghĩ rằng bạn không thể thực hiện truyền như vậy trong SQL. Nhưng trong PL / SQL bạn có thể:
CREATE OR REPLACE TYPE STRARRAY AS TABLE OF VARCHAR2 (255)
/
DECLARE
tab STRARRAY;
cnt NUMBER:= 0;
BEGIN
SELECT COUNT(*)
INTO cnt
FROM TABLE(CAST(tab AS strarray));
dbms_output.put_line(cnt);
END;
/
Tôi nghĩ rằng tôi đã sai trong các giả định của tôi ở trên. Tôi đã không xóa nó vì nó vẫn là ví dụ hợp lệ. Ví dụ dưới đây truyền cột bảng hiện có (bảng trống) với COLLECT làm loại table_type:
CREATE OR REPLACE TYPE varchar2_ntt AS TABLE OF VARCHAR2(4000);
/
SELECT deptno
, CAST(COLLECT(ename) AS varchar2_ntt) AS emps
FROM scott.emp
GROUP BY deptno
/
-- This is dumb but works:
SELECT deptno
, CAST(COLLECT(ename) AS varchar2_ntt) AS emps
FROM scott.emp
GROUP BY deptno
UNION ALL
SELECT deptno
, CAST(COLLECT(ename) AS varchar2_ntt) AS emps
FROM scott.emp
GROUP BY deptno
/