Oracle
 sql >> база данни >  >> RDS >> Oracle

надвишен е максималният брой рекурсивни SQL нива (50).

Вие правите тригер "преди вмъкване". В такъв тригер вие не вмъквате в същата таблица -- в противен случай можете да получите безкраен цикъл. Просто присвоете на променливата стойност:

CREATE OR REPLACE TRIGGER trig_deptno2
BEFORE INSERT ON dept2
FOR EACH ROW
DECLARE v_deptno NUMBER(2) ;
BEGIN
    SELECT coalesce(MAX(deptno) + 1, 1) INTO :new.deptno
    FROM dept2 ;
END trig_deptno2 ;

Когато тригерът приключи, той ще вмъкне правилните стойности от new променлива.

Нека просто кажа, че последователностите съществуват с причина и трябва да ги използвате за тази цел. Опитът да имитирате тяхната функционалност вероятно ще доведе до грешки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Настройки на времето за изчакване на връзката за Oracle база данни

  2. Weblogic 11g URL пренаписване

  3. Rank() SQL или нещо подобно

  4. Автоматизиран инструмент за миграция на схеми на Oracle

  5. ORACLE с 2 висящи леви съединения, използващи LITERAL за предикат на външно JOIN изключване на ред от най-лявата таблица