日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle伪列ROWID和ROWNUM

發(fā)布時間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle伪列ROWID和ROWNUM 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

1.ROWID

ROWID數(shù)據(jù)類型介紹:

ROWID偽劣是BASE64編碼的,oracle表的每行數(shù)據(jù)都有一個rowid值。與數(shù)據(jù)類型ROWID含義有所不同。

官網(wǎng)介紹:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i46148

ROWID類型組成詳解:

ROWID偽劣值由18位組成,其中末三位,表示該行數(shù)據(jù)在表中的位置。如下所示:

ROWID結(jié)構(gòu)變過過程:http://www.orafaq.com/wiki/ROWID

第一行數(shù)據(jù)的位置標(biāo)記AAA,其中A在base64編碼中表示0,即是0。所以說表行數(shù)據(jù)的ROWID是從0(base64 表示為:AAA)開始的。

SQL> select rowid,substr(rowid, 1, 6) "#objct", substr(rowid, 7, 3) "#file",2 substr(rowid, 10, 6) "#block", substr(rowid, 16, 3) "#row"3 from clobtest where id =1;ROWID #objct #file #block #row ------------------ ------------ ------ ------------ ------ AAANfCAAGAAAP3XAAA AAANfC AAG AAAP3X AAA

rowid AAANFC AAG AAAP3X AAA
說明 數(shù)據(jù)對象號 相對文件號 數(shù)據(jù)塊號 行號

base 64編碼

索 ?引

對應(yīng)字符

索 ?引

對應(yīng)字符

索 ?引

對應(yīng)字符

索 ?引

對應(yīng)字符

0

A

17

R

34

i

51

z

1

B

18

S

35

l

52

0

2

C

19

T

36

k

53

1

3

D

20

U

37

l

54

2

4

E

21

V

38

m

55

3

5

F

22

W

39

n

56

4

6

G

23

X

40

o

57

5

7

H

24

Y

41

p

58

6

8

I

25

Z

42

q

59

7

9

J

26

a

43

r

60

8

10

K

27

b

44

s

61

9

11

L

28

c

45

t

62

+

12

M

29

d

46

u

63

/

13

N

30

e

47

v

?

?

14

O

31

f

48

w

?

?

15

P

32

g

49

x

?

?

16

Q

33

h

50

y

?

?


參考資料: http://blog.csdn.net/chiclewu/article/details/25782619


ROWID能作為行標(biāo)記,不能作為順序行號,其中一個原因是rowid實在行數(shù)據(jù)插入時確定的,如果中間出現(xiàn)刪除,那么該行后面的行的rowid不能改變,如下:

SQL> create table bb(id int);表已創(chuàng)建。SQL> insert into bb values(1);已創(chuàng)建 1 行。SQL> insert into bb values(2);已創(chuàng)建 1 行。SQL> insert into bb values(3);已創(chuàng)建 1 行。SQL> insert into bb values(4);已創(chuàng)建 1 行。SQL> select rowid,id from bb;ROWID ID ------------------ ---------- AAANe0AAGAAAHEoAAA 1 AAANe0AAGAAAHEoAAB 2 AAANe0AAGAAAHEoAAC 3 AAANe0AAGAAAHEoAAD 4SQL> delete from bb where id=32 ;已刪除 1 行。SQL> select rowid,id from bb;ROWID ID ------------------ ---------- AAANe0AAGAAAHEoAAA 1 AAANe0AAGAAAHEoAAB 2 AAANe0AAGAAAHEoAAD 4SQL>


ROWID類型轉(zhuǎn)換成十進制數(shù)字類型:

http://www.oracleonlinux.cn/2011/11/whats-oracle-rowid/


2.ROWNUM

rownum是查詢結(jié)果集的行編號,但是結(jié)果集中必須包含rownum=1的情況,否則查詢不到結(jié)果。

通過rownum偽列可以查詢查詢行號在某一區(qū)間的行數(shù)據(jù),比如:查詢出表tab1的【51,100】的行的數(shù)據(jù):

方法一,通過結(jié)果集的minus操作:

select xx from tab1 where rownum<=100 minus select xx from tab1 where rownum<=50;

但是clob類型不支持minus,所以包含clob類型字段的表不能使用基于rownum結(jié)果集的minus操作。

方法二,通過重新查詢子查詢的結(jié)果集:

該方法的特點是必須知道表的所有列名字,否則會結(jié)果只能是多出一列rownum來。

SELECT t.* FROM (SELECT f.*, rownum num FROM tab1 f) t where num >= 51 and num <= 100;

參考:http://blog.csdn.net/wushanyun1989/article/details/10353229


3.用rowid分塊實現(xiàn)非分區(qū)表的并行update與delete

http://www.oracledatabase12g.com/archives/%E5%88%A9%E7%94%A8rowid%E5%88%86%E5%9D%97%E5%AE%9E%E7%8E%B0%E9%9D%9E%E5%88%86%E5%8C%BA%E8%A1%A8%E7%9A%84%E5%B9%B6%E8%A1%8Cupdate%E4%B8%8Edelete.html

轉(zhuǎn)載于:https://my.oschina.net/liuyuanyuangogo/blog/318648

總結(jié)

以上是生活随笔為你收集整理的Oracle伪列ROWID和ROWNUM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。