Oracle

阅读 / 问答 / 标签

在oracle中,如何写select语句,select出最后一条sfz等于“aa”的记录(即表中有很多条记录)

排序取一条不就行了或者是通过rowid也行

oracle 11g2单机要创建oper组吗

可以不创建,也很少使用。有特殊要求的除外。

oracle数据库触发器插入表不成功

wherecprkdm=cprkphma是不是指:NEW.cprkphma啊?总之应该是这段select没结果导致了。楼主的变量命名方式看得头都晕了

安装Oracle数据库实例报错 end-of-file on communication channel 请高人指点

O/S-Error: (OS 1455) 页面文件太小,无法完成操作。Exception [type: ACCESS_VIOLATION, UNABLE_TO_READ] [ADDR:0x20] [PC:0x7F66ED6C6EC, kslwtbctx()+556]似乎是windows本身的问题,部分内存无法访问,建议你确认该windows正常 且未安装杀毒软件之类可能妨碍oracle安装的软件

查询 SQL语句的时候 出现oracle ora 01861 文字与字符串格式不匹配 百思不得其解!

你自己写错了,TO_CHAR(IM.INFO_MAGA_CREATE_TIME, "YYYY-MM-DD") AS T_INFO_MAGA_CREATE_TIME,TO_DATE("2013-02-01", "YYYY-MM-DD") 他们怎么恩那个对比呢?一个CHAR.一个DATE要不你转换上面的TO_CHAR为TO_DATE要不你转换下面的TO_DATE为 TO_CHAR你的SQL 真。。。。乱

oracle updating可以执行函数吗

提示已经讲得清楚: 表TEST.TB_CLEARING发生了变化, 触发器/函数不能读它.在使用oracle行级(for earch row设定)触发器时要注意:1.触发器不可以执行COMMIT、ROLLBACK或SAVEPOINT语句,而且不可以调用执行这些语句之一的函数或过程。2.触发器不可以声明long或LONG RAW变量。3.触发器不可以在定义它的表上执行DML操作(行级触发器)你在该触发器中要读取触发器器所在的表的数据(数据DML操作), 这是不允许的.你将行级触发改成表级触发, 即去掉for each fow试试. 反正在你的语句中也没有使用到NEW, OLD这两个行级触发器新值, 旧值记录.

oraclev$sql的sqltype类型是哪些

(1)二进制数据类型二进制数据包括 Binary、Varbinary 和 ImageBinary 数据类型既可以是固定长度的(Binary),也可以是变长度的。Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储空间的大小是 n + 4 个字节。Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储空间的大小是 n + 4个字节,不是n 个字节。在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。(2)字符数据类型字符数据的类型包括 Char,Varchar 和 Text字符数据是由任何字母、符号和数字任意组合而成的数据。Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。(3)Unicode 数据类型Unicode 数据类型包括 Nchar,Nvarchar 和Ntext在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所占用的空间是使用非Unicode数据类型所占用的空间大小的两倍。在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。(4)日期和时间数据类型日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后;后一个数据类型是时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。日期的格式可以设定。设置日期格式的命令如下:Set DateFormat {format | @format _var|其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式(5)数字数据类型数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Microsoft SQL Server 中,整数存储的数据类型是 Int,Smallint和 Tinyint。Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据类型存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。精确小数数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。Decimal 数据类型使用128位来表示值来用作数值计算。在SQL Server 中,近似小数数据的数据类型是 Float 和 Real。例如,三分之一这个分数记作0.333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。(6)货币数据类型在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 SmallmoneyMoney数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。(7)特殊数据类型特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即 Timestamp、Bit 和 Uniqueidentifier。Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。Timestamp 类型的字段是一个基于系统时钟在数据行被创建或修改时由SQL Server自动填充的值。Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。Uniqueidentifier 由 16字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。

Oracle数据访问和索引的使用

· 通过全表扫描的方式访问数据; · 通过ROWID访问数据; · 通过索引的方式访问数据; · Oracle顺序读取表中所有的行,并逐条匹配WHERE限定条件。 · 采用多块读的方式进行全表扫描,可以有效提高系统的吞吐量,降低I/O次数。 · 即使创建索引,Oracle也会根据CBO的计算结果,决定是否使用索引。 注意事项: · 只有全表扫描时才可以使用多块读。该方式下,单个数据块仅访问一次。 · 对于数据量较大的表,不建议使用全表扫描进行访问。 · 当访问表中的数据量超过数据总量的5%—10%时,通常Oracle会采用全表扫描的方式进行访问。 · 并行查询可能会导致优化器选择全表扫描的方式。1.2ROWID访问表 · Rowid是数据存放在数据库中的物理地址,能够唯一标识表中的一条数据。 · Rowid指出了一条记录所在的数据文件、块号以及行号的位置,因此通过ROWID定位单行数据是最快的方法。 注意事项: · Rowid作为一个伪列,其数值并不存储在数据库中,当查询时才进行计算。 · Rowid除了在同一集簇中可能不唯一外,每条记录的Rowid唯一。1.3 INDEX访问表 · 通过索引查找相应数据行的Rowid,再根据Rowid查找表中实际数据的方式称为“索引查找”或者“索引扫描”。 · 一个Rowid对应一条数据行(根据Rowid查找结果,仅需要对Rowid相应数据的数据块进行一次I/O操作),因此该方式属于“单块读”。 · 对于索引,除了存储索引的数据外,还保存有该数据对应的Rowid信息。 · 索引扫描分为两步:1)扫描索引确定相应的Rowid信息。 2)根据Rowid从表中获得对应的数据。 注意事项: · 对于选择性高的数据行,索引的使用会提升查询的性能。但对于DML操作,尤其是批量数据的操作,可能会导致性能的降低。 · 全表扫描的效率不一定比索引扫描差,关键看数据在数据块上的具体分布。 索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技术性要求高的工作。一般在数据库设计阶段的与数据库结构一道考虑。应用系统的性能直接与索引的合理直接有关。 (1) 单列索引 单列索引是基于单个列所建立的索引。 (2) 复合索引 复合索引是基于两列或是多列的索引,在同一张表上可以有多个索引,但是要求列的组合必须不同。 (1) 重命名索引 (2) 合并索引 (表使用一段时间后在索引中会产生碎片,此时索引效率会降低,可以选择重建索引或者合并索引,合并索引方式更好些,无需额外存储空间,代价较低) (3) 重建索引 方式一:删除原来的索引,重新建立索引 当不需要时可以将索引删除以释放出硬盘空间。命令如下: 例如: 注:当表结构被删除时,有其相关的所有索引也随之被删除。 方式二: Alter index 索引名称 rebuild; · 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 · 索引可以大大加快数据的检索速度,这是创建索引的最主要的原因。 · 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 · 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 · 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 · 索引的层次不要超过4层。 · 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 · 除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 · 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 · 更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性。 1) 不恰当的索引不但于事无补,反而会降低系统性能。因为大量的索引在进行插入、修改和删除操作时比没有索引花费更多的系统时间。 1) 应该建索引的列 · 在经常需要搜索的列上,可以加快搜索的速度; · 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; · 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; · 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; · 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; · 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 2) 不应该建索引的列 · 在大表上建立索引才有意义,小表无意义。 · 对于那些在查询中很少使用或者参考的列不应该创建索引。 · 对于那些只有很少数据值的列也不应该增加索引。比如性别,在查询的结果中,结果集的数据行占了表中数据行的很大比例,。增加索引,并不能明显加快检索速度。 · 对于那些定义为blob数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。 · 当修改性能远远大于检索性能时,不应该创建索引。 一个表中有几百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这主要可能是oracle的索引限制造成的。Oracle的索引有一些索引限制,在这些索引限制发生的情况下,即使已经加了索引,oracle还是会执行一次全表扫描,查询的性能不会比不加索引有所提高,反而可能由于数据库维护索引的系统开销造成性能更差。 下面的查询即使在djlx列有索引,查询语句仍然执行一次全表扫描。 把上面的语句改成如下的查询语句,这样,在采用基于规则的优化器而不是基于代价的优化器(更智能)时,将会使用索引。 特别注意:通过把不等于操作符改成OR条件,就可以使用索引,避免全表扫描。 使用IS NULL或IS NOT NULL同样会限制索引的使用。因此在建表时,把需要索引的列设成NOT NULL。如果被索引的列在某些行中存在NULL值,就不会使用这个索引(除非索引是一个位图索引)。 如果不使用基于函数的索引,那么在SQL语句的WHERE子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。 下面的查询不会使用索引(只要它不是基于函数的索引) 也是比较难于发现的性能问题之一。比如:bdcs_qlr_xz中的zjh是NVARCHAR2类型,在zjh字段上有索引。如果使用下面的语句将执行全表扫描。 因为Oracle会自动把查询语句改为 特别注意:不匹配的数据类型之间比较会让Oracle自动限制索引的使用,即便对这个查询执行Explain Plan也不能让您明白为什么做了一次“全表扫描”。 (1) 索引无效 (2) 索引有效

