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

Pengecualian NO_DATA_FOUND tidak dilempar saat digunakan dalam SELECT INTO

Contoh minimalnya adalah:

CREATE FUNCTION raise_exception RETURN INT
IS
BEGIN
  RAISE NO_DATA_FOUND;
END;
/

Jika Anda melakukannya:

SELECT raise_exception
FROM   DUAL;

Anda akan mendapatkan satu baris berisi NULL nilai - Tanya Tom menyatakan:

dan kemudian ditindaklanjuti dengan:

Jadi pengecualian dimunculkan dalam fungsi dan klien SQL melihat ini dan menafsirkan ini karena tidak ada data yang merupakan NULL nilai dan "menangani" pengecualian.

Jadi

DECLARE
  variable_name VARCHAR2(50);
BEGIN
  SELECT raise_exception
  INTO   variable_name
  FROM   DUAL
END;
/

Akan berhasil sebagai DUAL tabel memiliki satu baris dan pengecualian dari fungsi akan ditangani (diam-diam) dan variabel akan berakhir berisi NULL nilai.

Namun,

BEGIN
  DBMS_OUTPUT.PUT_LINE( raise_exception );
END;
/

Pengecualian kali ini diteruskan dari fungsi ke ruang lingkup PL/SQL - yang tidak menangani kesalahan dan meneruskan pengecualian ke blok penangan pengecualian (yang tidak ada) sehingga kemudian diteruskan ke ruang lingkup aplikasi dan menghentikan eksekusi program.

Dan Ask Tom menyatakan:

Sekarang, jika kita mengubah fungsi untuk memunculkan pengecualian yang berbeda:

CREATE OR REPLACE FUNCTION raise_exception RETURN INT
IS
BEGIN
  RAISE ZERO_DIVIDE;
END;
/

Kemudian keduanya:

SELECT raise_exception
FROM   DUAL;

dan:

BEGIN
  DBMS_OUTPUT.PUT_LINE( raise_exception );
END;
/

tidak tahu bagaimana menangani pengecualian dan mengakhiri dengan ORA-01476 divisor is equal to zero .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PLS-00049 VARIABEL PENGIKAT BURUK

  2. Setara dengan tabel eksternal Oracle di SQL Server

  3. Oracle:Cara Tercepat di PL/SQL untuk Melihat apakah Ada Nilai:Daftar, VARRAY, atau Tabel Temp

  4. Oracle Query memberikan kesalahan

  5. permintaan oracle untuk menemukan hak istimewa pada prosedur tersimpan