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

Solusi untuk tidak dapat melakukan operasi DML di dalam kueri?

Anda dapat menggunakan direktif pragma autonomous_transaction . Ini akan menjalankan fungsi menjadi transaksi independen yang dapat melakukan DML tanpa meningkatkan ORA-14551.

Ketahuilah bahwa karena transaksi otonom bersifat independen, hasil DML akan dilakukan di luar cakupan transaksi induk. Dalam kebanyakan kasus, itu bukan solusi yang dapat diterima.

SQL> CREATE OR REPLACE FUNCTION supercomplex(datainput IN VARCHAR2)
  2     RETURN VARCHAR2 IS
  3     PRAGMA AUTONOMOUS_TRANSACTION;
  4  BEGIN
  5     INSERT INTO dumtab VALUES (datainput);
  6     COMMIT;
  7     RETURN 'done';
  8  END supercomplex;
  9  /

Function created

SQL> SELECT supercomplex('somevalue') FROM dual;

SUPERCOMPLEX('SOMEVALUE')
--------------------------------------------------------------------------------
done

SQL> select * from dumtab;

A
--------------------------------------------------------------------------------
somevalue

Tom Kyte memiliki penjelasan yang bagus tentang mengapa kesalahan muncul di tempat pertama. Ini tidak aman karena mungkin tergantung pada urutan pemrosesan baris. Selain itu, Oracle tidak menjamin bahwa fungsi tersebut akan dijalankan setidaknya satu kali dan paling banyak satu kali per baris.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perlu menemukan waktu pemrosesan rata-rata antara semua catatan cap waktu di Oracle SQL

  2. Metode termudah untuk menguji Prosedur Tersimpan Oracle

  3. Pemulihan basis data Oracle

  4. InMemory DUPLICATE Kebingungan di Oracle RAC

  5. Bagaimana cara mengembalikan ketika terjadi kesalahan saat menjalankan perintah sql loader?