oracle ora-01410 无效的rowid 怎么解决

ROWID 你输入的格式不正确。

oracle中如何删除第十条及以后的所有记录

oracle每条记录都有一个唯一的物理记录rowid,可以通过rowid作为唯一主键进行删除。1、首先根据rownum编号SELECT ROWID,ROWNUM RN FROM 表2、筛选rn>=10的记录的rowidSELECT ROWID FROM (SELECT ROWID,ROWNUM RN FROM 表) WHERE RN>=103、根据rowid删除第十条以及以后的记录DELETE FROM 表 where rowid in(SELECT ROWID FROM (SELECT ROWID,ROWNUM RN FROM 表) WHERE RN>=10)

oracle基于主键物化视图和基于rowid物化视图的区别是什么?

oracle基于主键物化视图和基于rowid物化视图的区别是什么?在做一个项目A时, 在生产库上创建物化视图日志, 使用dblink在项目A的数据库上创建物化视图, 物化视图是基于rowid的, 且生产库的表都是千万级的大表, 刷新时间又要求半小时刷新一次,在创建物化视图的时候使用的也是快速刷新, 但在刷新的时候会出现一个问题: 刷新时, 物化视图日志的内容会与主表的数据进行比对, 确认物化日志内的数据是否存在在主表内, 然后再刷新, 这样就拖慢了生产库的速度; 这个问题是客户那边的oracle数据库管理员发现的, 如何避免这个问题? 使用基于主键的物化视图是否能避免这个问题?两种物化日志:Create Materialized View Log On SBDA_CPFTARACDT With Rowid;两种物化视图:

select * from f0092;和select t.*, t.rowid from f0092 t;查询结果竟然是不一样的!谁能告我?ORACLE

灵异~~~~~~

为什么我用oracle查询一个表的ROWID是,表中的第一行和第二行的ROWID的ROW项均为0?

rowid_row_number这个函数指的是该记录是其所在数据块(通常8K字节)中的第几条记录,返回的是记录在数据块中的相对位置。

使用pl/sql怎么向oracle的表里插入rowid这个列啊?

rowid 只是一个实际位置标识,只能供于查询,是不能增删改的

浅谈存取Oracle当中扫描数据的方法

   ) 全表扫描(Full Table Scans FTS)   为实现全表扫描 Oracle读取表中所有的行 并检查每一行是否满足语句的WHERE限制条件一个多块读操作可以使一次I/O能读取多块数据块(db_block_multiblock_read_count参数设定) 而不是只读取一个数据块 这极大的减少了I/O总次数 提高了系统的吞吐量 所以利用多块读的方法可以十分高效地实现全表扫描 而且只有在全表扫描的情况下才能使用多块读操作 在这种访问模式下 每个数据块只被读一次   使用FTS的前提条件 在较大的表上不建议使用全表扫描 除非取出数据的比较多 超过总量的 % % 或你想使用并行查询功能时   使用全表扫描的例子     SQL> explain plan for select * from dual; Query Plan SELECT STATEMENT[CHOOSE] Cost= TABLE ACCESS FULL DUAL    ) 通过ROWID的表存取(Table Access by ROWID或rowid lookup)   行的ROWID指出了该行所在的数据文件 数据块以及行在该块中的位置 所以通过ROWID来存取数据可以快速定位到目标数据上 是Oracle存取单行数据的最快方法   这种存取方法不会用到多块读操作 一次I/O只能读取一个数据块 我们会经常在执行计划中看到该存取方法 如通过索引查询数据   使用ROWID存取的方法     SQL> explain plan for select * from dept where rowid = AAAAyGAADAAAAATAAF ; Query Plan SELECT STATEMENT [CHOOSE] Cost= TABLE ACCESS BY ROWID DEPT [ANALYZED]    )索引扫描(Index Scan或index lookup)   我们先通过index查找到数据对应的rowid值(对于非唯一索引可能返回多个rowid值) 然后根据rowid直接从表中得到具体的数据 这种查找方式称为索引扫描或索引查找(index lookup) 一个rowid唯一的表示一行数据 该行对应的数据块是通过一次i/o得到的 在此情况下该次i/o只会读取一个数据库块   在索引中 除了存储每个索引的值外 索引还存储具有此值的行对应的ROWID值 索引扫描可以由 步组成 ( ) 扫描索引得到对应的rowid值 ( ) 通过找到的rowid从表中读出具体的数据 每步都是单独的一次I/O 但是对于索引 由于经常使用 绝大多数都已经CACHE到内存中 所以第 步的I/O经常是逻辑I/O 即数据可以从内存中得到 但是对于第 步来说 如果表比较大 则其数据不可能全在内存中 所以其I/O很有可能是物理I/O 这是一个机械操作 相对逻辑I/O来说 是极其费时间的 所以如果多大表进行索引扫描 取出的数据如果大于总量的 % % 使用索引扫描会效率下降很多 如下列所示     SQL> explain plan for select empno ename from emp where empno= ; Query Plan SELECT STATEMENT [CHOOSE] Cost= TABLE ACCESS BY ROWID EMP [ANALYZED] INDEX UNIQUE SCAN EMP_I   但是如果查询的数据能全在索引中找到 就可以避免进行第 步操作 避免了不必要的I/O 此时即使通过索引扫描取出的数据比较多 效率还是很高的   SQL> explain plan for select empno from emp where empno= ; 只查询empno列值 Query Plan SELECT STATEMENT [CHOOSE] Cost= INDEX UNIQUE SCAN EMP_I   进一步讲 如果sql语句中对索引列进行排序 因为索引已经预先排序好了 所以在执行计划中不需要再对索引列进行排序   SQL> explain plan for select empno ename from emp where empno > order by empno; Query Plan SELECT STATEMENT[CHOOSE] Cost= TABLE ACCESS BY ROWID EMP [ANALYZED] INDEX RANGE SCAN EMP_I [ANALYZED]   从这个例子中可以看到 因为索引是已经排序了的 所以将按照索引的顺序查询出符合条件的行 因此避免了进一步排序操作   根据索引的类型与where限制条件的不同 有 种类型的索引扫描   索引唯一扫描(index unique scan)   索引范围扫描(index range scan)   索引全扫描(index full scan)   索引快速扫描(index fast full scan)    ( ) 索引唯一扫描(index unique scan)   通过唯一索引查找一个数值经常返回单个ROWID 如果存在UNIQUE 或PRIMARY KEY 约束(它保证了语句只存取单行)的话 Oracle经常实现唯一性扫描   使用唯一性约束的例子   SQL> explain plan for select empno ename from emp where empno= ; Query Plan SELECT STATEMENT [CHOOSE] Cost= TABLE ACCESS BY ROWID EMP [ANALYZED] INDEX UNIQUE SCAN EMP_I    ( ) 索引范围扫描(index range scan)   使用一个索引存取多行数据 在唯一索引上使用索引范围扫描的典型情况下是在谓词(where限制条件)中使用了范围操作符(如> < <> >= <= beeen)   使用索引范围扫描的例子   SQL> explain plan for select empno ename from emp where empno > order by empno; Query Plan SELECT STATEMENT[CHOOSE] Cost= TABLE ACCESS BY ROWID EMP [ANALYZED] INDEX RANGE SCAN EMP_I [ANALYZED]   在非唯一索引上 谓词col = 可能返回多行数据 所以在非唯一索引上都使用索引范围扫描    使用index rang scan的 种情况   (a) 在唯一索引列上使用了range操作符(> < <> >= <= beeen)   (b) 在组合索引上 只使用部分列进行查询 导致查询出多行   (c) 对非唯一索引列上进行的任何查询   ( ) 索引全扫描(index full scan)   与全表扫描对应 也有相应的全索引扫描 而且此时查询出的数据都必须从索引中可以直接得到    全索引扫描的例子   An Index full scan will not perform single block i/o s and so it may prove to be inefficient e g Index BE_IX is a concatenated index on big_emp (empno ename) SQL> explain plan for select empno ename from big_emp order by empno ename; Query Plan SELECT STATEMENT[CHOOSE] Cost= INDEX FULL SCAN BE_IX [ANALYZED]    ( ) 索引快速扫描(index fast full scan)   扫描索引中的所有的数据块 与 index full scan很类似 但是一个显著的区别就是它不对查询出的数据进行排序 即数据不是以排序顺序被返回 在这种存取方法中 可以使用多块读功能 也可以使用并行读入 以便获得最大吞吐量与缩短执行时间    索引快速扫描的例子   BE_IX索引是一个多列索引     big_emp (empno ename) SQL> explain plan for select empno ename from big_emp; Query Plan SELECT STATEMENT[CHOOSE] Cost= INDEX FAST FULL SCAN BE_IX [ANALYZED]   只选择多列索引的第 列   SQL> explain plan for select ename from big_emp; Query Plan SELECT STATEMENT[CHOOSE] Cost= INDEX FAST FULL SCAN BE_IX [ANALYZED] lishixinzhi/Article/program/Oracle/201311/17452

