空值返回问题
Posted
技术标签:
【中文标题】空值返回问题【英文标题】:Null value return problem 【发布时间】:2009-08-10 07:46:48 【问题描述】:我想查看我的每月工资单,其中包含员工工资以及其他详细信息。
我已经创建了一个 PL/SQL 块,但是当我将检查现有员工 ID 的条件与另一个表一起放置时,一些返回空值,因此我的表不会更进一步。
set serveroutput on
declare
emp_id NUMBER :=&emp;
temp NUMBER;
begin
select nvl(employee_id,10) into temp FROM bhavya_temp where bhavya_temp.employee_id=emp_id;
dbms_output.put_line(temp);
if temp is NULL
then
dbms_output.put_line('employee ID does not exist');
else
dbms_output.put_line('bye');
end if;
end;
当我输入表中存在的员工 ID 1 或 2 时,结果是
anonymous block completed
1
bye
当我输入不存在的3个或更多时
Error report:
ORA-01403: no data found
ORA-06512: at line 6
01403. 00000 - "no data found"
*Cause:
*Action:
提前感谢您的帮助。
【问题讨论】:
你想要发生什么? 【参考方案1】:我从来没有写过任何 PL/SQL,但是a very similar error is reported here。
看起来您可以通过将 SELECT ... INTO 部分放在 BEGIN ... EXCEPTION .. END 块内来解决问题。
希望这会有所帮助。
【讨论】:
【参考方案2】:使用一些示例数据创建表语句会很有帮助,这样可以重现问题。
对于问题:如果具有 ID 的行不存在,您将获得 ORA-1403。没有数据,没有要转换的NULL。 Oracle 不会为您排忧解难。
【讨论】:
【参考方案3】:将您的 select 语句包装在异常块中并捕获“未找到数据”异常,并采取相应措施
【讨论】:
以上是关于空值返回问题的主要内容,如果未能解决你的问题,请参考以下文章
返回 MIN 和 MAX 值并忽略空值 - 使用前面的非空值填充空值
调用 createUser() 时,Prisma 模式中的 fliend createdAt 返回空值