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;