oracle两条重复数据怎么删除

.不含大字段(clob等)的表格:123456789--例子表格:createtabletest(anumber,bnumber);--方法一:通过groupby+rowid,效率低deletefromtesttwheret.rowidnotin(selectmin(rowid)fromtestgroupbya,b);--方法二:通过create+rename+distinct,效率高createtabletest_tmpasselectdistinct*fromtestt;droptabletest;altertabletest_tmprenametotest;

oracle ora-01410 无效的Rowid 怎么解决

是怎么出现在这个错误的喃?

Oracle,关于用rowid分页的问题?

rownum和rowid本身就不是一个意思,rownum会根据子查询中排序而改变,而rowid是不会变的,你按照自己的需求来用就行了。

oracle 中 rowid是不是每次新增条记录 都要比上次那条的rowid的值都要大?

rowid是串信息,例如AABFEWQSAS,你所说的值指的是什么?

在oracle 数据伪列 rowid中删除重复的数据时。为什么数据插入的早,rowid 就小啊?我看不出来哪里小了

rowid也是按一种编码顺序进行排序的,是从小到大进行排序,和我们平时1、2、3、4这样,所以你越前面的数据是越最小的ROWID

ORACLE 通过rowid或一个有索引的id列来更新数据,效率上有区别吗

rowid的效率更高

Oracle 表中order by rowid是不是按照记录插入时间排序?

不是的。 没有什么规则。

oracle sql select 语句为何里头有rowid就成可编辑了?

相当于是select rowid ,customer_id from customers for update了

oracle rowid 分页

从内到外一步一步给你讲1.将表按cid降序排列2.检索出前10000条3.检索出9980到10000这几条的rowid4.检索出rowid在上一步的结果中的数据并且按照cid降序排列

oracle存储过程中动态游标使用rowid的问题

把你的语句贴出来看看。

下面oracle语句max(rowid)是什么意思?

获取多条重复数据中rowid最大的那一条,这里是保留重复数据中id最大的,其他的删除

oracle的一个菜鸟问题关于rowid和主键

主键的作用:主键是唯一且不为空的,用以标识唯一一条记录。我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。ROWID:它包含下列组成元素:1. 数据对象编号:每个数据对象(如表或索引)在创建时都分配有此编号,并且此编号在数据库中是唯一的2. 相关文件编号:此编号对于表空间中的每个文件是唯一的3. 块编号:表示包含此行的块在文件中的位置4. 行编号:标识块头中行目录位置的位置ROWID是不需要你自己来创建的,是随着你数据的生成自动产生的。他不是主键。在内部,数据对象编号需要32 位、相关文件编号需要10 位、块编号需要22 位、行编号需要16 位,加起来总共是80 位或10 个字节

ORACLE中,查询一条记录时,使用rowid还是主键索引(int型)快?

rowid--是行的唯一标识,这样查询时能快速准确定位到该行,不是主键,是系统默认有的主键的作用很明显,主键必须是唯一不能重复的,插入重复主键的记录是要报错的哟

如何查询oracle表中的update操作记录的scn

  oracle查询表中数据行(row)上最后的DML时间  第一种方式(块级跟踪):  select ora_rowscn,  dbms_rowid.ROWID_BLOCK_NUMBER(rowid) blockid,scn_to_timestamp(ora_rowscn)  from hs_futures.fuentrust t  order by scn_to_timestamp(ora_rowscn);  dbms_rowid.ROWID_BLOCK_NUMBER(rowid):是为获取数据所在块的IDscn_to_timestamp(ora_rowscn):获取数据最所修改的时间数据发现变化后通过上面SQL语句可以查看到数据最后修改的时间,注意因为是同一个块上,所以这个块上只要有DML操作那么所有数据的scn都更新了,所以凡是跟这条记录在同一个块上数据获取到的ora_rowscn和scn_to_timestamp(ora_rowscn)两个值都发生了相应的变化。  第二种方式(行级跟踪):  create table hs_futures.fuentrust_test1 rowdependencies asselect * from hs_futures.fuentrust  用以上语句创建一个基于ROWDEPENDENCIES模式的表,然后用第一种方法中的SQL去查询此表数据中的ora_rowscn,scn_to_timestamp(ora_rowscn)两个值,修改其中的某一条记录然后再去查询那个值发现发生变化的只是被修改那条记录的这两个值发生了变化,而在同一个块中没有被修改的其它记录这两个值是不会产生变化的。

oracle用rowid当查询条件好吗

虽然不建议这样使用,但是它是能查得出来的

如何得到oracle插入记录的rowid

into 只能在query或fetch的时候使用,所以在insert之后,你再query出来,这时候可以把rowid也一同query出来,返回。

在Oracle中,Rowid可以作为表的主键吗?如果该表与其他表有关联呢?

朋友你好我来说两句原因一(RowID可那随时改变)首先RowID也是伪列,但是他也是唯一的。他每个值表示数据块的地址。主键是可以做,但是很容易生效,当你对数据进行移动,如导入和导出之类的操作,这个RowID也会随之改变。所以说RowID不适合做主键。原因二(主键也就含有自动创建的唯一索引)索引创建的过程就是由RowID和列值进行绑定,当数据块地址发生改变的时候,如删除一条记录,那么索引也会被自动维护,也就是说RowID会自动改变,这也是ORACLE内部用ROWID的方法希望你能理解!祝好运

