rowid英文怎么读

说说Oracle的rowid

  在Oracle中rowid唯一标识每条记录所在的位置 它作为一个伪列在查询中出现

   select rowid id

   from test_table

   where rownum《= ;

   ROWID                      ID

  

   AAAVcbAAPAAAAALAAA         

   AAAVcbAAPAAAAALAAB         

   AAAVcbAAPAAAAALAAC         

   AAAVcbAAPAAAAALAAD         

   AAAVcbAAPAAAAALAAE         

   AAAVcbAAPAAAAALAAF         

   AAAVcbAAPAAAAALAAG         

   AAAVcbAAPAAAAALAAH         

   AAAVcbAAPAAAAALAAI         

   AAAVcbAAPAAAAALAAJ        

  rowid是由 个字符组成分 个部分 分别是

   个字符的对象编号 个字符的文件号 个字符的块编号 个字符的行编号

  每一个字符的取值范围以及对应的数值是

  

   | A|  |    | a| |    | | |

   | B|  |    | b| |    | | |

   | C|  |    | c| |    | | |

   | D|  |    | d| |    | | |

   | E|  |    | e| |    | | |

   | F|  |    | f| |    | | |

   | G|  |    | g| |    | | |

   | H|  |    | h| |    | | |

   | I|  |    | i| |    | | |

   | J|  |    | j| |    | | |

   | K| |    | k| |    | +| |

   | L| |    | l| |    | /| |

   | M| |    | m| |    |  |   |

   | N| |    | n| |    |  |   |

   | O| |    | o| |    |  |   |

   | P| |    | p| |    |  |   |

   | Q| |    | q| |    |  |   |

   | R| |    | r| |    |  |   |

   | S| |    | s| |    |  |   |

   | T| |    | t| |    |  |   |

   | U| |    | u| |    |  |   |

   | V| |    | v| |    |  |   |

   | W| |    | w| |    |  |   |

   | X| |    | x| |    |  |   |

   | Y| |    | y| |    |  |   |

   | Z| |    | z| |    |  |   |

  

  可以看到rowid是一个 进制的表示方式 利用上述对应表即可计算出

  对象编号 AAAVcb  =

  文件号 AAP =

  块号 AAAAAL =

  行号 AAA~AAJ = ~

   进制的转换完全可以交给机器去做 Oracle也是这么认为的 于是提供了一个叫做dbms_rowid的包 它包含了一系列的方法 我们借助这个包就可完成上述的工作了

   select rowid

      substr(rowid ) || : || dbms_rowid rowid_object(rowid)       数据对象编号/object_id

      substr(rowid ) || : || dbms_rowid rowid_relative_fno(rowid) 文件编号/file_id

      substr(rowid )|| : || dbms_rowid rowid_block_number(rowid) 块编号/block_id

      substr(rowid )|| : || dbms_rowid ROWID_ROW_NUMBER(rowid)   行编号/row_num

   from test_table

   where rownum《= ;

   ROWID              数据对象编号/object_id    文件编号/file_id     块编号/block_id      行编号/row_num

  

   AAAVcbAAPAAAAALAAA AAAVcb :             AAP :              AAAAAL :           AAA :

   AAAVcbAAPAAAAALAAB AAAVcb :             AAP :              AAAAAL :           AAB :

   AAAVcbAAPAAAAALAAC AAAVcb :             AAP :              AAAAAL :           AAC :

   AAAVcbAAPAAAAALAAD AAAVcb :             AAP :              AAAAAL :           AAD :

   AAAVcbAAPAAAAALAAE AAAVcb :             AAP :              AAAAAL :           AAE :

   AAAVcbAAPAAAAALAAF AAAVcb :             AAP :              AAAAAL :           AAF :

   AAAVcbAAPAAAAALAAG AAAVcb :             AAP :              AAAAAL :           AAG :

   AAAVcbAAPAAAAALAAH AAAVcb :             AAP :              AAAAAL :           AAH :

   AAAVcbAAPAAAAALAAI AAAVcb :             AAP :              AAAAAL :           AAI :

   AAAVcbAAPAAAAALAAJ AAAVcb :             AAP :              AAAAAL :           AAJ :

  这个结果对不对呢?我们可以这样验证 注意 以下查询需要DBA权限

  首先是object_id

   select

      owner object_name object_id

   from dba_objects

   where object_name= TEST_TABLE ;

   OWNER      OBJECT_NAME           OBJECT_ID

  

   TEST       TEST_TABLE               

  然后是文件编号和块编号

   select

      owner segment_name segment_type extent_id

      file_id block_id blocks bytes

   from dba_extents

   where segment_name= TEST_TABLE ;

   OWNER  SEGMENT_NAME  SEGMENT_TYPE   EXTENT_ID  FILE_ID  BLOCK_ID  BLOCKS  BYTES

  

   TEST   TEST_TABLE    TABLE                                          

   TEST   TEST_TABLE    TABLE                                         

  编号为 的块落在了编号为 的exntent上 只能说是验证了一半 接下来我们将数据块dump出来看看 不过做之前先为这一行打上 标记 看以下过程

   test$logdw@logdw SQL》 select rowid t * from test_table t where rownum《= ;

  

   ROWID                      ID DATA

  

   AAAVcbAAPAAAAALAAA                                        Q

   AAAVcbAAPAAAAALAAB                                        Q

   AAAVcbAAPAAAAALAAC                                        Q

   AAAVcbAAPAAAAALAAD                                        Q

   AAAVcbAAPAAAAALAAE                                        Q

  

   rows selected

   test$logdw@logdw SQL》 update test_table set data=lpad( killkill ) where id= ;

  

   row updated

   test$logdw@logdw SQL》 select rowid t * from test_table t where rownum《= ;

  

   ROWID                      ID DATA

  

   AAAVcbAAPAAAAALAAA                                 killkill

   AAAVcbAAPAAAAALAAB                                        Q

   AAAVcbAAPAAAAALAAC                                        Q

   AAAVcbAAPAAAAALAAD                                        Q

   AAAVcbAAPAAAAALAAE                                        Q

  

   rows selected

   test$logdw@logdw SQL》 mit;

  做好了 标记 可以dump数据块了

   sys$logdw@logdw SQL》 select get_trace_name() from dual ;

  

   GET_TRACE_NAME()

  

   /u /app/oracle/diag/rdbms/logdw/logdw/trace/logdw_ora_ trc

  

   sys$logdw@logdw SQL》 alter system dump datafile block ;

  

   System altered

  打开trc文件 摘录如下

   Start dump data blocks tsn: file#: minblk maxblk

  

  

   Dump of memory from x A F A to x A F A

  

  

   A F F C B  

   A F F C B C C C E C  

  

  

   block_row_dump:

   tab row @ x ac

   tl: fb: H FL lb: x   cc:

   col  :   c

   col  :

     b c

     c b c c

  

  

