Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

União causando um ORA-01790:a expressão deve ter o mesmo tipo de dados que a expressão correspondente


Eu acho que você não pode fazer essa conversão em SQL. Mas em PL/SQL você pode:
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;
/

Acho que estava errado nas minhas suposições acima. Eu não deletei isso, pois ainda é um exemplo válido. Abaixo exemplo de conversão de coluna de tabela existente (tabela emp) com COLLECT como tipo de 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
 /