oracle中如何删除第十条及以后的所有记录

DELETE FROM TABLEWHERE ROWNUM>10

oracle中怎么修改数据rowid

rowid是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。rowid可以分为物理rowid和逻辑rowid两种。普通的堆表中的rowid是物理rowid,索引组织表(iot)的rowid是逻辑rowid。oracle提供了一种urowid的数据类型,同时支持物理和逻辑rowid。物理rowid又分为扩展rowid(extendedrowid)和限制rowid(restrictedrowid)两种格式。限制rowid主要是oracle7以前的rowid格式,现在已经不再使用,保留该类型只是为了兼容性。1.创建一临时表createtabletest_rowid(idnumber,row_idrowid);2.插入一行记录insertintotest_rowidvalues(1,null);3.修改刚插入的记录updatetest_rowidsetrow_id=rowidwhereid=1;4.查看rowidselectrowid,row_idfromtest_rowid;

Oracle数据库中rowid什么作用?

ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。x0dx0aROWID可以分为物理rowid和逻辑rowid两种。普通的堆表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid。oracle提供了一种urowid的数据类型,同时支持物理和逻辑rowid。x0dx0a物理rowid又分为扩展rowid(extendedrowid)和限制rowid(restrictedrowid)两种格式。限制rowid主要是oracle7以前的rowid格式,现在已经不再使用,保留该类型只是为了兼容性。x0dx0a1.创建一临时表x0dx0acreatetabletest_rowid(idnumber,row_idrowid);x0dx0a2.插入一行记录x0dx0ainsertintotest_rowidvalues(1,null);x0dx0a3.修改刚插入的记录x0dx0aupdatetest_rowidsetrow_id=rowidwhereid=1;x0dx0a4.查看rowidx0dx0aselectrowid,row_idfromtest_rowid;

oracle怎么给表的列加注释

一、伪列就像Oracle中的一个表列,但实际上它并未存储在表中。伪列可以从表中查询,但是不能插入、更新或删除它们的值。常用的伪列:rowid和rownum。 Rowid:数据库中的每一行都有一个行地址,Rowid伪列返回该行地址。可以使用Rowid值来定位表中的一行。通常情况下,Rowid值可以唯一地标识数据库中的一行。 Rowid伪列有以下重要用途: 1)能以最快的方式访问表中的一行; 2)能显示表的行是如何存储的。 3)可以作为表中行的唯一标识。 如:SQL> select rowid,ename from emp; Rownum:对于一个查询返回的每一行,Rownum伪列返回一个数值代表的次序。返回的第一行的Rownum值为1,第二行的Rownum值为2,依此类推。通过使用Rownum伪列,用户可以限制查询返回的行数。 如:SQL>select * from emp where rownum<11; 从EMP表中提取10条记录二、oracle中不支持select top n from tablename 查询,但是通过 order by 和 rownum 组合可以实现此功能。例如:SELECT 列名1...列名n FROM (SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n) WHERE ROWNUM <= N(抽出记录数) ORDER BY ROWNUM ASC

oracle中rowid怎么使用,是在多个表联合查询要修改表中的数据时。

rowid是表数据的每行数据的唯一ID,你可以把它当成表的一个字段来用,但是不能修改,类似PK

Oracle 分页 rowid 多表联查

一样的啦,把多表查询当作了查询不就行了。

oracle数据类型