lishixinzhi/Article/program/Oracle/201311/17417

oracle数据类型

按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW& RAW类型、ROWID & UROWID类型。
在讲叙字符串类型前,先要讲一下编码。字符串类型的数据可依编码方式分成数据库字符集(CHAR/VARCHAR2/CLOB/LONG)和国际字符集(NCHAR/NVARCHAR2/NCLOB)两种。数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中。通过不同的编码集转换,即便是相同的字符,也可能会转换成不同的二进制编码。这也是产生乱码的原因。数据库的编码格式一般是在创建数据库时指定的。当然也可以修改数据库的编码。
一 字符串类型
1.1:CHAR类型 CHAR(size )
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 DataSpecified AsStored As
123.89NUMBER123.89
123.89NUMBER(3)124
123.89NUMBER(6,2)123.89
123.89NUMBER(6,1)123.9
123.89NUMBER(3)124
123.89NUMBER(4,2)exceeds precision
123.89NUMBER(6,-2)100
.01234NUMBER(4,5).01234
.00012NUMBER(4,5).00012
.000127NUMBER(4,5).00013
.0000012NUMBER(2,7).0000012
.00000123NUMBER(2,7).0000012
1.2e-4NUMBER(2,5)0.00012
1.2e-5NUMBER(2,5)0.00001
2.2 INTEGER类型
INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。
2.3 浮点数
Oracle 数据库提供了专为浮点数的两种数值数据类型:
BINARY_FLOAT
BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。
BINARY_DOUBLE
BINARY_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 MOTH
3.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表)不是​​标准的ORACLE的rowid。
ORACLE使用通用的ROWID(UROWIDs)的存储地址的索引组织表和外表。索引组织表有逻辑urowids的,和国外表的外urowids。UROWID这两种类型的存储在ROWID伪(堆组织的表的物理行id)。
创建基于逻辑的rowid在表中的主键。逻辑的rowid不会改变,只要主键不改变。索引组织表的ROWID伪UROWID数据类型。你可以访问这个伪列,你会堆组织表的ROWID伪(即使用一个SELECT …ROWID语句)。如果你想存储的rowid索引组织表,那么你就可以定义一列的表型UROWID到列检索值的ROWID伪。

