`
sea0108
  • 浏览: 54900 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle存储过程:去掉重复的记录

阅读更多
create or replace procedure SP_STRIP_PK(
/*
  去掉重复的记录(保证主键值唯一)
*/
  p_table       in varchar2, --物理表
  partition_by  in varchar2, --分区依据 PK字段
  order_by      in varchar2  --排序依据
) is
begin
 
 EXECUTE IMMEDIATE(
'DELETE FROM '||p_table||'
WHERE rowid in (
  SELECT rid
  FROM (
      select rowid rid,
           row_number() over(partition by '||nvl(partition_by,1)||' order by '||order_by||') rn
      from '||p_table||'
   )
   WHERE rn > 1
) ');
end SP_STRIP_PK;


MySQL版:
CREATE PROCEDURE `sp_strip_pk`(tb_name varchar(255), partition_by varchar(255), order_by varchar(255), rowid_field varchar(50))
    MODIFIES SQL DATA
    DETERMINISTIC
    COMMENT '去掉重复的记录(保证主键值唯一) '
BEGIN
  set @sql = concat(
  'DELETE FROM ',tb_name,' 
  WHERE (', rowid_field ,') IN (
	select ', rowid_field ,' from (
	  select t1.*
	   , if(@g1=t1.group1, @rank:=@rank+1, @rank:=1) as rank
	   , (@g1:=t1.group1) as g1
	  from 
		(select ', rowid_field ,', concat_ws(char(5), ', partition_by ,') as group1
		from ',tb_name,'
		order by ', partition_by ,' , ', order_by ,') t1
	  , (select @g1:=null, @rank:=0) t2
	) t where rank > 1
  )' );

  prepare stm from @sql;
  execute stm;

END
分享到:
评论

相关推荐

    ORACLE去除重复数据方法

    ### ORACLE去除重复数据方法 在数据库管理与维护过程中,数据重复问题是非常常见的现象,尤其在大型企业级应用中更是如此。重复数据不仅占用存储空间,还可能导致数据分析结果出现偏差,影响业务决策的准确性。因此...

    oracle中如何删除重复数据

    以下将详细解释如何在Oracle中处理这两种类型的重复数据问题:部分字段重复和完全重复记录。 一、部分字段重复数据的删除 1. 查询重复数据: 使用`GROUP BY`和`HAVING`子句可以找出具有相同值的字段组合。例如,...

    Oracle中用Rowid查找和删除表中的重复记录

    针对不同的场景,可以采取以下几种策略来删除重复记录: 1. **基于Group By和Min/Max Rowid** ```sql DELETE FROM cz WHERE (c1, c10, c20) IN (SELECT c1, c10, c20 FROM cz GROUP BY c1, c10, c20 HAVING COUNT...

    ORACLE中用存储过程生成SQL代码.doc

    在Oracle数据库中,存储过程是一种强大的工具,可以用于执行复杂的数据库操作,包括生成SQL代码。在上述场景中,我们看到一个名为`AA_GENDML`的存储过程被创建,其目的是自动化生成针对特定表的INSERT、SELECT、...

    oracle学习及练习语句

    4. 查询与删除重复记录:在数据处理中,有时会出现重复的记录,这需要通过特定的SQL语句来处理。Oracle提供了`DISTINCT`关键字去除查询结果中的重复行,而在`删除重复记录sql.txt`中,你可能看到如何使用`GROUP BY`...

    Oracle语法参考(大全).

    5. DISTINCT和UNION:去除重复记录,或合并多个查询的结果。 这两份文档合在一起,能够为用户提供全面的Oracle SQL语法支持,无论是在日常的查询编写,还是在复杂的数据库设计和优化中,都能找到相应的指导。通过...

    Oracle常用命令速查手册

    `:去除重复值。 - `ORDER BY column ASC/DESC;`:按列排序,ASC为升序,DESC为降序。 5. 数据插入与更新: - `INSERT INTO 表名 (column1, column2) VALUES (value1, value2);`:插入新记录。 - `UPDATE 表名 ...

    ORACLE转DB2对照全解

    **注意:** Oracle和DB2都支持使用`DISTINCT`关键字来去除重复值。 #### 十八、Null值转换 **Oracle:** ```sql SELECT NVL(col, default_val) FROM table; ``` **DB2:** ```sql SELECT COALESCE(col, default_...

    Oracle培训记录(最终版)

    - **编写基本的SQL SELECT语句**:学习如何构建SQL查询,包括使用`SELECT`语句从数据库中检索数据,了解`DISTINCT`关键字用于去除重复行,以及如何使用`LIKE`、`IN`、`BETWEEN`等条件来过滤数据。 - **限制和分类...

    oracle试卷及答案

    6. **SQL SELECT语句中去除重复记录的关键字:** - 在SQL SELECT语句中,使用`DISTINCT`关键字可以去除查询结果中的重复记录。 7. **SQL分组查询中去掉不满足条件的分组:** - 在使用SQL语言的SELECT语句进行分组...

    oracle基础的文档 熟悉oracle的对象

    - **去除重复数据**:默认情况下,SQL会返回所有匹配的行,但DISTINCT关键字可以去除重复的值,如`SELECT DISTINCT stu_age FROM stu`。 - **表达式查询**:在SELECT语句中,可以使用算术运算符和逻辑运算符来构造...

    oracle字段去重

    因此,去除重复记录是数据库管理中的一个重要环节。Oracle数据库提供了多种方法来实现字段级别的去重。 #### 二、去重需求分析 根据提供的描述“oracle字段去重 以某一个字段去重”,可以理解为在某个表中基于特定...

    超详细Oracle教程.pdf

    - **第一范式(1NF)**:介绍去除重复组的基本原则。 - **第二范式(2NF)**:教授如何消除非主键字段对非候选键的部分依赖。 - **第三范式(3NF)**:介绍如何消除非主键字段对非候选键的传递依赖。 #### 二十七、数据库...

    CSDN+Oracle版精华帖荟萃

    10. 一个剔重SQL的讨论:在数据处理中,去除重复记录是一个常见的需求。讨论可能会涉及使用ROW_NUMBER()、DISTINCT关键字以及GROUP BY子句等方法。 11. 网易数据库笔试题:可能涉及数据库基础知识、SQL语句编写技巧...

    Oracle基础 基础Oracle

    Oracle是世界上最流行的关系型数据库管理系统之一,尤其在企业级应用中广泛应用。...随着经验的积累,你还将接触到存储过程、触发器、分区、游标、事务控制等更复杂的概念,这些都是成为Oracle数据库管理员必备的技能。

    Oracle学习笔记——day01

    - **DISTINCT关键字**:去除重复记录,如`SELECT DISTINCT name FROM lsz_info;` - **条件查询**:使用`WHERE`子句进行条件过滤,如`SELECT * FROM info_lsz WHERE age > 25;` - **BETWEEN运算符**:选择在两个值...

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

    #### 六、Oracle中的函数与存储过程 - **知识点解析**: - **函数与存储过程概念**: - 函数:必须返回一个值,可以在SQL语句中直接调用。 - 存储过程:可以有输入参数,也可以有输出参数,但不一定要返回值。 ...

    oracle数据库面试题目汇总及答案解析.zip

    - DISTINCT:去除重复行。 3. **Oracle数据类型** - NUMBER:数值类型,可以包含整数和小数。 - VARCHAR2:可变长度字符串。 - DATE:日期和时间类型。 - CLOB和BLOB:用于存储大量文本和二进制数据。 4. **...

    Oracle从入门到精通

    - 使用DISTINCT关键字去除重复的记录。 ##### 1.5 SQL*Plus与SQL的关系 - **SQL*Plus**:Oracle提供的命令行工具,用于执行SQL语句。 - **功能**:提供了一系列的命令,帮助用户执行SQL语句、管理会话等。 - **...

    oracle常用sql语句大全 注释完整 放心使用

    - Oracle的PL/SQL是过程化SQL,用于编写存储过程、函数、触发器等。 12. **数据库对象权限管理**: - 使用GRANT和REVOKE语句控制用户对数据库对象的访问权限。 13. **备份与恢复**: - Oracle提供了多种备份和...

Global site tag (gtag.js) - Google Analytics