按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW& RAW类型、ROWID & UROWID类型。在讲叙字符串类型前,先要讲一下编码。字符串类型的数据可依编码方式分成数据库字符集(CHAR/VARCHAR2/CLOB/LONG)和国际字符集(NCHAR/NVARCHAR2/NCLOB)两种。数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中。通过不同的编码集转换,即便是相同的字符,也可能会转换成不同的二进制编码。这也是产生乱码的原因。数据库的编码格式一般是在创建数据库时指定的。当然也可以修改数据库的编码。一 字符串类型1.1:CHAR类型 CHAR(size [BYTE | CHAR])CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTYE) CHAR(12 CHAR).一般来说默认是存储字节注意:数据库的NLS_CHARACTERSET 为AL32UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节。1.2: NCHAR类型这是一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。1.3 VARCHAR类型不要使用VARCHAR数据类型。使用VARCHAR2数据类型。1.4: VARCHAR2类型变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。1.5: NVARCHAR2类型这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。二. 数字类型2.1 NUMBER类型NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10130~10126(不包含此值),需要1~22字节(BYTE)不等的存储空间。P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字S是Scale的英文缩写,可以使用的范围为-84~127。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数下面是官方文档的示例Actual Data Specified As Stored As123.89 NUMBER 123.89123.89 NUMBER(3) 124123.89 NUMBER(6,2) 123.89123.89 NUMBER(6,1) 123.9123.89 NUMBER(3) 124123.89 NUMBER(4,2) exceeds precision123.89 NUMBER(6,-2) 100.01234 NUMBER(4,5).01234 .00012 NUMBER(4,5) .00012.000127 NUMBER(4,5) .00013.0000012 NUMBER(2,7) .0000012.00000123 NUMBER(2,7) .00000121.2e-4 NUMBER(2,5) 0.000121.2e-5 NUMBER(2,5) 0.000012.2 INTEGER类型INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。2.3 浮点数Oracle 数据库提供了专为浮点数的两种数值数据类型:BINARY_FLOATBINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。BINARY_DOUBLEBINARY_DOUBLE 是为 64 位,双精度浮点数字数据类型。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。在数字的列中,浮点数有小数精度。在 BINARY_FLOAT 或 BINARY_DOUBLE 的列中,浮点数有二进制的精度。二进制浮点数支持的特殊值无穷大和 NaN (不是数字)。2.5 FLOAT类型FLOAT类型也是NUMBER的子类型。Float(n),数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126。若要从二进制转换为十进制的精度,请将 n 乘以 0.30103。要从十进制转换为二进制的精度,请用 3.32193 乘小数精度。126 位二进制精度的最大值是大约相当于 38 位小数精度。三. 日期类型日期类型用于存储日期数据,但是并不是使用一般的格式(2012-08-08)直接存储到数据库的。3.1 DATE类型DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。3.2 TIMESTAMP类型这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位3.3 TIMESTAMP WITH TIME ZONE类型这是TIMESTAMP类型的变种,它包含了时区偏移量的值3.4 TIMESTAMP WITH LOCAL TIME ZONE类型3.5 INTERVAL YEAR TO MOTH3.6 INTERVAL DAY TO SECOND四. LOB类型内置的LOB数据类型包括BLOB、CLOB、NCLOB、BFILE(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。BLOB、CLOB、NCLOB类型4.1 CLOB 数据类型它存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集。CLOB对象可以存储最多 (4 gigabytes-1) * (database block size) 大小的字符4.2 NCLOB 数据类型它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据。4.3 BLOB 数据类型它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。BLOB对象最多存储(4 gigabytes-1) * (database block size)的二进制数据。4.4 BFILE 数据类型二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理五. RAW & LONG RAW类型5.1 LONG类型它存储变长字符串,最多达2G的字符数据(2GB是指2千兆字节, 而不是2千兆字符),与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换。ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的限制要少得多。 LONG类型的限制如下:1.一个表中只有一列可以为LONG型。(Why?有些不明白)2.LONG列不能定义为主键或唯一约束,3.不能建立索引4.LONG数据不能指定正则表达式。5.函数或存储过程不能接受LONG数据类型的参数。6.LONG列不能出现在WHERE子句或完整性约束(除了可能会出现NULL和NOT NULL约束)5.2 LONG RAW 类型,能存储2GB 的原始二进制数据(不用进行字符集转换的数据)5.3 RAW类型用于存储二进制或字符类型数据,变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2,000字节的信息六. ROWID & UROWID类型在数据库中的每一行都有一个地址。然而,一些表行的地址不是物理或永久的,或者不是ORACLE数据库生成的。例如,索引组织表行地址存储在索引的叶子,可以移动。例如,外部表的ROWID(如通过网关访问DB2表)不是u200bu200b标准的ORACLE的rowid。ORACLE使用通用的ROWID(UROWIDs)的存储地址的索引组织表和外表。索引组织表有逻辑urowids的,和国外表的外urowids。UROWID这两种类型的存储在ROWID伪(堆组织的表的物理行id)。创建基于逻辑的rowid在表中的主键。逻辑的rowid不会改变,只要主键不改变。索引组织表的ROWID伪UROWID数据类型。你可以访问这个伪列,你会堆组织表的ROWID伪(即使用一个SELECT …ROWID语句)。如果你想存储的rowid索引组织表,那么你就可以定义一列的表型UROWID到列检索值的ROWID伪。

oracle table scan 和rowid scan的区别

tableaccessbyindexrowidINDEXRANGESCAN执行计划意思:首先SQL滤条件通唯索引检索满足查询条件ROWID步骤叫INDEXRANGESCAN通查询ROWID获取要行数据步骤叫tableaccessbyindexrowid

rowid是只有oracle数据库中有的吗

如果没有enable row movement ,那么在ORACLE中一行数据 row的rowid在其生命周期中是不变的。

oracle PLSQL 查询语句select t.*, t.rowid from PU.YK t

改什么内容?

oracle过滤重复数据 rowid 两张关联表怎么用啊

过滤重复数据用distinct ,不过distinct会排序导致数据库消耗变多rowid是伪列,一般在索引的回读中有用两张表关联有很多等值连接和不等值连接内链接 外连接 自连接一般两张表通过主键外键连接,连接条件数=表数-1

oracle 中为什么可以用 rowid插入数据

oracle 中为什么可以用 rowid插入数据rowid是物理ID,可以理解为东西存放的实际位置的一个标记.oracle自己管理,不需要指定.

oracle中,rowid在记录创建后是否会被改变,中间经历select. update?

select,update是不会改变rowid的。改变rowid有两个前提(1)开启enable row movement。(2)物理存储发生了迁移。(迁移的前提有几种可能,(1)闪回flashback(2)长度超出预留的空间(超大表)(3)段收缩,当然可能还有其他可能,这里仅仅作为举例),当然这些都是在开启enable row movement时才会发生rowid改变,不然的话rowid是完全不会改变的。

oracle中rowid怎么用,具体功能,最好能讲的简单一些,谢谢了!

rowid是一个伪列,一般用不到,但是当需要具体锁定某一行时,它非常有用,因为它的值绝对不会重复。

在oracle数据库表中没有添加rowid字段为什么会出现

自带的 可以唯一键使用

oracle一张表中的rowid 会不会变

rowid 相当于物理地址,就是数据存放的地址。删除或者增加,原有rowid 不会变

ORACLE数据库中的ROWID

  我们可能对oracle的rowid的使用并不陌生 不过 如果仔细分析一下 发现其还是有些知识点      rowid是一个伪列 是用来确保表中行的唯一性 它并不能指示出行的物理位置 但可以用来定位行 rowid是存储在索引中的一组既定的值(当行确定后) 我们可以像表中普通的列一样将它选出来      利用rowid是访问表中一行的最快方式      rowid需要 个字节来存储 显示为 位的字符串     rowid的组成结构为     data object number( 位字符串)+relative file number( 位字符串)+block number( 位字符串)+row number( 位字符串) 如 AAAADeAABAAAAZSAAA     我们可以借助oracle提供的包dbms_rowid 来对rowid进行解析从而获取关于行的相关信息     bossdb SQL>select   rowid    dbms_rowid rowid_object(rowid) obj_id    dbms_rowid rowid_relative_fno(rowid) df#    dbms_rowid rowid_block_number(rowid) blknum    dbms_rowid rowid_row_number(rowid) rowno   from p_test where rownum< ;  ROWID OBJ_ID DF# BLKNUM ROWNO     AAAQ+tAANAAAC SAAA AAAQ+tAANAAAC SAAB AAAQ+tAANAAAC SAAC AAAQ+tAANAAAC SAAD     我们可以看到 通过rowid_row_number得到的行号是从 开始的 这是和rownum伪列的一个不同之处 我猜测rowid_row_number在求行号的时候是计算首行的偏移量     一般来说 当表中的行确定后 rowid就不会发生变化     但当如下情况发生时 rowid将发生改变      对一个表做表空间的移动后     对一个表进行了EXP/IMP后 lishixinzhi/Article/program/Oracle/201311/17378

Oracle数据库中rowid什么作用?

ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。ROWID可以分为物理rowid和逻辑rowid两种。普通的堆表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid。oracle提供了一种urowid的数据类型,同时支持物理和逻辑rowid。物理rowid又分为扩展rowid(extended rowid)和限制rowid(restricted rowid)两种格式。限制rowid主要是oracle7以前的rowid格式,现在已经不再使用,保留该类型只是为了兼容性。1.创建一临时表 create table test_rowid (id number, row_id rowid); 2.插入一行记录 insert into test_rowid values(1,null); 3.修改刚插入的记录 update test_rowid set row_id = rowid where id = 1; 4.查看rowid select rowid,row_id from test_rowid;

怎么看 oracle 执行计划结果 显示结果

一. 查看执行计划的三种方法1.1 设置autotrace1.2 使用SQL1.3 使用Toad,PL/SQL Developer工具二执行计划中字段解释: ID: 一个序号,但不是执行的先后顺序。执行的先后根据缩进来判断。 Operation: 当前操作的内容。 Rows: 当前操作的Cardinality,Oracle估计当前操作的返回结果集。 Cost(CPU):Oracle 计算出来的一个数值(代价),用于说明SQL执行的代价。 Time:Oracle 估计当前操作的时间。三 统计信息说明:db block gets : 从buffer cache中读取的block的数量 consistent gets: 从buffer cache中读取的undo数据的block的数量 physical reads: 从磁盘读取的block的数量 redo size: DML生成的redo的大小 sorts (memory) :在内存执行的排序量 sorts (disk) :在磁盘上执行的排序量

WIN7上如何安装Oracle客户端?需要通过配置tnsnames.ora,使用P/L sql去连接其他数据库

系统报什么错

下面这些OCI函数到底是在哪个lib库中实现的?用的是ORACLE11g

我只添加了oci.lib就可以编译过,你可以试试添加和不添加oci.lib错误条数有没有变化。我猜是不是你的oci.lib版本不对

利用oci如何获取oracle数据中number(10,5)类型的数据

NUMERIC(p,s):完全映射至NUMBER(p,s)。如果p未指定,则默认为38.DECIMAL(p,s)或DEC(p,s):完全映射至NUMBER(p,s)。如果p为指定,则默认为38.INTEGER或INT:完全映射至NUMBER(38)类型。SMALLINT:完全映射至NUMBER(38)类型。FLOAT(b):映射至NUMBER类型。DOUBLE PRECISION:映射至NUMBER类型。REAL:映射至NUMBER类型。以上这些类型只是oracle在语法上支持的,在底层实际上还是number1.表示的数值范围NUMBER:Oracle NUMBER类型能以极大的精度存储数值,具体来讲,精度可达38位。其底层数据格式类似一种 “封包小数“表示。Oracle NUMBER类型是一种变长格式,长度为0~22字节。它可以存储小到10e-130、 大到(但不包括)10e126的任何数值。这是目前最为常用的数值类型。也是Oracle9i Release 2及以 前的版本只支持的唯一一种适合存储数值数据的固有数据类型,其他一起兼容类型只是一种和number 之间的映射,在底层实际上都是numberBINARY_FLOAT:这是一种IEEE固有的单精度浮点数。它在磁盘上会占用5字节的存储空间:其中4个固定字节用 于存储浮点数,另外还有一个长度字节。BINARY_FLOAT能存储有6为精度、范围在~±1038.53 的数值BINARY_DOUBLE:这是一种IEEE固有的双精度浮点数。它在磁盘上会占用9字节的存储空间:其中8个固定字节用 于存储浮点数,还有一个长度字节。BINARY_DOUBLE能存储有12.位精度、范围在~±10308.25的 数值。取值范举例:创建测试表t2SQL> create table t2 2 ( num_type number, 3 float_type binary_float, 4 double_type binary_double 5 );Table created插入测试数据1SQL> SQL> insert into t2 2 (num_type, float_type, double_type) 3 values 4 (1234567890.0987654321, 1234567890.0987654321, 1234567890.0987654321);1 row inserted查看测试数据1SQL> SQL> select to_char(num_type), 2 to_char(float_type, "999999999999.999999999"), 3 to_char(double_type, "99999999999.9999999999") 4 from t2 5 ;TO_CHAR(NUM_TYPE) TO_CHAR(FLOAT_TYPE,"9999999999 TO_CHAR(DOUBLE_TYPE,"999999999--------------------------- -----------------------------------------------------------------------------------1234567890.0987654321 1234567940.000000000 1234567890.0987654000

solr5.5怎么连接oracle数据库

solr5.5怎么连接oracle数据库方法如下:1、启动Navicat,连接->oracle,配置如下:连接名随便起2、Basic连接类型:连接类型有两种,我们先看用Basic的连接方式,此方法适合没有安装Oracle客户端的机器,配置好之后,点连接测试,如果你数据库没有问题,则能连接测试成功。3,TNS连接类型:选择TNS监听连接类型,你首先要安装好oracle客户端,安装完成后,连接数据库时,先配置OCI.dll路径,Navicat->工具>选项>OCI,将oci.dll路径设置成你安装客户端的路径,如本例:D:appAdministratorproduct11.2.0client_2oci.dll,4,还有一步要做,到连接的Oracle数据库目录下找到tnsnames.ora文件,一般路径在D:oracleproduct10.2.0db_1NETWORKADMIN下,将该文件拷贝到你安装的oracle客户端目录下,如D:appAdministratorproduct11.2.0client_1NetworkAdmin nsnames.ora,在连接时就可以直接用TNS方式连接了,程序会自动识别你的网络连接名,如果没有自动识别网络连接名,说明配置的不对,再检查下有说明漏的。5,配置好之后,点连接测试,如果你数据库没有问题,则能连接测试成功。

Oracle分析函数之Lag和Lead()使用

在平时的工作中,由于主要接触ERP方面的业务数据处理,Oracle的分析函数一直没怎么使用,但随着公司开始做数据分析,Oracle的分析函数出现的越来越频繁。因此准备把分析函数中重要的几个常用函数用法分析下。 Lag(): 在查询中取出同一字段前N行的数据作为独立的列。 表达式理解为:按column2进行分组且根据column3进行排序,取column1前N行(往前数第N行)的列值,如果为空则用xxxx进行默认。 由此可以想到,采用该方式可以计算环比以及同比,同比与表间join,该函数将大大减少SQL的量。 Lead(): 在查询中取出同一字段后N行的数据作为独立的列。 表达式理解为:按column2进行分组且根据column3进行排序,取column1后N行(往后数第N行)的列值,如果为空则用xxxx进行默认。 lag和lead的函数,主要应用于查找前后行的列记录,使用这两个分析函数,可以减少子查询或表关联,并且能够大大提升sql语句性能。

oracle pivot 转换后的列 可以进行加减函数运算么

使用下面的语句同样可以实现效果with temp as(select "四川省" nation ,"成都市" city,"第一" ranking from dual union allselect "四川省" nation ,"绵阳市" city,"第二" ranking from dual union allselect "四川省" nation ,"德阳市" city,"第三" ranking from dual union allselect "四川省" nation ,"宜宾市" city,"第四" ranking from dual union allselect "湖北省" nation ,"武汉市" city,"第一" ranking from dual union allselect "湖北省" nation ,"宜昌市" city,"第二" ranking from dual union allselect "湖北省" nation ,"襄阳市" city,"第三" ranking from dual)

oracle中pivot子查询如何用

xml 类型的时候可以使用any 关键字和子查询,返回的结果是xml结构的;select * from ( select times_purchased as "Puchase Frequency", state_code from customers t)pivot xml( count(state_code) for state_code in (select state_code from preferred_states))order by 1

安装oracle11grac时使用asmlib和udev的区别

在<Why ASMLIB and why not?>我们介绍了使用ASMLIB作为一种专门为Oracle Automatic Storage Management特性设计的内核支持库(kernel support library)的优缺点,同时建议使用成熟的UDEV方案来替代ASMLIB。这里我们就给出配置UDEV的具体步骤,还是比较简单的:1.确认在所有RAC节点上已经安装了必要的UDEV包[root@rh2 ~]# rpm -qa|grep udevudev-095-14.21.el52.通过scsi_id获取设备的块设备的唯一标识名,假设系统上已有LUN sdc-sdpfor i in c d e f g h i j k l m n o p ;doecho "sd$i" "`scsi_id -g -u -s /block/sd$i` ";donesdc 1IET_00010001sdd 1IET_00010002sde 1IET_00010003sdf 1IET_00010004sdg 1IET_00010005sdh 1IET_00010006sdi 1IET_00010007sdj 1IET_00010008sdk 1IET_00010009sdl 1IET_0001000asdm 1IET_0001000bsdn 1IET_0001000csdo 1IET_0001000dsdp 1IET_0001000e 以上列出于块设备名对应的唯一标识名3.创建必要的UDEV配置文件,首先切换到配置文件目录[root@rh2 ~]# cd /etc/udev/rules.d定义必要的规则配置文件[root@rh2 rules.d]# touch 99-oracle-asmdevices.rules [root@rh2 rules.d]# cat 99-oracle-asmdevices.rulesKERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_00010001", NAME="ocr1", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_00010002", NAME="ocr2", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_00010003", NAME="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_00010004", NAME="asm-disk2", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_00010005", NAME="asm-disk3", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_00010006", NAME="asm-disk4", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_00010007", NAME="asm-disk5", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_00010008", NAME="asm-disk6", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_00010009", NAME="asm-disk7", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_0001000a", NAME="asm-disk8", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_0001000b", NAME="asm-disk9", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_0001000c", NAME="asm-disk10", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_0001000d", NAME="asm-disk11", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="1IET_0001000e", NAME="asm-disk12", OWNER="grid", GROUP="asmadmin", MODE="0660"Result 为/sbin/scsi_id -g -u -s %p的输出--Match the returned string of the last PROGRAM call. This key may beused in any following rule after a PROGRAM call.按顺序填入刚才获取的唯一标识名即可OWNER为安装Grid Infrastructure的用户,在11gr2中一般为grid,GROUP为asmadminMODE采用0660即可NAME为UDEV映射后的设备名,建议为OCR和VOTE DISK创建独立的DISKGROUP,为了容易区分将该DISKGROUP专用的设备命名为ocr1..ocrn的形式其余磁盘可以根据其实际用途或磁盘组名来命名4.将该规则文件拷贝到其他节点上[root@rh2 rules.d]# scp 99-oracle-asmdevices.rules Other_node:/etc/udev/rules.d5.在所有节点上启动udev服务,或者重启服务器即可[root@rh2 rules.d]# /sbin/udevcontrol reload_rules[root@rh2 rules.d]# /sbin/start_udevStarting udev: [ OK ]6.检查设备是否到位[root@rh2 rules.d]# cd /dev[root@rh2 dev]# <a href="https://www.baidu.com/s?wd=ls&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4PvD3PHKBujb4njD1P1uW0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErHD3njfLrHTvnjnYP1fYPWR4" target="_blank" class="baidu-highlight">ls</a> <a href="https://www.baidu.com/s?wd=-l&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4PvD3PHKBujb4njD1P1uW0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErHD3njfLrHTvnjnYP1fYPWR4" target="_blank" class="baidu-highlight">-l</a> ocr*brw-rw---- 1 grid asmadmin 8, 32 Jul 10 17:31 ocr1brw-rw---- 1 grid asmadmin 8, 48 Jul 10 17:31 ocr2[root@rh2 dev]# <a href="https://www.baidu.com/s?wd=ls&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4PvD3PHKBujb4njD1P1uW0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErHD3njfLrHTvnjnYP1fYPWR4" target="_blank" class="baidu-highlight">ls</a> <a href="https://www.baidu.com/s?wd=-l&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4PvD3PHKBujb4njD1P1uW0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErHD3njfLrHTvnjnYP1fYPWR4" target="_blank" class="baidu-highlight">-l</a> asm-disk*brw-rw---- 1 grid asmadmin 8, 64 Jul 10 17:31 asm-disk1brw-rw---- 1 grid asmadmin 8, 208 Jul 10 17:31 asm-disk10brw-rw---- 1 grid asmadmin 8, 224 Jul 10 17:31 asm-disk11brw-rw---- 1 grid asmadmin 8, 240 Jul 10 17:31 asm-disk12brw-rw---- 1 grid asmadmin 8, 80 Jul 10 17:31 asm-disk2brw-rw---- 1 grid asmadmin 8, 96 Jul 10 17:31 asm-disk3brw-rw---- 1 grid asmadmin 8, 112 Jul 10 17:31 asm-disk4brw-rw---- 1 grid asmadmin 8, 128 Jul 10 17:31 asm-disk5brw-rw---- 1 grid asmadmin 8, 144 Jul 10 17:31 asm-disk6brw-rw---- 1 grid asmadmin 8, 160 Jul 10 17:31 asm-disk7brw-rw---- 1 grid asmadmin 8, 176 Jul 10 17:31 asm-disk8brw-rw---- 1 grid asmadmin 8, 192 Jul 10 17:31 asm-disk9

oracle数据库运行sql很卡很慢很顿,看等待事件都是cursor:pin s on x,这是啥

详解cursor: pin S wait on X等待事件 ‘cursor: pin * events"等待事件 该类等待事件一般是为了pin相关的子游标 ‘Cursor: pin S on X" 最常见的等待事件, 进程为了共享操作例如执行pin游标而以SHRD S mode申请mutex, 但是未立即获得。原因是该游标被其他进程以EXCL X mode 持有了。 实际该 cursor: pin S wait on X等待事件往往是由于其他因素诱发的。Mutex争用仅仅是问题的症状,但根本原因需要Database Consultant 进一步挖掘。 下面我们列出一些已知的常见案例, 在这些例子中可以看到 我上面提到的 Mutex的争用仅仅是伪争用: 过多的子游标 High Version Counts 过多的子游标版本Version Count可能导致Mutex 争用,一般一个SQL的Version Count不要高于500。 检查High Version Count很简单, 在AWR里就有SQL ordered by High Version Count,也可以写SQL查V$SQL、V$SQLAREA 昂贵的X$、V$视图查询 一些对于V$、X$视图的查询,需要访问X$KGL*之类的fixed table,可能触发Mutex争用。 Mutex持有者得不到CPU Mutex持有者若得不到足够的CPU片可能一直阻塞他人,直到它拿到需要的CPU。 这种情况可能由于OS操作系统的实际情况或者使用Resource Manager而引起。需要配合AWR中的Host CPU、Instance CPu一起看。 已经被KILLED的SESSION仍持有Mutex 当session正持有Mutex,而其对应的Process被强制KILL掉, 则直到PMON彻底清理掉该Dead Process并释放Mutex,其他session才能不再等待。 诊断该类问题,最好能检查PMON的TRACE。 当然也存在部分BUG会导致PMON清理过程非常慢。 举例来说,bug 9312879描述了一种场景:PMON 需要获得某个Mutex以便清理某个dead process,但是该Mutex又被其他进程持有,则PMON甚至无法开始真正清理并释放Mutex。 如果自己搞不定可以找ASKMACLEAN专业ORACLE优化团队成员帮您搞定!

oracle 怎么自动执行查询的结果

你先把你查询出来的内容保存为一个文件,然后做一个批处理文件执行这个保存好的文件,请参考一下文档.http://heisetoufa.iteye.com/blog/287301/

oracle 转换一个日期时间对应的半年(上半年/下半年)的第一天和最后一天

add_months(trunc(sysdate,"yyyy"),case when to_number(to_date(sysdate,"mm"))>6 then 6 else 0 end)

oracle 中用类似trunc 及to_char 后还能用左关联(+)不?

ansi的标准写法:select * from a left join b on trunc(a.date1)=trunc(b.date1)

oracle 关于年龄计算问题?

计算人的周岁月份到了,但还差2天算不算到几周岁了

oracle trunc()怎么截取当前日期24个整点时间段加0.5秒 如,1:00:05,2:00:05.....,23:00:05

select trunc(sysdate, "hh")+1/24/60/60*5 from dual

oracle查询命令中trunc(sysdate)-2 是什么意思啊?

当前时间-2.去掉时、分、秒

mysql有oracle的trunc吗

TRUNC 语法: TRUNC(x[,y]) 功能: 计算截尾到y位小数的x值. y缺省为0,结果变为一个整数值.如果y是一个负数,那么就截尾到小数点左边对应的位上. trunc(sysdate)=to_date("20121231","yyyymmdd")

SQLSERVER有类似ORACLE里的TRUNC函数的吗

-字符串聚合,适用于SQL Server 2005及以上--测试数据with tmp(column1,column2) as (select "A","aa" union allselect "A","bb" union allselect "A","cc" union allselect "B","dd" union allselect "B","ee")--用for xml path实现字符串聚合

oracle中trunc(sysdate-1)是什么意思

selecttrunc(sysdate-1)fromdual;楼主去数据库将这个脚本执行一下,自己就有答案了,就是系统时间减1天,取年月日

oracle中 trunc(sysdate)+7+1/24是啥意思?多谢了

在当前日期上再加一周一小时

oracle trunc()函数关于日期和时间,需要详细解答和举例?

【答案】:给你个例子吧:alter session set nls_date_format="YYYY-MM-DD HH24:MI:SS";Session altered.SQL> SELECT "Year" AS truncType , TRUNC( SYSDATE, "YYYY" ) FROM DUAL2 UNION ALL3 SELECT "Quarter" AS truncType, TRUNC( SYSDATE, "Q" ) FROM DUAL4 UNION ALL5 SELECT "Month" AS truncType, TRUNC( SYSDATE, "MM" ) FROM DUAL6 UNION ALL7 SELECT "Week" AS truncType, TRUNC( SYSDATE, "W" ) FROM DUAL8 UNION ALL9 SELECT "Day" AS truncType, TRUNC( SYSDATE, "D" ) FROM DUAL10 UNION ALL11 SELECT "Hour" AS truncType, TRUNC( SYSDATE, "HH" ) FROM DUAL;TRUNCTYPE TRUNC(SYSDATE,"YYYY-------------- -------------------Year 2010-01-01 00:00:00Quarter 2010-10-01 00:00:00Month 2010-10-01 00:00:00Week 2010-10-15 00:00:00Day 2010-10-17 00:00:00Hour 2010-10-17 22:00:006 rows selected.

oracle中trunc()函数怎么用?

TRUNC(number,num_digits) Number 需要截尾取整的数字。 Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。TRUNC()函数截取时不进行四舍五入

oracle trunc与floor的区别

这两个没有关系吧?trunc()是截断操作floor(x)是小于或等于x的最大整数。

oracle中 trunc+7+1/24是啥意思

  Oracle trunc()函数的用法:  TRUNC(for dates)  TRUNC函数为指定元素而截去的日期值。  其具体的语法格式如下:  TRUNC(date[,fmt])  其中:  date 一个日期值  fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去  trunc(sysdate)为取得当前的年月日,然后+7是向后推一周的时间,再加上1/24,就是再加一小时。整体就是取得距现在时间一周零一小时的日期加上时间,整点时间。对于当前日期和时间,在日期上加7天,时间中的小时加1,其它分、秒都不变  例如下面的:  trunc(sysdate)= trun(sysdate,"dd")截取掉时分秒,结果是2011-05-11 00:00:00  select trunc(sysdate,"mm") from dual; 截取月份,结果 2011-05-01 00:00:00  select trunc(sysdate,"yy") from dual; 截取年份,结果 2011-01-01 00:00:00  +7 是加7天  +1/24 是加 1/24 天,即一个小时  结果意思就是 一周后的凌晨1点整  

Oracle的Trunc和round的区别

Oracle的Trunc和round的区别顾名思义,Trunc 是截断,Trunc(3.19) = 3,Trunc(3.91) = 3,Round 是四舍五入取整,Round(3.19) = 3,Round(3.91) = 4。但是,没有研究过 Round(0.5) 和 Round(1.5) 是什么结果?以为是 1 和 2,但在 VBA 中依次得到的是 0 和 2。Oracle 应该采用的是 Banker"s Rounding,也就是常规的四舍五入,否则在那么多项目中从未遇到过【四舍六入五奇进】的情况。出租车计价器有一些采用的就是【四舍六入五奇进】。

oracle中trunc函数怎样使用?

/**************日期********************/1.select trunc(sysdate) from dual --2011-3-18 今天的日期为2011-3-182.select trunc(sysdate, "mm") from dual --2011-3-1 返回当月第一天.3.select trunc(sysdate,"yy") from dual --2011-1-1 返回当年第一天4.select trunc(sysdate,"dd") from dual --2011-3-18 返回当前年月日5.select trunc(sysdate,"yyyy") from dual --2011-1-1 返回当年第一天6.select trunc(sysdate,"d") from dual --2011-3-13 (星期天)返回当前星期的第一天7.select trunc(sysdate, "hh") from dual --2011-3-18 14:00:00 当前时间为14:41 8.select trunc(sysdate, "mi") from dual --2011-3-18 14:41:00 TRUNC()函数没有秒的精确/***************数字********************//*TRUNC(number,num_digits) Number 需要截尾取整的数字。 Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。TRUNC()函数截取时不进行四舍五入*/9.select trunc(123.458) from dual --12310.select trunc(123.458,0) from dual --12311.select trunc(123.458,1) from dual --123.412.select trunc(123.458,-1) from dual --12013.select trunc(123.458,-4) from dual --014.select trunc(123.458,4) from dual --123.45815.select trunc(123) from dual --12316.select trunc(123,1) from dual --12317.select trunc(123,-1) from dual --120

用oracle 语句实现一个 统计一个字段的 用逗号分割的字符串,字段不是固定值,长度也不固定

select length(PERIODS)-length(replace(PERIODS,","))+1 from test

oracle 存储过程 求助

详见文本中“--注:”后的注释create or replace procedure test_cjsql_z( /*in_sqlnr in clob,*/out_code in out varchar2, out_mess in out varchar2) Authid Current_User IS--注:创建存储过程test_cjsql_z,输入输出型参数out_code、out_mess PRAGMA AUTONOMOUS_TRANSACTION; --注:自助事务处理 in_sqlnr clob;--注:声明clob类型变量 V_LENGTH NUMBER;--注:number是数值类型变量 V_NUMBER1 NUMBER; V_NUMBER2 NUMBER; V_BSF NUMBER; --标识附,标识SQL语句中最后CHR(10)的位置。 V_STEP NUMBER; buffer VARCHAR2(4000);--注:varchar2(xx)是字符串类型变量,xx是长度 V_TEMPSQL VARCHAR2(4000); V_LINESQL VARCHAR2(4000); V_SQLERR VARCHAR2(255); jb_err exception;--注:声明例外对象 amount INT; --v_sql VARCHAR2(4000);BEGIN select sqlnr into in_sqlnr from t_sql where sql_id = "100475"; --取clob 字段 V_LENGTH := to_number(ceil(dbms_lob.getlength(in_sqlnr) / 2000)); --取lob长度 for i in 1 .. V_LENGTH loop --循环次数 amount := 2000;--注:以2000为单位 dbms_lob.read(in_sqlnr, amount, (i - 1) * 2000 + 1, buffer); --提取lob buffer := replace(buffer, chr(13), ""); --替换 回车 buffer := V_TEMPSQL || buffer;--注:拼接字符串 V_BSF := INSTR(buffer, CHR(10), -1, 1); --最后 换行 的位置 V_TEMPSQL := SUBSTR(buffer, V_BSF, length(buffer) - V_BSF + 1);--注:从buffer中截取字符串 buffer := SUBSTR(buffer, 1, V_BSF); V_STEP := 1; loop V_NUMBER1 := INSTR(buffer, CHR(10), 1, V_STEP); V_NUMBER2 := INSTR(buffer, CHR(10), 1, V_STEP + 1); V_LINESQL := RTRIM(REPLACE(SUBSTR(buffer, V_NUMBER1, V_NUMBER2 - V_NUMBER1 + 1), CHR(10), ""), ";"); EXIT WHEN V_LINESQL IS NULL; --V_LINESQL 为 null 跳出循环 BEGIN -- v_sql := "insert into hx_sjmx.test_zh values (V_LINESQL)"; -- EXECUTE IMMEDIATE v_sql; EXECUTE IMMEDIATE V_LINESQL; --执行 V_LINESQL EXCEPTION --注:FOR循环中的例外处理部分 WHEN OTHERS THEN V_SQLERR := SUBSTR(SQLERRM, 1, 255); --例外 out_code := "2";--注:输出返回代码 out_mess := substrb(V_SQLERR || "-" || V_LINESQL, 1, 2000);--注:输出返回文本 raise jb_err;--注:抛出例外 END; V_STEP := V_STEP + 1; end loop; end loop; out_code := "1";--注:输出返回代码 out_mess := "执行成功!";--注:输出返回文本 commit;exception--注:例外处理 when jb_err then--注:当出现自定义例外时 rollback;--注:回滚 when others then--注:其它情况 V_SQLERR := SUBSTR(SQLERRM, 1, 255); out_code := "3";--注:输出返回代码 out_mess := V_SQLERR;--注:输出返回文本 rollback;--注:回滚END test_cjsql_z;

oracle for循环

create or replace procedure test_yurui( p_line in number) is v_line number;begin v_line:=p_line; if(v_line<1) then dbms_output.put_line("请输入>=1的整数"); end if; for v in 1..p_line loop for m in 1..p_line-v loop dbms_output.put(" "); end loop; for n in 1..2*v-1 loop dbms_output.put("*"); end loop; dbms_output.put_line(""); end loop;end test_yurui;-----------------------效果如下---------------------输入6 * *** ***** ******* ********************

如何对oracle进行 REORG?

问题不清楚,进行什么样的reorg?
 1 2 3 4 5 6  下一页  尾页