Bonjour,
J'aurais voulu savoir si la requète suivant permettait, grace au ROWID, de récuperer les lignes dans l'ordre ou elles ont été inserées.
MerciCode:Select * from ma_table order by rowid
Version imprimable
Bonjour,
J'aurais voulu savoir si la requète suivant permettait, grace au ROWID, de récuperer les lignes dans l'ordre ou elles ont été inserées.
MerciCode:Select * from ma_table order by rowid
Non, le ROWID n'est pas une valeur fiable puisque que des déplacements de ligne peuvent être effectués notamment lors d'un UPDATE :?
Le ROWID c'est une adresse qui permet de retrouver la ligne sur le disque... aucun rapport avec l'ordre donc. Si tu ne l'as pas prévu lors de la modélisation, je crains que tu ne puisses pas régler ta problèmatique :?
Non, il vous faut le prévoir dans votre modèle.
Sinon
a partir de 10G R1 orarowscn
http://oradbarchitect.blogspot.com/2...orarowscn.html
Ou bien voir : http://mbouayoun.developpez.com/scn/#L4
cette colonne n'est-elle pas mise à jour lors d'un update ?
C'est ce que je craignais... ceci étant dit, c'est toujours mieux que ROWID et l'info est plus intéressante en plus :king:
Oui
mais
il y a moyen de ne pas le "changer"
cf
http://oradbarchitect.blogspot.com/2...orarowscn.html
ok j'ai mal lu
on peut juste isoler les changements ....
Je ne pense pas qu'on peut employer ora_rowscn dasn ce cas, d'abord parce que par défaut elle est gèré niveau block
Donc il convient de faireCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production SQL> create table DEPT 2 ( 3 DEPTNO NUMBER(2) not null, 4 DNAME VARCHAR2(14), 5 LOC VARCHAR2(13) 6 ) 7 / Table crÚÚe. SQL> insert into dept values (10, 'Dept1', 'Loc') 2 / 1 ligne crÚÚe. SQL> commit 2 / Validation effectuÚe. SQL> insert into dept values (10, 'Dept2', 'Loc2') 2 / 1 ligne crÚÚe. SQL> commit 2 / Validation effectuÚe. SQL> Select dbms_rowid.rowid_block_number(rowid), ora_rowscn 2 from dept 3 / DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) ORA_ROWSCN ------------------------------------ ---------- 239 737564 239 737564
Et ensuite parce que l'insert est une opération qui peut travailler sur un ensemble des donnéesCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 SQL> drop table Dept 2 / Table supprimÚe. SQL> create table DEPT 2 ( 3 DEPTNO NUMBER(2) not null, 4 DNAME VARCHAR2(14), 5 LOC VARCHAR2(13) 6 ) 7 rowdependencies 8 / Table crÚÚe. SQL> insert into dept values (10, 'Dept1', 'Loc') 2 / 1 ligne crÚÚe. SQL> commit 2 / Validation effectuÚe. SQL> insert into dept values (10, 'Dept2', 'Loc2') 2 / 1 ligne crÚÚe. SQL> commit 2 / Validation effectuÚe. SQL> Select dbms_rowid.rowid_block_number(rowid), ora_rowscn 2 from dept 3 / DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) ORA_ROWSCN ------------------------------------ ---------- 247 737662 247 737664
Très probablement qu'une colonne de type timestamp fera l'affaire.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 SQL> insert into dept 2 select 10 deptno, 'Dept3' dname, 'Loc3' loc from dual 3 union all 4 select 10 deptno, 'Dept4' dname, 'Loc4' loc from dual 5 / 2 ligne(s) crÚÚe(s). SQL> commit; Validation effectuÚe. SQL> Select dbms_rowid.rowid_block_number(rowid), ora_rowscn 2 from dept 3 / DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) ORA_ROWSCN ------------------------------------ ---------- 247 737662 247 737664 247 737897 247 737897