Ich denke, Sie können ein solches Casting nicht in SQL durchführen. Aber in PL/SQL können Sie:
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;
/
Ich glaube, ich habe mich in meinen obigen Annahmen geirrt. Ich habe das nicht gelöscht, da es immer noch ein gültiges Beispiel ist. Das folgende Beispiel konvertiert eine vorhandene Tabellenspalte (emp-Tabelle) mit COLLECT als Typ von 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
/