sql >> Databasteknik >  >> RDS >> Oracle

Union som orsakar ett ORA-01790:-uttryck måste ha samma datatyp som motsvarande uttryck

Jag tror att du inte kan göra sådan casting i SQL. Men i PL/SQL kan du:

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

Jag tror att jag hade fel i mina antaganden ovan. Jag tog inte bort det eftersom det fortfarande är ett giltigt exempel. Nedan exempel casting av befintlig tabellkolumn (emp table) med COLLECT som typ av 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. Codeigniter Active Record HAVING / WHERE db.field =db.field

  2. MYSQL Inner Join if-sats

  3. Det går inte att casta COM-objekt av typen 'System.__ComObject' till gränssnittstypen 'Microsoft.VisualStudio.OLE.Interop.IServiceProvider'

  4. Ruby Gem för mysql 5.5 i windows