Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

memicu jika lain

Sintaks PL/SQL tidak mengizinkan penyertaan pernyataan SQL dalam klausa IF.

Pendekatan yang benar adalah memisahkan pernyataan SELECT dan kemudian menguji hasilnya. Sehingga menjadi:

create or replace trigger trig1 
after insert on table_1 
for each row 
declare
    v table2.column2%type;
begin
    select table2.column2 
    into v
    from table2 
    where table2.id= :new.id;

    if v is null
    then 
        update table2 
        set table2.column2 = :new.column1 
        where table2.id = :new.id; 
    end if; 
end trig1;

Perhatikan bahwa ini tidak menangani keberadaan beberapa baris di table2 cocok dengan kriteria, atau memang tidak ada baris yang cocok. Itu juga tidak menangani penguncian.

Juga, ingatlah bahwa kode seperti ini tidak berfungsi dengan baik di lingkungan multi-pengguna. Itu sebabnya saya menyebutkan penguncian. Anda harus benar-benar menggunakan logika prosedural untuk menangani persyaratan semacam ini. Meskipun seperti yang sering terjadi pada pemicu yang salah paham, penyebab sebenarnya adalah model data yang buruk. table2.column2 seharusnya dinormalisasi dari keberadaannya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ALTER &DROP Tabel DDL Dengan Jalankan Segera Di Oracle Database

  2. Instalasi PHP PDO di windows (xampp)

  3. Apakah urutan tabel yang dirujuk dalam klausa ON pada JOIN penting?

  4. Bagaimana cara mereferensikan id orang tua di id anak dengan JPA/Hibernate?

  5. TO_CHAR dari tipe Oracle PL/SQL TABLE