Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Union menyebabkan ORA-01790:ekspresi harus memiliki tipe data yang sama dengan ekspresi yang sesuai

Saya pikir Anda tidak dapat melakukan casting seperti itu dalam SQL. Tetapi di PL/SQL Anda dapat:

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

Saya pikir saya salah dalam asumsi saya di atas. Saya tidak menghapusnya karena itu masih contoh yang valid. Di bawah ini contoh casting kolom tabel yang ada (emp table) dengan COLLECT sebagai tipe 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
 /



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana mengubah Port Web di EBS 12.2

  2. Daftar Bahasa yang Didukung oleh Oracle Database

  3. LISTAGG berbeda yang ada di dalam subquery dalam daftar SELECT

  4. Jdbc memeriksa kemampuan - rilis savepoint

  5. Mencari nama kolom untuk tabel secara dinamis saat dalam kueri sql