`
莫生气
  • 浏览: 866767 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle中判断是否存在记录

阅读更多


很多人喜欢用这样的方法来判断是否存在记录:
select count(*) into t_count from t where condition;
if t_count> 0 then ....

这种方法的问题在于:我们需要的仅仅是是否存在,而不是得到总记录数。查询记录总数付出了不必要的性能代价。

两种情况:
1. 如果判断是否存在记录后, 要查询记录中的某些列的信息,或者是决定要对表进行insert/update操作,典型的操作为:
a.

select count(*) into t_count from t where condition;

if t_count> 0 then

   select cols into t_cols from t where condition;

else

   otherstatement;

end;

b.

select count(*) into t_count from t where condition;

if t_count> 0 then

  update ...;

else

  insert ...;

end;

这两种操作,都可以采用直接操作,然后进行例外处理的方式,根本就不进行这个存在性判断!改写后的a.

begin

  select cols into t_cols from t where condition;

exception

  when no_data_found then begin

    statement-block2;

  end;

  when others then begin

    raise error...

  end;

end;

改写后的b.

update t set ... where condition;

IF SQL%NOTFOUND THEN

  insert into t ...

END IF;

或者:

begin

  insert into t ...

exception

  when DUP_VAL_ON_INDEX then begin

    update t set ...

  end;

end;

这两种方法使用哪一种,取决于你认为哪种情况出现的可能更高。2. 如果判断是否存在记录来决定是否进行其它操作, 如下例

select count(*) into t_count from t where condition;

if t_count> 0 then ....

则可以改成这样的语句:

select count(*) into t_count from dual where exists(select 1 from t where condition);

if t_count> 0 then ....

使用改写后的语句,多数情形下应该会有比原来的语句更好的性能。(当然, 如果你要查询的表本身是一个单行或只有几行记录的表, 直接查询应该会更好)
分享到:
评论
1 楼 benjaminz 2009-08-04  
楼主,其实oracle里可以使用这种方法提高速度
select count(*) into t_count from t where condition and rownum=1;
如果取出来的t_count=1则说明记录存在
这样的速度非常快
你可以试试

相关推荐

    oracle判断表名是否存在

    至于提供的压缩包文件名称列表,"JasperReports结合iReport制作报表教程.pdf"和"用Hibernate和Spring开发持久层.pdf",它们与Oracle判断表名是否存在这一主题没有直接关联。JasperReports是一个报表生成工具,...

    Oracle中如何用SQL检测字段是否包括中文字符

    首先我想到的是采用检测每个字节ASCII的方式,这样的话需要写一个自定义函数,然后SQL中调用得到结果。但是感觉这个方法估计很耗时,毕竟每个字符都要比较,所以没有去实现。突然想到Oracle有一个编码转换的函数叫...

    oraclesql判断值为空-Oracle-sqlserver的空值(null)判断.pdf

    Oracle SQL 判断值为空OrNull 判断 Oracle SQL 中判断值为空...在 Oracle 和 SQL Server 中,我们可以使用 `NVL` 和 `ISNULL` 函数来判断值为空或 Null,並使用 `isNull` 和 `is not null` 来判断值是否为空或 Null。

    Oracle删除表前判断表名是否存在若存在则删除

    本文将详细讲解如何在Oracle中判断表是否存在并根据结果执行删除操作。 首先,我们需要理解Oracle中用于查询数据库对象信息的SQL语句。在Oracle中,`USER_TABLES` 数据字典视图存储了当前用户的所有表的信息,包括...

    Oracle存在修改,不存在插入记录

    Oracle这名字对我来说是如此的熟悉,但是对其内容却很陌生,近公司的一个项目用起了Oracle,所以也开始高调的用起了Oracle。在没有接触Oracle之前,听很多人都说Oracle的语法与MS SQL差不多,我在朋友圈里也帮着吹嘘...

    Oracle删除表、字段之前判断表、字段是否存在

    本文将深入探讨如何在Oracle中进行这些判断,并提供示例代码来演示如何安全地执行删除操作。 首先,让我们讨论如何在删除表之前判断表是否存在。在Oracle中,`USER_TABLES`数据字典视图存储了用户当前模式下的所有...

    oracle 关于字符串中带有逗号间隔的查询.doc

    在Oracle数据库中,进行字符串查询时,特别是当字符串中包含逗号等特殊字符时,我们需要巧妙地使用SQL的LIKE操作符来实现精确匹配。这里,我们面对的问题是想要查询DWDH字段中含有"飞信"但不包含"移动飞信"或"飞信...

    判断记录是否存在,取某个特定字段值,取多个字段值

    它的主要任务是根据提供的SQL查询语句来获取一个记录中的所有指定字段的值。输入参数包括`sSql`(SQL查询字符串)、`sFields`(一个字符串数组,用于存储字段值)和`Conn`(数据库连接对象)。函数首先创建一个`...

    Oracle中比对2张表之间数据是否一致的几种方法

    ### Oracle中比对两张表之间数据是否一致的几种方法 #### 概述 在Oracle数据库管理中,确保数据的一致性和准确性是非常重要的任务之一。在实际应用中,可能需要经常对比两个表之间的数据是否一致,这有助于发现并...

    oracle 不存在dual情况下注入.doc

    文档中提到,可以通过尝试特定的SQL查询来判断是否为Oracle数据库。例如: - `and(select count(1) from sysobjects) > 0 and 1=1` - `and(select count(table_name) from user_tables) > 0 and 1=1` #### 应对`...

    oracle中exists_和in的效率问题详解

    3. EXISTS 可以使用在 WHERE 子句中,以判断子查询是否存在记录。 IN 的使用场景和机制 IN 主要用于判断某个值是否存在于子查询的结果集中。如果子查询返回的结果集中包含指定的值,THEN 语句将被执行。IN 的语法...

    Oracle与Informix函数比较.doc

    2. 判断是否存在记录:Informix 中的 `EXISTS` 函数可以用来判断是否存在记录,而 Oracle 中的 `EXISTS` 函数可以实现相同的功能。 Oracle 和 Informix 都提供了丰富的函数来处理数据,但是它们之间也存在一些差异...

    Oracle字符相似度函数

    - **数据清洗**:通过比较数据库中可能存在的重复记录,找出相似度高的记录进行合并或清理。 - **搜索引擎优化**:在搜索时,可以使用相似度函数提高模糊查询的效果,即使用户输入的关键词与数据库中的记录不完全...

    Oracle期末复习题(带答案)

    数据文件存储表空间中的数据,日志文件记录数据库的更改操作用于数据库恢复,而控制文件管理数据库的结构和操作记录。 系统标识符(SID)是数据库实例的名称,它在数据库网络中必须是唯一的,用于区分不同的数据库...

    Oracle查询重复数据并删除,只保留一条记录.docx

    在 Oracle 中,我们可以使用 GROUP BY 语句来查找重复记录。假设我们要根据 FIELD_CODE 字段来判断重复记录,可以使用以下语句: ```sql select * from R_RESOURCE_DETAILS where FIELD_CODE in(select FIELD_CODE ...

    oracle中any和all区别

    - 当使用`>`或`>=`时,`ANY`判断主查询中的表达式是否大于或等于子查询结果集中的任意一个值。 - 当使用`或`时,则判断主查询中的表达式是否小于或等于子查询结果集中的任意一个值。 - 当使用`=`时,`ANY`判断主...

    Oracle中常用的通配符

    - **含义**:用于比较一个值是否存在于另一个查询结果集中。 - **示例**: - `SELECT * FROM table1 WHERE id IN (SELECT id FROM table2)`:选择`table1`中id出现在`table2`中的所有行。 ##### 3. `BETWEEN` 和 `...

    Oracle存储过程基本语法

    3. 在判断语句前最好先用 count(*) 函数判断是否存在该条操作记录。 4. 用 select 。。。into 。。。给变量赋值。 5. 在代码中抛异常用 raise+异常名。 通过本文,我们可以了解 Oracle 存储过程的基本语法和注意...

    Oracle数据库巡检报告

    - **I/O性能检查**:同样利用监控工具或命令行工具(如`iostat`),关注磁盘的读写速率(read/write rate)、IOPS(Input/Output Operations Per Second)、平均等待时间(average queue length)等指标,以判断是否存在I/...

    oracle数据库关于exists使用

    在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的结果为真;反之,则为假。 **1.1 Exists 的基本语法** ```sql SELECT ...

Global site tag (gtag.js) - Google Analytics