ORA-01403:未找到数据 ORA-06512:在第 8 行 01403。00000 -“未找到数据”
Posted
技术标签:
【中文标题】ORA-01403:未找到数据 ORA-06512:在第 8 行 01403。00000 -“未找到数据”【英文标题】:ORA-01403: no data found ORA-06512: at line 8 01403. 00000 - "no data found" 【发布时间】:2020-10-20 20:43:18 【问题描述】:通常,这个基本的 If 语句应该返回数据,但我不明白,我在哪里犯了错误。 (CustNo 是 char(8)。)我认为问题的出现是因为 V_Id。在这个 Custno='C2388597' 的通常选择语句中,我可以得到数据。但是当它在 If 语句中时,它给出了 ORA-01403 错误代码。
提前感谢您的支持...
Declare
V_Id Deneme_Customer.Custno%type;
V_Custbal Deneme_Customer.Custbal%Type;
v_situation Deneme_Customer.Custbal_Situation%type;
Begin
Select Custno, Custbal, Custbal_Situation Into V_Id, V_Custbal, V_Situation
From Deneme_Customer Where V_Id ='&no';
If (V_Custbal>=20 And V_Custbal<=100) Then
V_Situation:='Es tut mir sehr leid';
Elsif (V_Custbal>=101 And V_Custbal<=1000) Then
V_Situation:='Guuuut';
Elsif (V_Custbal>1000) Then
V_Situation:='Sehr Guuuut';
Else Dbms_Output.Put_Line('Falsche Eingabe');
End If;
update Deneme_Customer set Custbal_Situation=v_situation where Custno=V_Id;
end;`
【问题讨论】:
BEGIN DBMS_OUTPUT.PUT_LINE( '"&no;"' ); END;
输出什么?是否有任何尾随空格?
【参考方案1】:
我想v_id
,它是一个局部变量,是Custno
,它是你表格的一列,在第8行。
Custno
与 '&no'
的不匹配值可能仍需要异常处理,例如
Begin
Select Custno, Custbal, Custbal_Situation Into V_Id, V_Custbal, V_Situation
From Deneme_Customer
Where Custno = '&no';
Exception When no_data_found then null;
End;
【讨论】:
我已经添加了异常块,现在我没有任何错误消息,但我也没有任何结果。它应该返回 1 行数据。并且 Custno 和 V_id 有 CHAR(8) 类型。 您是否在 where 条件 @dwh_asil 中将V_Id
替换为 Custno
?顺便说一句,对不起,我认为 custno 不是整数类型,所以请保留引号。
没问题。感谢您的所有支持。我刚刚更换了它们,不幸的是没有任何错误但也没有任何更新。同时我将 Custno 列修改为 Varchar2,但它也没有改变任何东西。【参考方案2】:
您无需使用 PL/SQL 来确定应该将 custbal_situation 设置为什么,您可以使用如下简单的更新语句轻松完成:
UPDATE deneme_customer
SET custbal_situation =
CASE
WHEN custbal >= 20 AND custbal <= 100 THEN 'Es tut mir sehr leid'
WHEN custbal >= 101 AND custbal <= 1000 THEN 'Guuuut'
WHEN custbal > 1000 THEN 'Sehr Guuuut'
END
WHERE custbal >= 20;
如果您想将其修改为仅影响一位客户,只需将其添加到 where 子句中即可。
然后要查看任何未设置其值的客户,您可以使用类似这样的查询找到他们
SELECT custno, custbal, custbal_situation
FROM deneme_customer
WHERE custbal < 20;
【讨论】:
感谢您的支持。我知道我可以通过多种方式做到这一点,但在这里我正在尝试/学习使用 If 语句和带变量的语句。由于这个原因,我做的有点复杂。【参考方案3】:看起来您可能没有任何匹配 Where V_Id ='&no' 的行,只是为了测试它从表 Where V_Id ='&no' 中选择计数并检查计数。
您的 V_Id 也是一个唯一列,如果不是,那么您需要在错误处理程序中处理与 where 子句匹配的多行的情况。
exception
when no_data_found then
<handle apppropriately>
when TOO_MANY_ROWS then
<handle apppropriately>
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE
('Unknown error');
end
【讨论】:
V_id 是唯一列,并且任何行都匹配其中 v_id=no。当我检索到 SELECT COUNT 时也是如此。使用异常块,我没有出现任何错误,但表中仍然没有任何变化。以上是关于ORA-01403:未找到数据 ORA-06512:在第 8 行 01403。00000 -“未找到数据”的主要内容,如果未能解决你的问题,请参考以下文章
ORA-01403 - 未找到数据 - 即使游标 SELECT 语句运行良好