sql >> Database >  >> RDS >> Oracle

Union veroorzaakt een ORA-01790:expressie moet hetzelfde datatype hebben als de corresponderende expressie

Ik denk dat je zo'n casting niet in SQL kunt doen. Maar in PL/SQL kunt u:

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

Ik denk dat ik verkeerd was in mijn aannames hierboven. Ik heb dat niet verwijderd omdat het nog steeds een geldig voorbeeld is. Hieronder een voorbeeld van het casten van een bestaande tabelkolom (emp-tabel) met COLLECT als type 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. Binaire variabele groeperen op ID en min/max-datums

  2. Slaap optimistisch over ander gedrag tussen Postgres en MariaDb

  3. gem install pg error:kon kern.osversion `14.0.0' op Yosemite w/ Ruby 2.1.5 niet begrijpen

  4. Probleem bij toegang tot een zogenaamd uitgeschakelde functie in CODEIGNITER