sql >> Databáze >  >> RDS >> Oracle

Sjednocení způsobující výraz ORA-01790:musí mít stejný datový typ jako odpovídající výraz

Myslím, že takové casting v SQL udělat nemůžete. Ale v PL/SQL můžete:

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

Myslím, že jsem se ve výše uvedených předpokladech mýlil. Nesmazal jsem to, protože je to stále platný příklad. Níže uvedený příklad přetypování existujícího sloupce tabulky (emp tabulka) s 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. Přepnutí databáze a převzetí služeb při selhání pro weby Drupal využívající MySQL nebo PostgreSQL

  2. Používejte relační databáze MySQL na Fedoře 13

  3. Nelze se přihlásit k serveru SQL Server 2008 pomocí nástroje příkazového řádku

  4. Jak odstranit soubory v SQL Server 2019