Oracle
 sql >> Database >  >> RDS >> Oracle

Unione che causa un'espressione ORA-01790:deve avere lo stesso tipo di dati dell'espressione corrispondente

Penso che non puoi eseguire tale casting in SQL. Ma in PL/SQL puoi:

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;
/

Penso di aver sbagliato nelle mie ipotesi di cui sopra. Non l'ho cancellato in quanto è ancora un esempio valido. Di seguito un esempio di cast della colonna della tabella esistente (tabella emp) con COLLECT come tipo di 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
 /