Nếu bạn muốn sử dụng rownum
và order by
bạn có để đặt thứ tự trong một truy vấn phụ. Không có cách nào khác để đảm bảo rằng bạn nhận được giá trị chính xác.
Đó cũng là một phương pháp hay để đối phó với khả năng có thể không có id
phù hợp với truy vấn của bạn. Tôi đã thêm một begin... end;
bổ sung để giải quyết vấn đề này.
declare
v_id a.id%type;
begin
begin
select id into v_id
from ( select id
from a
where name = 'test'
order by id desc )
where rownum < 2
;
exception when no_data_found then
v_id := null;
end;
dbms_output.put_line(v_id);
doSomething(v_id);
end;
/
Như @raukh đã lưu ý (trong khi tôi đang viết bài này!), Sự cố là print
, phải là dbms_output.put_line()