Я использую эту хранимую процедуру, в которой я проверяю, содержит ли курсор какие-либо данные, и если он имеет 0 записей, то выдает исключение, иначе данные возвращаются в вывод.
CREATE OR replace PROCEDURE user_details(v_ownerid IN NUMBER,
v_branchcode IN NVARCHAR2,
v_login IN NVARCHAR2,
cv_1 OUT SYS_REFCURSOR)
IS
result_out1 SYS_REFCURSOR;
v_territoryid NUMBER(10);
v_user NUMBER(10);
CURSOR cc IS
SELECT Z.username AS USERNAME,
Z.loginid AS LOGINID,
Z.userid AS CRMUSERID
FROM userterritory U
inner join teammembers T
ON U.ownerid = T.ownerid
AND U.userid = T.memberid
inner join az_user Z
ON Z.appownerid = T.ownerid
AND Z.userid = T.memberid;
TYPE tbl_join
IS TABLE OF cc%ROWTYPE;
l_table TBL_JOIN;
BEGIN
SELECT regionid
INTO v_territoryid
FROM regions
WHERE ownerid = v_ownerid
AND categorytype = 3
AND code = v_branchcode;
SELECT userid
INTO v_user
FROM az_user
WHERE appownerid = v_ownerid
AND loginid = v_login;
OPEN result_out1 FOR
SELECT Z.username AS USERNAME,
Z.loginid AS LOGINID,
Z.userid AS CRMUSERID
FROM userterritory U
inner join teammembers T
ON U.ownerid = T.ownerid
AND U.userid = T.memberid
inner join az_user Z
ON Z.appownerid = T.ownerid
AND Z.userid = T.memberid
WHERE Z.appownerid = v_ownerid
AND T.reportsto = v_user
AND U.territoryid = v_territoryid; --using whereClause;
FETCH result_out1 bulk collect INTO l_table;
-- FETCH result_out1 bulk collect INTO l_table;
dbms_output.Put_line('Count '
|| l_table.count);
IF l_table.count > 0 THEN
OPEN cv_1 FOR
SELECT Z.username AS USERNAME,
Z.loginid AS LOGINID,
Z.userid AS CRMUSERID
FROM userterritory U
inner join teammembers T
ON U.ownerid = T.ownerid
AND U.userid = T.memberid
inner join az_user Z
ON Z.appownerid = T.ownerid
AND Z.userid = T.memberid
WHERE Z.appownerid = v_ownerid
AND T.reportsto = v_user
AND U.territoryid = v_territoryid;
ELSE
Raise_application_error(-20001, 'Data Not Found.');
END IF;
END;
Эта хранимая процедура вызывает исключение, если данные отсутствуют. Но вместо того, чтобы возвращать пользовательское сообщение об исключении, оно возвращает системное исключение:
ORA-01403: данные не найдены
Я что-то здесь не так делаю? Есть ли какие-либо изменения, которые необходимо сделать, чтобы вернуть сообщение об исключительной ситуации, т. Е. «Данные не найдены»? Я собираюсь изменить это сообщение. Ранее я использовал ниже SP, но он не возвращал никаких сообщений об ошибках в случае 0 записей, потому что я сделал изменения, как указано в хранимой процедуре:
CREATE OR replace PROCEDURE user_details(v_ownerid IN NUMBER,
v_branchcode IN NVARCHAR2,
v_login IN NVARCHAR2,
cv_1 OUT SYS_REFCURSOR)
AS
v_territoryid NUMBER(10);
v_user NUMBER(10);
BEGIN
SELECT regionid
INTO v_territoryid
FROM regions
WHERE ownerid = v_ownerid
AND categorytype = 3
AND code = v_branchcode;
SELECT userid
INTO v_user
FROM az_user
WHERE appownerid = v_ownerid
AND loginid = v_login;
OPEN cv_1 FOR
SELECT Z.username AS USERNAME,
Z.loginid AS LOGINID,
Z.userid AS CRMUSERID
FROM userterritory U
inner join teammembers T
ON U.ownerid = T.ownerid
AND U.userid = T.memberid
inner join az_user Z
ON Z.appownerid = T.ownerid
AND Z.userid = T.memberid
WHERE Z.appownerid = v_ownerid
AND T.reportsto = v_user
AND U.territoryid = v_territoryid;
END;