两个异常给出plsql块中的错误
如果表中有任何K状态,我需要返回。当并没有K状态时,它不会返回任何行,所以进入部分会给出错误。因此,我添加了一个异常,并最终得到0 status_count,但这次在plsql块的末尾有一个最终异常 当查询不返回行时,我应该返回0还是需要处理2个异常?有什么建议吗两个异常给出plsql块中的错误,plsql,oracle11g,Plsql,Oracle11g,如果表中有任何K状态,我需要返回。当并没有K状态时,它不会返回任何行,所以进入部分会给出错误。因此,我添加了一个异常,并最终得到0 status_count,但这次在plsql块的末尾有一个最终异常 当查询不返回行时,我应该返回0还是需要处理2个异常?有什么建议吗 BEGIN SELECT COUNT(1) INTO v_status_count FROM tablename WHERE STATUS = 'K' AND ACCOUNT_NUMBER = o_accou
BEGIN
SELECT COUNT(1) INTO v_status_count
FROM tablename
WHERE STATUS = 'K'
AND ACCOUNT_NUMBER = o_account_number
GROUP BY STATUS;
EXCEPTION WHEN NO_DATA_FOUND THEN
v_status_count := 0;
IF v_status_count > 0 THEN
o_status := 'Y';
END IF;
EXCEPTION WHEN OTHERS THEN
o_result := 1;
END;
不要等待你想要实现的,但是
DECLARE
v_status_count NUMBER :=0;
BEGIN
SELECT COUNT(1) INTO v_status_count
FROM tablename
WHERE STATUS = 'K'
AND ACCOUNT_NUMBER = o_account_number
GROUP BY STATUS;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_status_count := 0;
WHEN OTHERS THEN
o_result := 1;
END;
删除您的
group by
子句,在这种情况下不需要它不幸的是,您正在寻找的内容有点不清楚。在下面的示例中,我假设您想知道数据库中是否存在帐号和状态组合
数据设置
create table accounts (
account_number number,
status varchar2(1)
);
insert into accounts values (1, 'K');
insert into accounts values (2, 'L');
select * from accounts;
ACCOUNT_NUMBER S
-------------- -
1 K
2 L
程序
create or replace procedure get_account_status(
p_account_number in number,
p_status in varchar2,
o_status out varchar2,
o_result out number
) is
v_count number;
begin
-- the select that never throws:
-- v_count = 0 if no account with requested status found
-- v_count = 1 if at least one row with account and status is found
-- note rownum = 1 is valid restriction as it's enough to know that at least
-- one row exists
select count(*)
into v_count
from accounts
where status = p_status
and account_number = p_account_number
and rownum = 1;
-- adjust the return/output value(s) as you like
if v_count = 1 then
o_status := 'Y';
o_result := 1;
else
o_status := 'N';
o_result := 0;
end if;
end;
/
show errors
试块和结果
declare
v_status varchar2(1);
v_result number;
begin
get_account_status(1, 'K', v_status, v_result);
dbms_output.put_line('v_status = ' || v_status ||
'; v_result = ' || v_result);
get_account_status(2, 'K', v_status, v_result);
dbms_output.put_line('v_status = ' || v_status ||
'; v_result = ' || v_result);
get_account_status(3, 'K', v_status, v_result);
dbms_output.put_line('v_status = ' || v_status ||
'; v_result = ' || v_result);
end;
/
v_status = Y; v_result = 1
v_status = N; v_result = 0
v_status = N; v_result = 0
PL/SQL procedure successfully completed.
Alex,这不是真的,当你将
count
与groupby
组合时,你可以得到零行,例如。g<代码>从dual中选择count(*),其中dummy='Y'按dummy分组我删除了分组依据。可以,但在不返回行时仍无法处理。我只能通过捕获“未找到数据”异常来处理它。我解决了最终异常和内部异常之间的冲突,用begin-end包围了我的控件。请提供过程的全文及其标题