sql >> データベース >  >> RDS >> Oracle

ORA-01790を引き起こすユニオン:式は、対応する式と同じデータ型である必要があります

    SQLではそのようなキャストはできないと思います。ただし、PL/SQLでは次のことができます。

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

    私は上記の私の仮定が間違っていたと思います。それはまだ有効な例であるため、私はそれを削除しませんでした。以下の例では、table_typeのタイプとしてCOLLECTを使用して既存のテーブル列(empテーブル)をキャストしています:

    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. .NETMySqlCommand@プレースホルダーがMySQL変数と競合しています

    2. mySQLで列を追加するとデータが壊れます

    3. SQL . SP または関数は、金曜日の次の日付を計算する必要があります

    4. MySQLの複数の外部キー