首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在执行plsql block返回查询结果时,如果没有找到DB.When数据中存在的数据,则查询结果不返回任何异常

。这是因为在PL/SQL中,如果查询语句没有找到匹配的数据,它不会引发异常,而是返回一个空的结果集。

PL/SQL是Oracle数据库的编程语言,用于编写存储过程、触发器、函数等数据库对象。当执行PL/SQL块中的查询语句时,如果没有找到匹配的数据,查询结果将为空。这意味着没有数据被返回,也不会引发异常。

这种行为在某些情况下可能是有意义的,因为有时我们只是想检查是否存在匹配的数据,而不需要对缺少数据的情况进行特殊处理。在这种情况下,我们可以使用PL/SQL的条件语句来处理查询结果为空的情况。

例如,我们可以使用IF语句来检查查询结果是否为空,并在需要时执行相应的逻辑:

代码语言:txt
复制
DECLARE
  v_count NUMBER;
BEGIN
  SELECT COUNT(*) INTO v_count FROM DB.When WHERE condition;

  IF v_count > 0 THEN
    -- 执行查询结果不为空时的逻辑
    DBMS_OUTPUT.PUT_LINE('数据存在');
  ELSE
    -- 执行查询结果为空时的逻辑
    DBMS_OUTPUT.PUT_LINE('数据不存在');
  END IF;
END;

在上面的例子中,我们使用COUNT函数获取匹配条件的数据行数,并将结果存储在变量v_count中。然后,我们使用IF语句检查v_count的值,如果大于0,则表示查询结果不为空,执行相应的逻辑。否则,执行查询结果为空时的逻辑。

对于PL/SQL开发,腾讯云提供了云数据库TDSQL和云原生数据库TencentDB for TDSQL等产品,用于存储和管理数据。您可以通过以下链接了解更多关于腾讯云数据库产品的信息:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Oracle总结【PLSQL学习】

