Secara default, ORA_ROWSCN
disimpan di tingkat blok, bukan di tingkat baris. Itu hanya disimpan di tingkat baris jika tabel awalnya dibuat dengan ROWDEPENDENCIES
diaktifkan. Dengan asumsi bahwa Anda dapat memuat banyak baris tabel Anda dalam satu blok dan Anda tidak menggunakan APPEND
petunjuk untuk memasukkan data baru di atas tanda air tinggi yang ada dari tabel, Anda mungkin memasukkan data baru ke dalam blok yang sudah memiliki beberapa data yang ada di dalamnya. Secara default, itu akan mengubah ORA_ROWSCN
dari setiap baris dalam blok yang menyebabkan kueri Anda menghitung lebih banyak baris daripada yang sebenarnya dimasukkan.
Sejak ORA_ROWSCN
hanya dijamin menjadi batas atas saat terakhir kali ada DML pada satu baris, akan jauh lebih umum untuk menentukan berapa banyak baris yang dimasukkan hari ini dengan menambahkan CREATE_DATE
kolom ke tabel yang defaultnya adalah SYSDATE
atau mengandalkan SQL%ROWCOUNT
setelah INSERT
berlari (dengan asumsi, tentu saja, bahwa Anda menggunakan satu INSERT
pernyataan untuk menyisipkan semua baris).
Umumnya, menggunakan ORA_ROWSCN
dan SCN_TO_TIMESTAMP
function akan menjadi cara yang bermasalah untuk mengidentifikasi kapan sebuah baris dimasukkan meskipun tabel dibuat dengan ROWDEPENDENCIES
. ORA_ROWSCN
mengembalikan Oracle SCN yang merupakan Nomor Perubahan Sistem. Ini adalah pengidentifikasi unik untuk perubahan tertentu (yaitu transaksi). Dengan demikian, tidak ada hubungan langsung antara SCN dan waktu-- database saya mungkin menghasilkan SCN jutaan kali lebih cepat daripada milik Anda dan SCN 1 saya mungkin bertahun-tahun berbeda dari SCN 1 Anda. Proses latar belakang Oracle SMON
memelihara tabel yang memetakan nilai SCN ke perkiraan stempel waktu tetapi hanya mempertahankan data itu untuk jangka waktu terbatas-- jika tidak, database Anda akan berakhir dengan tabel baris multi-miliar yang hanya menyimpan SCN ke pemetaan stempel waktu. Jika baris disisipkan lebih dari, katakanlah, seminggu yang lalu (dan batas pastinya bergantung pada database dan versi database), SCN_TO_TIMESTAMP
tidak akan dapat mengonversi SCN menjadi stempel waktu dan akan menampilkan kesalahan.