`

【ORACLE&DB2】中如何删除一个表中重复数据,仅留其中一行

 
阅读更多
首先看一下ORACLE中的情况:
delete from test a where rowid < (select max(rowid) from test where col1=a.col1);

但是DB2下由于没有序列rowid,所以不能用如上方法删除,只能实现一个存储过程,示例如下:
test表中只有一个列,其他可以仿照如下实现
CREATE PROCEDURE Delete_same_items (
   IN p_a INTEGER)
LANGUAGE SQL
SPECIFIC Delete_same_items
MODIFIES SQL DATA 
BEGIN ATOMIC
    DECLARE SQLSTATE CHAR(5);
    DECLARE v_a INTEGER;
    DECLARE c_emp CURSOR WITH HOLD FOR
        SELECT a
        FROM   test where a=p_a
        FOR UPDATE OF a; 
     DECLARE EXIT HANDLER FOR  NOT FOUND
     SET p_a = NULL;   
    OPEN c_emp;
    FETCH FROM c_emp INTO v_a;   
    WHILE ( SQLSTATE = '00000' ) DO
       FETCH FROM c_emp INTO v_a;      
       DELETE from test where  current of c_emp;
    END WHILE;   
    CLOSE c_emp;
END
分享到:
评论

相关推荐

    ORACLE转DB2对照全解

    **注意:** Oracle中的`DUAL`表相当于DB2中的`SYSIBM.SYSDUMMY1`表,用于查询单个值。 #### 十六、时间日期函数 **Oracle:** ```sql SELECT SYSDATE FROM DUAL; ``` **DB2:** ```sql SELECT CURRENT_TIMESTAMP ...

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    `ROWID`是Oracle数据库中用于标识表中每行的唯一地址,与`ROWNUM`不同,它反映了数据在磁盘上的实际位置。在需要稳定排序或精确的行顺序时,应考虑使用`ROWID`,但要注意它不应用于业务逻辑,因为它可能会随着表空间...

    企业oracle数据分析岗位面试题

    - **DELETE**:逐行删除表中的数据,并记录每行的删除操作,支持回滚。 - **主要区别**: - TRUNCATE是DDL语句,不占用ROLLBACK段;DELETE是DML语句,需要使用ROLLBACK段。 - TRUNCATE操作后会重置自增ID,而...

    DB2和 Oracle的并发控制(锁)比较

    在DB2中,锁的应用是多粒度的,它可以对表空间、表、行以及索引进行锁定。DB2提供了多种表锁模式,如IS、IX、SIX、S、U、X和Z,以及行锁模式。IS、IX和SIX锁需要与行锁配合,允许不同程度的并发读取和修改。S、U、X...

    经典SQL语句大全,oracle,informix,db2,mysql

    - `EXCEPT` 返回仅在第一个查询中出现的行,去除重复行。 - `EXCEPT ALL` 类似于`EXCEPT`,但保留所有行,包括重复行。 - `INTERSECT` 返回两个查询共同的行,去除重复行。 - `INTERSECT ALL` 类似于`INTERSECT`...

    DB2手册pdf

    DB2支持通过一个表中的记录来更新另一个表中的数据。这可以通过嵌套查询或JOIN语句实现。 #### 如果显示调用存储过程时传NULL值要注意 在调用存储过程时传递NULL值,需要确保存储过程正确处理这些值,避免出现意外...

    Oracle数据库学习指南

    30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库的查询优化技术. 33.提高C-S系统性能的一些方法 34.提高ORACLE数据库系统import性能 35.外部联接的用法 36.性能调试的一般问题 37.优化 38...

    oracle 命令大全

    - `EXCEPT`返回仅在第一个查询中出现的行,去除重复行;`EXCEPT ALL`保留所有行,包括重复行。 - `INTERSECT`返回两个查询中都存在的行,去除重复行;`INTERSECT ALL`保留所有行,包括重复行。 13. **外连接**: ...

    编程(db2)使用技巧

    在DB2中创建表是一个基本操作,用于定义数据存储结构。创建表时,需要指定列名、数据类型以及可能的约束条件。例如: ```sql CREATE TABLE table_name ( column1 datatype constraints, column2 datatype ...

    DB2使用经验积累及心得

    - **UPDATE不能用一个表中的记录为条件修改另一个表中的记录**:需要使用其他方法,如关联查询。 - **如果显示调用存储过程时传NULL值要注意**:避免传递NULL值导致的问题。 #### DB2编程性能注意 - **大数据的导...

    Oracle1.pdf

    首先,数据库是存储和管理数据的软件,其中最常见的是RDBMS,如Oracle、MySQL、SQL Server和DB2。在数据库中,表是存储数据的基本单元,相当于二维表格,由多行和多列组成。每行代表一条具体的业务数据,称为记录或...

    Oracle資料如何匯出成文字檔

    为了实现这一目标,一个常见的做法是先将Oracle数据库中的数据导出为文本文件(如CSV或纯文本格式),然后再将这些文件导入到新的DB2数据库中。 #### 2. 数据导出步骤 - **登录Oracle数据库**:使用`sqlplus`命令行...

    oracle实用教程

    每个Oracle数据库至少包含一个系统表空间(SYSTEM),用于存储数据字典和其他重要信息。 **数据库对象** 数据库对象是指数据库中可命名的元素,包括但不限于: - **表**:用于存储数据的逻辑结构。 - **视图**:...

    DB2练习题

    关系中的主键(主码)必须满足唯一性和非空性,这是**实体完整性**规则的基本要求,确保每一行数据的唯一标识。 ### DB2的安全机制 DB2提供了**身份验证**、**授权**和**特权**三种主要的安全机制,帮助数据库管理...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:Oracle中要删除一个用户,必须要具有dba的权限。而且不能删除当前用户,如果删除的用户有数据对象,那么必须加上关键字cascade。 用法:drop user 用户名 [cascade] 四、 用户权限与角色 1. 权限 Oracle中权限...

    Oracle数据库笔记

    - 第一个商品化的关系型数据库系统。 - 支持SQL标准,提供面向对象支持。 - 可运行于多种平台,如 UNIX、Windows 和 OS/2。 - Oracle数据库最新版本为 Oracle 12c。 - 提供丰富的软件产品,包括服务器产品、...

    MS、ORACLE等SQL语句大全

    在SQL中,你可以使用`CREATE DATABASE`语句来创建一个新的数据库,例如`CREATE DATABASE database-name`,其中`database-name`是你为数据库自定义的名字。 删除数据库则使用`DROP DATABASE`命令,如`DROP DATABASE ...

    Oracle命令全集

    - `DROP DATABASE`: 删除一个完整的数据库,数据无法恢复。 2. **数据操纵语言(DML)**: - `CREATE TABLE`: 定义新表的结构,指定字段名、数据类型和约束,如`NOT NULL`和`PRIMARY KEY`。 - `ALTER TABLE`: 修改...

    Oracle大总结(达内培训笔记)

    - **2.4.10 子查询**:在一个查询中嵌套另一个查询。 - **2.5 事务控制语言(TCL)** - 用于管理数据库中的事务,如提交、回滚等。 - **2.6 SQL命令与SQL语句** - 区分SQL命令和SQL语句的具体含义。 #### 第三章...

    ORACLE_SID数据库相关资料.docx

    6. Oracle SID:在Oracle中,SID是数据库实例的标识,它不等同于数据库本身,而是运行在操作系统上的一个进程,管理着数据库的数据文件、日志文件和控制文件。SID与数据库实例(Instance)和应用程序之间存在关联,...

Global site tag (gtag.js) - Google Analytics