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

SQLPLUSトリガーのコンパイルエラー

    これはトリガーではなく、データ型です。別の日付から日付を差し引くと、結果は間隔であり、別の日付ではありません:

    CREATE TABLE dates (date1 DATE, date2 DATE, datediff DATE, numdiff NUMBER);
    INSERT INTO dates (date1, date2) VALUES (sysdate, sysdate-1);
    
    UPDATE dates SET numdiff = date1 - date2;
    1 rows updated
    
    UPDATE dates SET datediff = date1 - date2;
    SQL Error: ORA-00932: inconsistent datatypes: expected DATE got DATE JULIAN
    

    したがって、トリガーが間隔を数値で格納する場合、次のようにコンパイルされます。

    CREATE OR REPLACE TRIGGER newtriggernum
      BEFORE INSERT ON dates FOR EACH ROW
    BEGIN
      :new.numdiff := :new.date1 - :new.date2;
    END;
    /
    TRIGGER NEWTRIGGERNUM compiled
    

    間隔を日付に格納する場合、次のことは行いません。

    CREATE OR REPLACE TRIGGER newtriggerdate
      BEFORE INSERT ON dates FOR EACH ROW
    BEGIN
      :new.datediff := :new.date1 - :new.date2;
    END;
    /
    Error(2,11): PL/SQL: ORA-00922: missing or invalid option
    


    1. OracleでASCII値を取得する方法は?

    2. 「エラー1054(42S22):MariaDBの「orderclause」の不明な列「colname」」を修正しました

    3. 文字列を小数に変換する方法は?

    4. 独自のアプリにAdminerをインストールする方法