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

Apakah mungkin menggunakan sql%rowcount untuk SELECT?

Ya, Anda dapat menggunakan SQL%ROWCOUNT . Ini valid di PL/SQL.

Namun, dalam PL/SQL hasil kueri Anda harus pergi ke suatu tempat mis. ke dalam tabel PL/SQL. PL/SQL tidak akan pernah mengirimkan hasilnya ke output (terminal, jendela dll). Jadi SELECT * FROM tidak akan berfungsi.

Kode Anda dapat terlihat seperti ini:

DECLARE
  TYPE emp_t ...;
  emp_tab emp_t;

BEGIN
  SELECT *
  BULK COLLECT INTO emp_tab
  FROM emp
  WHERE empname = 'Justin' AND dept='IT';

  IF sql%rowcount > 0 THEN
    .. do something ...
  END IF;
END;
/

Perbarui :

Pertanyaan yang diperbarui menunjukkan bahwa Anda mencari sesuatu yang lain.

Opsi 1:Gunakan pengecualian

Jika ada 0 baris atau lebih dari 1 baris, kasus ini ditangani secara terpisah (sebagai kesalahan):

BEGIN
  select PORT_NUMBER,STATIC_IP into outport, outIP
  from TINST
  where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y';

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    outretvalue := -12;
    RETURN;

  WHEN TOO_MANY_ROWS THEN
    outretvalue := -13;
    RETURN;
END;

Opsi 2:Gunakan agregasi

Menggunakan agregasi, kueri akan selalu mengembalikan tepat satu baris. Jika sekarang baris sumber cocok dengan klausa WHERE, maka kedua nilai hasil akan menjadi NULL. Jika ada klausa WHERE yang cocok lebih dari satu baris, maka yang diambil maksimal.

Perhatikan bahwa kueri ini mungkin mengembalikan nomor port dan alamat IP yang awalnya tidak berada di baris yang sama.

select MAX(PORT_NUMBER), MAX(STATIC_IP) into outport, outIP
from TINST
where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y';

IF outport IS NULL OR outIP IS NULL THEN
    outretvalue := -12;
    RETURN;
END IF;

Opsi 3:Gunakan ROWNUM

Kueri ini mengembalikan paling banyak satu baris. Jika tidak ada baris yang cocok dengan klausa WHERE, pengecualian dilempar dan perlu ditangani:

BEGIN
  select PORT_NUMBER, STATIC_IP into outport, outIP
  from TINST
  where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y'
  AND ROWNUM = 1;

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    outretvalue := -12;
    RETURN;

END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan Rownum mengembalikan baris yang berbeda daripada tanpanya

  2. Menyebarkan dan Mengonfigurasi ODP.NET agar berfungsi tanpa instalasi dengan Entity Framework

  3. Fungsi JSON_OBJECT() di Oracle

  4. Tampilan Terwujud - Oracle / Data tidak diperbarui

  5. Paging dengan Oracle dan sql server dan metode paging generik