Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan alasan mengapa Asisten Migrasi SQL Server (SSMA) untuk Oracle menambahkan ROWID
kolom ke tabel, jika ada pemicu.
Latar belakang
Di Oracle, Anda dapat membuat pemicu yang berjalan FOR EACH ROW
, bukan untuk seluruh set baris yang berubah. Di SQL Server, pemicu selalu dijalankan untuk seluruh set baris yang dimodifikasi. Jika pemicu Oracle tingkat baris mengakses variabel - :old
dan :new
khusus, maka SSMA memerlukan cara untuk mencocokkan baris dari kedua set baris untuk mengidentifikasi nilai untuk baris tertentu sebelum dan sesudah pembaruan. Untuk meniru fungsionalitas setiap baris, SSMA menambahkan kolom khusus ROWID
untuk mengidentifikasi setiap baris yang dimodifikasi secara unik dan menggunakannya untuk membangun hubungan antara inserted
set baris dan deleted
.
Contoh
Dalam contoh berikut, pemicu Oracle dijalankan untuk setiap baris yang diperbarui dalam TRIG_TEST
tabel:
CREATE OR REPLACE TRIGGER TSCHM.TRIG_TEST_AU
AFTER UPDATE OF DATA ON TSCHM.TRIG_TEST
FOR EACH ROW
BEGIN
IF (:new.DATA = 'ABC') THEN
INSERT INTO TSCHM.TRIG_TEST(DATA) VALUES ('-' || :old.DATA);
END IF;
END;
Ketika Anda mencoba mengonversi pemicu ini di SSMA, T-SQL berikut diproduksi dalam pemicu SQL Server:
Jalankan kursor di atas
inserted
set baris, memilih danDATA
kolomROWID
ke dalam@new$0
variabel dan@new$DATA
:DECLARE ForEachInsertedRowTriggerCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR SELECT ROWID, DATA FROM inserted OPEN ForEachInsertedRowTriggerCursor FETCH ForEachInsertedRowTriggerCursor INTO @new$0, @new$DATA
Dalam perulangan, pilih baris yang cocok dari
deleted
baris yang diatur ke dalam@old$0
variabel dan@old$DATA
, berdasarkan yang disisipkanROWID
(disimpan dalam@new$0
variabel):SELECT @old$0 = ROWID, @old$DATA = DATA FROM deleted WHERE ROWID = @new$0
Lakukan tindakan pemicu menggunakan
@old$DATA
/@new$DATA
variabel:IF (@new$DATA = 'ABC') INSERT SSMAADMIN.TRIG_TEST(DATA) VALUES (('-' + ISNULL(@old$DATA, '')))
Informasi Tambahan
Perilaku ini dikontrol oleh pengaturan buat proyek kolom ROWID, yang dapat ditemukan di bawah Proyek Alat>Pengaturan> Pembuatan ROWID Konversi>Umum.> Jika pengaturan diatur ke Tidak, tetapi selama konversi pemicu SSMA mengidentifikasi bahwa pengaturan memerlukan ROWID
kolom, maka kesalahan konversi O2SS0239 dihasilkan.
Pesan konversi terkait
- O2SS0239: Kolom ROWID tidak dapat diakses (Kesalahan)
- O2SS0267: kolom ROWID
- O2SS0404: Kolom ROWID tidak dapat dikonversi