sql如何把一个表的一列值替换为另外一个表的一列值

update a

set var=b.var

from

(

select rowid=row_number() over (order by var),*

from t1

where name=’Tommy’

) a

inner join

(

select rowid=row_number() over (order by var),*

from t2

) b

on a.rowid=b.rowid

结构化查询语言

结构化查询语言(英文简称:SQL)是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同 数据库系统,,可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。结构化查询语言有五种数据类型: 字符型、文本型、数值型、逻辑型和日期型。

结构化查询语言SQL(STRUCTURED QUERY LANGUAGE)是最重要的 关系数据库操作语言,并且它的影响已经超出 数据库领域,得到其他领域的重视和采用,如 人工智能领域的数据检索,第四代软件开发工具中嵌入SQL的语言等。

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

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

oracle如何读取数据

Oracle读取数据的最大限制取决于操作系统和Oracle对多块读IO的限制。在物理上来说,一个SQL语句要读取某个记录,必须将该记录读取到DB CACHE中,然后才能从DB CACHE中获取,这种访问我们一般称为物理读(READ),如果这个数据已经存在于DB CACHE中,那么前台进程可以直接从DB CACHE中读取数据,这样的读取成为逻辑读(GET),如果要读取的数据已经被修改,需要从UNDO中读取前映像来获取一致性的数据,那么会从UNDO中取出前映像,和当前的数据块一起形成一个一致性读块(CR BLOCK),然后再从CR BLOCK中读取数据,这种访问方式称为一致性读(CR GET)。从逻辑上讲,Oracle读取数据通过三种途径:全表扫描(Full Table Sacn,FTS)、引扫描、通过ROWID直接访问。在阅读SQL执行计划的时候,可以通过TABLE ACCESS子句来查看Oracle访问某个表的方法,一般来说,对于大型的表来说,如果出现TABLE ACCESS FULL的提示,是需要加以重视的,一般情况下,对于大表的全表扫描应该是尽量避免的。下面是一个简单的执行计划:Query Plan—————————————–SELECT STATEMENT指明这部分操作被采用并行查询的方式执行,

谁知道用满语,“喜欢我就支持我“怎么说

我国能翻译满语的不到50人,而精通者不足20人
~喜欢,喜好
我(第一人称单数)
附有指示,支配,干预,帮助,支持,授予,下附着,雪,风冒出,燃起,火
满语词典
http://www.heima.com/web/Page1.srf?userid=363315&columnno=6&rowid=12
http://www.heima.com/web/Page1.srf?userid=363315&columnno=6&rowid=13

oracle中说虚拟列指的是什么

不是实际表中的列,比如
select rownum,rowid from dual
dual是表名,只有dummy一列,
rownum和rowid就是虚拟列(也叫“伪列“)
rownum表示数据序号
rowid是oracle行位置的唯一编号

select t.*, t.rowid from studyinfo t这条语句是什么意思谢谢

从 studyinfo表中读出所有数据,并在最后再添加一列rowid,此列与前面的rowid是相同的