Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Unia powodująca ORA-01790:wyrażenie musi mieć ten sam typ danych, co odpowiadające mu wyrażenie

Myślę, że nie da się wykonać takiego rzutowania w SQL. Ale w PL/SQL możesz:

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

Myślę, że myliłem się w moich powyższych założeniach. Nie usunąłem tego, ponieważ jest to nadal aktualny przykład. Poniżej przykład rzutowania istniejącej kolumny tabeli (emp table) z COLLECT jako typem 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. Używanie funkcji agregacji do filtrowania rekordu na podstawie znacznika czasu MIN

  2. Mieszanie USING i ON w Oracle ANSI join

  3. Jak pozbyć się znaków NUL w bazie danych Oracle?

  4. Nie można otworzyć menu Widok->DBA w programie SQL Developer (zainstalowano Oracle 12C Standard Edition)

  5. Doradca ds. kompresji 11gR2 =Zło