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

Semantik prosedur/fungsi tersimpan Oracle dalam konteks transaksional

Anda dapat menggunakan RESTRICT_REFERENCES untuk menunjukkan bahwa suatu fungsi tidak akan membaca/menulis paket atau status basis data.

CREATE PACKAGE t_pkg AS
   FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2;
   PRAGMA RESTRICT_REFERENCES(showup, WNDS, RNDS);
END t_pkg;
/
-- create the package body
CREATE OR REPLACE PACKAGE BODY t_pkg AS
   FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2 IS
    v_val varchar2(1);
   BEGIN
      select dummy into v_val from dual;
      RETURN v_val;
   END;
END t_pkg;
/

Dulu SQL tidak mengizinkan Anda untuk memanggil suatu fungsi kecuali jika itu membuat janji seperti itu, tetapi pembatasan itu dibatalkan.

Saya lebih suka menjadikannya pembeda antara prosedur dan fungsi. Perlu diingat bahwa jika fungsi PL/SQL memunculkan pengecualian NO_DATA_FOUND, pernyataan SQL panggilan tidak akan gagal (karena tidak ada data yang ditemukan bukanlah kesalahan SQL). Jadi saya lebih suka menggunakan prosedur kecuali objek secara khusus dirancang untuk dipanggil dari SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbarui kueri yang dihasilkan salah

  2. SQL Memilih tanggal dengan penjualan maksimum untuk setiap departemen

  3. Mengapa saya tidak bisa menggunakan tipe yang ditentukan pengguna Oracle saya seperti ini?

  4. Bagaimana cara mendapatkan kunci yang dihasilkan dengan executeBatch tanpa ArrayIndexOutOfBoundsException?

  5. Kueri SQL untuk mengembalikan data hanya jika SEMUA kolom yang diperlukan ada dan bukan NULL