(2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理命令,就有对应结果显示 SQL特点 (1)交互性强,非过程化 (2)数据库操纵能力强,只需发送命令,无需关注如何实现 (3)多表操作...程序:;号表示每条语句结束,/表示整个PLSQL程序结束 PLSQL与SQL执行有什么不同: (1)SQL是单条执行 (2)PLSQL是整体执行,不能单条执行,整个PLSQL结束用/,其中每条语句结束用...设置显示PLSQL程序执行结果,默认情况下,不显示PLSQL程序执行结果,语法:set serveroutput on/off; set serveroutput on; 使用基本类型变量,...IS SELECT 语句; 使用无参光标cursor,查询所有员工姓名和工资【如果需要遍历多条记录,使用光标cursor,无记录找到使用cemp%notfound】 declare -...我们在上面看PLSQL语法已经知道,有一个exception,这个Oracle称为例外,我们也可以简单看成就是Java异常。。。

2.3K70

【DB笔试面试611】Oracle,什么是结果集缓存?

结果集缓存可以将SQL语句查询结果存在内存(SGAShared Pool),从而显著地改进需要多次执行查询相同结果SQL语句性能。...所以,Result Cache只对那些平时几乎没有任何DML操作只读表比较有用,可以减轻I/O压力。 实际情况结果集缓存仅在少数情况下是有效。...以下情况结果集不会被缓存: ① 查询使用非确定性函数、序列和临时表结果集不会被缓存。 ② 查询违反了读一致性结果集将不会被缓存。 ③ 引用数据字典视图查询结果集不会被缓存。...l STATUS函数:返回值若为DISABLED表示没有开启结果集缓存;若为ENABLED表示已经开启并且可以使用结果集缓存;若为BYPASS表示已经开启结果集缓存但不可以使用结果集缓存,此时可以通过执行...如果是,那么函数就不用重新执行了,而是把缓存值简单返回即可。每当发现要修改是缓存所依赖表,数据库就会自动把缓存失效。 有两种函数缓存机制,分别是确定性函数缓存和函数结果集缓存。

1.9K20

PLSQL --> 动态SQL常见错误

1.使用动态DDL,不能使用绑定变量 下面的示例创建表示,使用了绑定变量:dno,执行时候收到了错误信息。...使用USING传递参数到动态SQL或使用INTO子句传递结果集到变量应注意按正确顺序排列处理 下面的示例由于v_ename与v_sal为不同数据类型,使用INTO不小心将顺序颠倒,导致错误产生...当然,如果数据类型相同, 且不会存在溢出情况下将没有错误提示。...RETURNING INTO返回 下面的示例,使用了动态单行SELECT查询,并且使用了RETURNING子句来返回值。...8.动态SQLRETURNING INTO返回DML操作结果,对于SELECT查询返回结果执行EXECUTE IMMEDIATE,直接使用INTO子句来传递。

2.1K20

Web-第二十四天 Oracle学习【悟空教程】

2.别名用法 查询结果可以使用别名 Select 列名 别名,列名别名,... from emp; 别名,有没有双引号区别就在于别名中有没有特殊符号或者关键字。 ?...LIKE如果没有关键字表示查询全部 ? 查询名字带有“M”雇员 ? oracle不等号用法可以有两种形式“”和“!=” 范例:查询雇员编号不是7369雇员信息 ? ?...2、用户赋权限 新创建用户没有任何权限,登陆后会提示 ? Oracle存在三个重要角色:connect角色,resource角色,dba角色。...序列 很多数据库中都存在一个自动增长列,如果现在要想在oracle 完成自动增长功能, 只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理。...is 结果变量 数据类型; begin return(结果变量); end[函数名]; 存储过程和存储函数区别 一般来讲,过程和函数区别在于函数可以有一个返回值;而过程没有返回值。

1.8K20

mysql 缓存机制

命中条件 缓存存在一个hash表,通过查询SQL,查询数据库,客户端协议等作为key,判断命中前,mysql不会解析SQL,而是使用SQL去查询缓存,SQL上任何字符不同,如空格,注释,都会导致缓存命中...工作流程 1.服务器接收SQL,以SQL和一些其他条件为key查找缓存表 2.如果找到了缓存,直接返回缓存 3.如果没有找到缓存,执行SQL查询,包括原来SQL解析,优化等。...4.执行完SQL查询结果以后,将SQL查询结果缓存入缓存表 缓存失败 当某个表正在写入数据这个表缓存(命中缓存,缓存写入等)将会处于失效状态,Innodb如果某个事务修改了这张表,这个表存在事务提交前都会处于失效状态...mysql需要设置单个小存储块大小,SQL查询开始(还未得到结果就去申请一块内存空间,所以即使你缓存数据没有达到这个大小也需要这个大小数据块去保存(like linux filesystem’...: 如果某个数据表被锁住,是否仍然从缓存返回数据,默认是OFF,表示仍然可以返回 GLOBAL STAUS 关于 缓存参数解释: Qcache_free_blocks: 缓存池中空闲块个数

2.5K20

Oracle查看分析执行计划、建立索引以及SQL优化

) 对非唯一索引列上进行任何查询 c) INDEX FULL SCAN(索引全扫描): 进行全索引扫描查询数据都必须从索引可以直接得到(注意全索引扫描只有CBO模式下才有效) ------...不过遗憾是,由于返回结果集中包括所有字段,所以通常执行计划,即使连接列存在索引,也不会进入到执行计划,除非进行一些特定列处理(如仅仅只查询有索引列等)。...如果该Bucket为空,丢弃匹配表这条数据如果不为空,则需要看该Bucket是在内存里还是磁盘上。...如果在内存,就直接访问这个Bucket并检查其中数据是否匹配,有匹配的话就返回这条查询结果。...SQL 语句优化 当Oracle数据库拿到SQL语句,其会根据查询优化器分析该语句,并根据分析结果生成查询执行计划。也就是说,数据库是执行查询计划,而不是Sql语句。

3.4K20

PLSQ编程

如果游标查询语句中带有FOR UPDATE选项,OPEN 语句还将锁定数据库表中游标结果集合对应数据行。...如果在游标查询语句选择列表存在计算列,必须为这些计算列指定别名后才能通过游标FOR 循环语句中索引变量来访问这些列数据 --获取emp表中所有员工信息 declare cursor...SQL命令执行完毕立即关闭隐式游标。 –删除EMP 表某部门所有员工,如果该部门没有员工,则在DEPT 表删除该部门。...程序单元 是数据命名PL/SQL块,作为数据库对象保存在数据。...主要有四类:过程:执行特定操作,无返回值;函数:执行复杂操作,有返回值包:逻辑上相关过程和函数组合体触发器:事件触发,执行相应操作 ORACLE 提供可以把PL/SQL 程序存储在数据,并可以在任何地方来运行它

1.5K10

2018-07-12 Oracle for update和for update nowait区别Oracle for update和for update nowait区别

: 首先一点,如果只是select 的话,Oracle是不会加任何,也就是Oracle对 select 读到数据不会有任何限制, 虽然这时候有可能另外一个进程正在修改表数据,并且修改结果可能影响到你目前...如果加入了for update, Oracle一旦发现(符合查询条件)这批数据正在被修改,则不会发出该select语句查询,直到数据被修改结束(被commit),马上自动执行这个select语句。...如果仅仅用update语句来更改数据,可能会因为加上锁而没有响应地、莫名其妙地等待,但如果在此之前,for update NOWAIT语句将要更改数据试探性地加锁,就可以通过立即返回错误提示而明白其中道理...经过测试,以for update 或 for update nowait方式进行查询加锁,select结果集中,只要有任何一个记录在加锁,整个结果集都在等待系统资源(如果是nowait,抛出相应异常...: 资源已被占用; 执行操作出现 WAIT 超时 通过这段代码案例,我们可以得到结论,for update of columns 用在多表连接锁定时,可以指定要锁定是哪几张表,而如果没有for

1.6K20

Oracle学习笔记四

写java程序中有集合概念,那么pl/sq也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回多条数据。...系统定义异常 no_data_found(没有找到数据) too_many_rows( (select.into语句匹配多个行)   zero_ divide(被零除)   value_error(...,一组为了完成特定功能SQL句集,经编译后存储在数据,用户通过指定存储过程名字并给出参数(如果该存储过程带有参数)来执行它。...is 结果变量 数据类型 begin return(结果变量); end[函数名]; 存储过程和存储函数区别:   一般来讲,过程和函数区别在于函数可以有一个返回值,而过程没有返回值;   ...每当一个特定数据操作语句( insert, update, delete)指定表上发出, Oracle自动地执行触发器定义语句序列。

1.3K31

Spark Block存储管理分析

先从BlockManager获取该blockId对应数据是否存在如果本地存在(已经处理过),直接返回Block结果(BlockResult);否则,查询远程Executor是否已经处理过该Block...,就不需要重新计算了,如果没有找到对应已经处理过Block数据调用RDDcompute()方法进行处理,处理结果根据StorageLevel设置,将Block数据存储在内存或磁盘上,缓存供后续...从本地获取,根据StorageLevel设置,如果是存储在内存,则从本地MemoryStore查询存在读取并返回如果是存储磁盘上,则从本地DiskStore查询存在读取并返回。...Task请求读取Block数据 如果Block数据存在直接返回空,表示当前RDD该Partition并没有被处理过。...如果当前Block数据存在,并且没有其他Task写,表示已经完成了些Block数据操作,该Task直接读取该Block数据

1.4K100

【史上最详解】Oracle数据库各种锁 - 看完这篇就够了!

Oracle 数据,它并不是对某个表加上锁或者某几行加上锁, 锁是以数据一个属性存在。...事务修改块(其实就是修改行)会检查行 row header 标志位,如果该标志位为0(该行没有被活动事务锁住),就把该标志位修改为事务该块获得itl序号,这样当前事务就获得了对记录锁定...如果此时其他用户对上面返回结果数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。 1:对返回结果集进行update或delete操作会发生阻塞。 左下角时间执行了很久。 ?...---- Select … for update 当一个用户执行 select..for update 对返回结果集进行修改时,如 果结果集已经被另一个会话锁定,此时 Oracle 已经对返回结果集上加了排它行级锁...特别是 OLAP 系统,从表经常会是非常巨大表,在这种情况下,如果从表没有索引,那么查询几乎是不可想象

14.9K85

oracle基本面试题_mongodb面试题

显示游标是用cursor…is命令定义游标,它可以对查询语句(select)返回多条记录进行处理;隐式游标是执行插入 (insert)、删除(delete)、修改(update)和返回单条记录查询...函数return返回没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数建议使用存储过程 4). sql数据操纵语句中只能调用函数而不能调用存储过程 4....简言之就是存在加了锁而没有解锁,可能是使用锁没有提交或者回滚事务,如果是表级锁则不能操作表,客户端处于等状态,如果是行级锁则不能操作锁定行 解决办法: 1)....如果把体现企业规则 运算放入存储过程当企业规则发生变化时,只要修改存储过程就可以了,应用程序无须任何变化。 缺点: 1. 可移植性差 2....; 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值;两者都可以通过out参数返回值, 如果需要返回多个参数建议使用存储过程;sql数据操纵语句中只能调用函数而不能调用存储过程

3.3K20

oracle操作

嵌套时候,最内层函数最先被执行执行结果被传递到它上层函数,作为参数使用,然后依次从内向外执行,直到所有的函数执行完。...例如:执行一个查看当前日期语句 select sysdate from dual,这条语句放在放在任何一个oracle数据库当中都不会报错, 所以一般做一些特定查询时候用这个表是最稳妥。...put_line函数来输出内容 end; 注意,如果在sqlplus,需要执行set serveroutput on来开启显示结果 5.pl/sql执行命令 PL/SQL程序块可以使用各种...只能使用in模式参数传入参数值 函数声明,必须包括一个带有数据类型RETURN 子句,表示函数计算后最终返回函数结果类 型。...PL/SQL块至少包括一个有效RETURN语句,以便返回函数最终计算结果

1.5K20

oracleuserenv和nls_lang详解

最后看下plsql上userenv执行结果 ? 可以发现在windows上使用plsql时候语言和地区使用plsql环境变量NLS_LANG。...如果Oracle通用安装程序没有指定NLS_LANG,默认值是AMERICAN_AMERICA.US7ASCII 如果language没有指定,language默认值是AMERICAN 如果territory...如果charset没有指定,则在创建session时候charset值是数据characterset。...由以上分析可知,不管是什么样客户端程序(不管是plsql还是sqlplus),创建会话时候字符都是取数据库本身字符集。因此客户端程序和session字符集不一致时候会产生转码。...如果转码过程中出现了字节损失,存储真实数据就是损失之后数据。至于我们看到乱码是因为存储数据会在查询时候再次转码成客户端程序字符集,由于数据缺失,因此就乱码了。

1.8K20

Oracle调优之看懂SQL执行计划explain

t 不过如果是使用PLSQL的话,那就可以使用PLSQL提供查询执行计划了,也就是按F5 打开PLSQL工具 -> 首选项 -> 窗口类型 -> 计划窗口 ,在这里加入执行计划需要参数...ROWID是一个伪列,数据库里并没有这个列,它是数据查询过程获取一个物理地址,用于表示数据对应行数。...,也可以并行执行 索引全扫描会按照叶子块排序返回,而索引快速全扫描则是按照索引段内存储块顺序返回 索引快速全扫描执行结果不一定是有序,而索引全扫描执行结果是有序,因为索引快速全扫描是根据索引行在磁盘物理存储顺序来扫描...***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些where条件没有目标索引前导列指定查询条件但是有索引非前导列指定查询条件目标SQL依然可以使用跳跃索引 如图执行计划就有...笛卡尔连接(Cross join) 如果两个表做表连接而没有连接条件,而会产生笛卡尔积,实际工作应该尽可能避免笛卡尔积 对于这些连接详细介绍可以查看《收获,不止sql调优》一书,或者查看我做读书笔记

7.2K21

PLSQL基础语法

这时候用一下SQL语句块就可以了。 如果你用是Oracle数据库,那么你就可以用PL/SQL(Procedure Language/SQL),即过程化查询语言。这是第三代语言。...但如果MYSQL/SQLSERVER数据,那PL/SQL就无法使用(PL/SQL是属于Oracle过程查询语言)。...如果你要在MYSQL/SQLSERVER实现复杂逻辑查询,那你只能通过编写存储过程实现。 下面对PL/SQL常用一些基础知识进行讲解。...id = 3; commit; END; --查看 select * from t_plsql_test; 二、PL/SQL基本规则 1、标识符区分大小写,所有的名称存储自动改成大写。...至于非预定义异常和自定义异常这里不做介绍。一般情况下,我们可以存储过程异常处理模块中将出错信息保存到特定系统表,这样我们就可以根据日志记录得知执行错误。

2.5K110

Oracle SQL调优系列之看懂执行计划explain

t 不过如果是使用PLSQL的话,那就可以使用PLSQL提供查询执行计划了,也就是按F5 打开PLSQL工具 -> 首选项 -> 窗口类型 -> 计划窗口 ,在这里加入执行计划需要参数 找个...SQL,用PLSQL执行一下,这是plsql简单使用 解释一下这些参数意思: 基数(Rows):Oracle估计的当前步骤返回结果集行数 字节(Bytes):执行SQL对应步骤返回字节数...ROWID是一个伪列,数据库里并没有这个列,它是数据查询过程获取一个物理地址,用于表示数据对应行数。...***复合B树索引***(包括唯一性索引和非唯一性索引),索引跳跃式扫描可以使那些where条件没有目标索引前导列指定查询条件但是有索引非前导列指定查询条件目标SQL依然可以使用跳跃索引 如图执行计划就有...笛卡尔连接(Cross join) 如果两个表做表连接而没有连接条件,而会产生笛卡尔积,实际工作应该尽可能避免笛卡尔积 对于这些连接详细介绍可以查看《收获,不止sql调优》一书,或者查看我做读书笔记

71610

PLSQL --> 异常处理(Exception)

为了提高程序健壮性,可以PL/SQL块引 入异常处理部分,进行捕捉异常,并根据异常出现情况进行相应处理。 一、异常类型 ORACLE异常分为两种类型:系统异常、自定义异常。...没有找到数据 DUL_VAL_ON_INDEX 试图一个有惟一性约束列上存储重复值 CURSOR_ALREADY_OPEN 试图打开一个已经打开游标 TOO_MANY_ROWS SELECT...查询结果是多值 ZERO_DIVIDE 零被整除 2.非预定义异常 ORACLE为它定义了错误编号,但没有定义异常名字。...自定义异常与Oracle错误没有任何关系,有开发人员为特定情况所定义例外 下面的例子当输入empno为时,尽管该雇员编号不存在,但PL/SQL代码并未给出适当提示 scott@ORCL>...对于自定义异常处理需要显示触发,其步骤如下 a.定义异常(declare部分进行定义) b.显示触发异常(执行BEGIN部分触发异常,使用RAISE语句) c.引用异常(EXCEPTION

1.4K10
领券