空值返回问题

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 值并忽略空值 - 使用前面的非空值填充空值

sql server中的CTE返回空值但不是NULL问题

调用 createUser() 时,Prisma 模式中的 fliend createdAt 返回空值

Mysql函数转换非空值

@ModelAttribute 使用 thymeleaf 返回空值

从预期返回非空值的方法返回 Null (UITableViewCell)