`
步青龙
  • 浏览: 295575 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
72ba33fb-eefe-3de1-bd65-82a6e579265d
Java面试
浏览量:0
社区版块
存档分类
最新评论

Oracle 问题总结

阅读更多

今天碰到这样一个问题,手动添加数据到数据库,然后通过程序添加数据到数据库。程序中的ID是取得序列的nextval。

但是发现程序生成的ID 在数据库中已经存在,报错,唯一性约束。

我脱开程序直接到sql developer 里,又插入了几个数据,序列的当前值比数据中的最大值小很多。

然后执行  select mytable$seq.nextval from dual 发现nextval 并没有和数据中的最大ID保持一致。

然后通过sql直接插入发现,写sql的话,序列的currval 是跟着改变的。一时想不通。

原来Oracle客户端界面新增数据 并没有改变序列的currval的值,程序或者sql是可以的。业务这是PL/sql界面的缺陷

 

问题2:create table TB2 t2 select * from TB1 t1

复制表结构不成功,解决办法: 

create table TB2 as  select * from TB1     where   rownum <1 

 

Oracle中删除重复记录:

 

delete  table1 t where t.rowid > (

    select min(t2.rowid) from table1 t2 where t.col1= t2.col1and t.col2= t2.col2

)

 

问题4 行转列:

 解决办法:wm_concat(col) 此函数如此神奇!

 

问题5: 列转行

解决办法:decode(col)如 sum(decode(course, '数学', score))  -- 计course 列为数学的  score分数综合

 

问题6:查找没有条件查询的排序结果中的位置,即第几条数据,用作排名用。(查询一个表中排序字段a在没有where提交下的位置)

 

select *from (
  select col1,col2,rownum rn from 
  (
    select col1,col2 from T t 
      order by t.sort desc
  )
)tt  
  where  tt.col1= 'xxx' and tt.col2= 'xxx'

 

 

问题7:查询表中有某个字段中有重复数据记录

 

select * from Ta where   recol
in (
  select   recol from Ta group by recol
     having count(recol)>1
)

问题8:rownum 在数据库表中一旦删除,则rownum将不存在,所以在做查询排名的时候rownum会出现各种问题。

    但是Oracle本身提供了查询排名的内部函数:rank() over  ,查询排名Java代码如下,查询content-排名:

	public String rank(String operCode) throws Exception, RemoteException {
		Connection conn = null;
		PreparedStatement ps = null;
		String str = "";
		ResultSet rs = null;
		try {
			conn = ConnManager.getConnection();
			String sql =  "select content,rn from (select content,rank() over(order by t.contentdesc) rn from T  t) where  col = ?";
	1		ps = conn.prepareStatement(sql);
			ps.setString(1, "xxx");
			rs = ps.executeQuery();
			if(rs.next()){
				str =   String.valueOf(rs.getString(1)) + "-" + String.valueOf(rs.getLong(2));
			}
		} catch (Exception e) {
			 System.out.print(e);
		}finally{
			ps.close();
			conn.close();
		}
		return str;
	}

 

   rank() over (partition col1,col2 order by col3 desc) partition按照col1和col2 进行分组,然后按照col3倒叙。

   rank() 查询出的rownum是结果集中的顺序 而非oracle 默认的rownum,即时信息和 要用rank() over() 搞定。

 

 

select * from (
       select count(*)  from t where id in (1, 2,3)) a, 
      (select   col1,col2,col3  from t
 where id in 1, 2,3)) b

 

   我们用Oracle内部函数解决:

select  count(*) over(), col1,col2,col3  from t
 where id in (1, 2,3)

 

 

 

分享到:
评论
2 楼 步青龙 2011-12-06  
yekui 写道
主键报错说明此ID已经存在 你可以通过查看最大ID是多少  假设最大ID现在数据库是 888 然后删除以前的序列

drop sequence XX_SEQ;



重新创建序列就解决了
-- Create sequence
create sequence XX_SEQ
minvalue 1
maxvalue 999999999999999
start with 889
increment by 1


PL\SQL 界面操作的缺陷,一旦进行界面新增操作问题同样会出现
1 楼 yekui 2011-12-06  
主键报错说明此ID已经存在 你可以通过查看最大ID是多少  假设最大ID现在数据库是 888 然后删除以前的序列

drop sequence XX_SEQ;



重新创建序列就解决了
-- Create sequence
create sequence XX_SEQ
minvalue 1
maxvalue 999999999999999
start with 889
increment by 1

相关推荐

    常见oracle问题的总结

    常见的oracle问题汇总,如下所示: 1. Oracle安裝完成后的初始口令? 2. ORACLE9IAS WEB CACHE的初始默认用户和密码? 3. oracle 8.0.5怎么创建数据库? 4. oracle 8.1.7怎么创建数据库? 10. 用什么语句查询字段呢? ...

    Oracle性能问题总结

    Oracle 性能问题总结 Oracle 性能问题是数据库管理员和开发者经常遇到的一个棘手问题,本文总结了 Oracle 性能问题的解决方案,涵盖了物理模型优化、索引相关、SQL 相关、表设计和其他几个方面。 在物理模型优化...

    oracle迁移达梦常见问题汇总

    本文主要结合之前一次oracle迁移达梦的项目,将碰到的问题以及一系列踩过的坑列举出来供大家参考,数据库版本是达梦7。(本文中涉及到的部分对象名已用sch1,tab1等方式替换) 1、整体情况 迁移过程中失败任务数低于5%...

    oracle问题汇总

    今天刚装了10G,登陆不了EM可能是找不到,最后在oracle/product/10.1.0/Db_1目录下有个localhost_orcl 这个文件加,我新建了一个 “主机名_SID” 文件夹之后,可能登陆EM。。。。。这个方法不行的时候,可能试试下面...

    oracle层次汇总存储过程

    Oracle层次汇总存储过程是Oracle数据库中用于处理层级数据的一种高效技术。在数据库设计中,层级数据常见于组织结构、产品目录、地理位置等场景。Oracle提供了几种处理层级数据的方法,包括自连接、递归子查询、...

    oracle游标的总结oracle游标的总结

    Oracle 游标概述 Oracle 游标是 Oracle 数据库中的一种重要概念,用于查询数据库,获取记录集合(结果集)的指针。游标可以看作是一个临时表,你可以对其每一行的数据进行任意的操作。本文将对 Oracle 游标的概念、...

    Oracle使用疑难问题汇总

    教程名称:Oracle使用疑难问题汇总课程目录:【】Oracle DBA优化数据库性能心得体会【】ORACLE 中ROWNUM用法总结【】Oracle 查询表空间使用情况(经典篇)【】Oracle下巧用bulk collect实现cursor批量fetch【】...

    oracle OCA 基本问题总结

    ### Oracle OCA 基本问题总结 #### 一、OCA认证介绍 OCA(Oracle Certified Associate)是Oracle认证中的初级认证,适用于那些希望在Oracle数据库管理领域获得职业发展的人员。通过OCA认证,可以证明持证人掌握了...

    oracle学习总结.docx

    Oracle 学习总结 Oracle 是一种关系数据库管理系统,由 Larry Ellison 和 Bob Miner 于 1977 年创立。它是一种对象关系数据库管理系统,支持多种编程语言,包括 Java、Python、C++ 等。 一、创建 Oracle 数据库...

    oracle总结oracle总结面试必备

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级应用中占据着核心地位。以下是对Oracle数据库一些关键知识点的详细阐述,这些内容对于面试和日常开发工作都非常关键。 一、SQL基础 Oracle SQL是...

    oracle个人总结笔记

    本人自己总结的尚学堂oracle笔记,希望能派上用场,本资源不收资源分,大家可以随意下载

    oracle学习总结(适合刚学习oracle的人)

    本文将根据"oracle学习总结(适合刚学习oracle的人)"这一主题,深入探讨Oracle数据库的基础知识,帮助初学者建立起对Oracle的基本理解。 1. **Oracle简介**:Oracle数据库是由美国甲骨文公司开发的一款产品,它...

    oracle数据库总结.sql

    oracle数据库总结

    Oracle 各版本的下载地址汇总

    Oracle 各版本的下载地址汇总 Oracle 是一款功能强大且广泛应用的关系型数据库管理系统,用于存储、管理和检索数据。 Oracle 数据库有多个版本,分别适用于不同的操作系统和架构。以下是 Oracle 各版本的下载地址...

    sqlplus连接oracle问题

    针对标题“sqlplus连接oracle问题”和描述“sqlplus连接oracle问题,具体的解决办法,在工作中自己总结的,希望有助于大家,谢谢!”所提供的内容,本文将详细阐述解决连接Oracle数据库时使用sqlplus工具遇到的问题...

    oracle连接数问题

    然而,随着业务量的增加,Oracle数据库可能会遇到连接数的问题,这往往与内存限制紧密相关。本文将深入探讨如何通过修改Oracle参数来解决这一问题,确保数据库能够稳定运行并满足高并发需求。 ### Oracle连接数问题...

    Oracle系统表汇总.docx

    "Oracle系统表汇总" Oracle系统表是Oracle数据库管理系统中的一种重要组成部分,负责存储数据库对象的元数据信息。系统表是Oracle数据库管理系统的基础组件,提供了对数据库对象的描述、管理和维护。 用户管理 在...

    oracle 64位问题

    ### Oracle 64位问题详解 #### 一、问题背景 在使用PL/SQL Developer连接Oracle数据库时,遇到如下错误: &gt; 初始化错误 &gt; SQL*NET没有完全安装 &gt; OracleHomekey: software/oracle &gt; OracleHomedir 此错误通常...

Global site tag (gtag.js) - Google Analytics