Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Błędy kompilacji wyzwalaczy SQL PLUS

To nie wyzwalacz, to typ danych. Jeśli odejmiesz datę od innej daty, wynikiem będzie przedział, a nie inna data:

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

Tak więc, jeśli wyzwalacz przechowuje interwał w postaci liczby, kompiluje:

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

a jeśli przechowuje interwał w dacie, to nie:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instrukcja Delete była bardzo powolna w Oracle

  2. Korzystanie z usługi internetowej i wstawianie CLOB przy użyciu Node.js do tabeli bazy danych Oracle

  3. Jak porównać wartości dla ostatniego i przedostatniego wpisu w tabeli?

  4. Prawidłowe zapytanie GROUP BY nie działa w połączeniu z INSERT INTO w Oracle

  5. Procedura wywoływania w wierzchołku oracle