Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Lỗi so sánh PL / SQL trong trình kích hoạt (PLS-00405)

Nếu bạn có 11g hoặc 12c, bạn có thể viết kích hoạt hợp chất. Nó có một phần thực thi trước khi hoạt động kích hoạt thực sự bắt đầu. Tức là, bạn có thể đọc từ bảng trong phần đó vì đây là trước khi bảng chuyển sang trạng thái đột biến:

create or replace trigger Predmety_Ciu
For Insert Or Update On Predmety
Compound Trigger
    MaxID   int;

    Before Statement Is Begin
        -- Be prepared this might be the first record written to the table
        select nvl( max( ID ), 0 ) into MaxID from Predmety;
    End Before Statement;

    Before Each Row Is Begin
      IF :NEW.ID = :NEW.NAVAZUJE_NA THEN --There is an error (PLS-00405) 
        Raise_Application_Error(-20000, 'Predmet nemuze navazovat sam na sebe.', False);
      Elsif :New.Navazuje_Na > Maxid Then
        Raise_Application_Error(-20001, 'Predmet nemuze navazovat na neexistujici predmet. Další objekt ID: ' || to_char( Maxid ), False);
      Elsif :New.Id < 0 Or :New.Navazuje_Na < 0 Then
        Raise_Application_Error(-20002, 'Neplatny index predmetu nebo predmetu, na ktery ma dany predmet navazovat.', False);
      End If;
    End Before Each Row;

    After Each Row Is Begin
        -- Vložte nějaký kód, který chcete spustit po vložení řádku
        If Inserting Then
            Maxid := Maxid + 1;
        end if;
    End After Each Row;

    After Statement Is Begin
        Null; -- Vložte nejaký kód, který chcete spustit po zadání všech rádek.
    End After Statement;
End Predmety_Ciu;

Tôi đã xóa trình xử lý ngoại lệ vì tôi muốn các ngoại lệ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách bật tính năng theo dõi trong ứng dụng oracle r12

  2. ORA-00936 thiếu biểu thức

  3. Chuyển đổi Long sang Varchar2

  4. Sắp xếp thứ tự các chuỗi trong khi nối trong oracle

  5. Oracle:bảng đang thay đổi