Oracle中变异表处理办法
在Oracle数据库中,变异表是当前被DML语句修改的表。而对于数据库上的triggrt(触发器)来说,变异表就是trigger在其上定义的表。需
Oracle变异表
在Oracle数据库中,变异表是当前被DML语句修改的表。
而对于数据库上的triggrt(触发器)来说,变异表就是trigger在其上定义的表。
需要明确的是trigger中SQL语句不能进行如下操作:
1)读或者修改触发语句的任何变异表,包括触发表本身。
2)读或者修改触发表的约束表中的主关键字,唯一关键字和外部关键字。
而除此之外的其他列都可以修改。
如何突破变异表?
方法一是用两个触发器,一个行级的,一个语句级的(速度快,推荐!)
方法二是用dbms_job.run包(但运行的时间过长,2秒左右)
方法三是可以使用AutoCommit方法解决(但破坏了事务的一致性,多数情况下是错误的)。
下面是包 + 行级触发器 + 语句级触发器的实例:
在使用Oracle行级触发器时,如果需要对本表进行DML操作(包括select),,一般都会报错:
ORA-04091: 表 /**TABLENAME**/ 发生了变化,触发器/函数不能读···
一般可以使用“ 包 + 行级触发器 + 语句级触发器 ”组合使用来解决。
// 创建包
CREATE OR REPLACE PACKAGE BRPMS.FXYDATA AS
TYPE T_COL1 IS TABLE OF BRPMS.TB_RISK_FXY.GUID%TYPE INDEX BY BINARY_INTEGER;
V_GUID T_COL1;
V_ROW BINARY_INTEGER := 0;
END;
// 创建行级触发器
CREATE OR REPLACE TRIGGER BRPMS.T_IFFXYMODIFIED
BEFORE UPDATE OF FXFXJDON BRPMS.TB_RISK_FXY
FOR EACH ROW
BEGIN
IF :NEW.JHLX = '1' THEN
IF :NEW.FXFXJD = '已发布' THEN
BRPMS.FXYDATA.V_ROW := BRPMS.FXYDATA.V_ROW + 1;
BRPMS.FXYDATA.V_GUID(BRPMS.FXYDATA.V_ROW) := :NEW.GUID;
END IF;
END IF;
END;
// 创建语句级触发器
CREATE OR REPLACE TRIGGER BRPMS.T_COPY_Y2R
AFTER UPDATE OF FXFXJD ON BRPMS.TB_RISK_FXY
DECLARE
S_YJHID BRPMS.TB_RISK_FXY.GUID%TYPE;
S_RJHID BRPMS.TB_RISK_FXY.GUID%TYPE;
BEGIN
FOR V_LOOP IN 1 .. BRPMS.FXYDATA.V_ROW LOOP
S_YJHID := BRPMS.FXYDATA.V_GUID(V_LOOP);
SELECT (SELECT F.GUID FROM BRPMS.TB_RISK_FXY F WHERE F.TDJH_ID = R.GUID)
INTO S_RJHID
FROM (SELECT * FROM BRPMS.TB_RISK_TDJH WHERE JHLX = 1) Y,
(SELECT * FROM BRPMS.TB_RISK_TDJH WHERE JHLX = 2) R
WHERE Y.YXTJHBH = R.YJHZJ
AND EXISTS
(SELECT FXY.GUID
FROM BRPMS.TB_RISK_FXY FXY
WHERE FXY.TDJH_ID = R.GUID)
AND Y.GUID =
(SELECT F.TDJH_ID FROM BRPMS.TB_RISK_FXY F WHERE F.GUID = S_YJHID)
AND ROWNUM = 1;
IF S_RJHID IS NOT NULL THEN
BRPMS.P_COPY_Y2R_MANUAL(S_YJHID, S_RJHID);
END IF;
END LOOP;
END;

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Keluaran terbaharu Apple bagi sistem iOS18, iPadOS18 dan macOS Sequoia telah menambah ciri penting pada aplikasi Photos, yang direka untuk membantu pengguna memulihkan foto dan video yang hilang atau rosak dengan mudah disebabkan pelbagai sebab. Ciri baharu ini memperkenalkan album yang dipanggil "Dipulihkan" dalam bahagian Alat pada apl Foto yang akan muncul secara automatik apabila pengguna mempunyai gambar atau video pada peranti mereka yang bukan sebahagian daripada pustaka foto mereka. Kemunculan album "Dipulihkan" menyediakan penyelesaian untuk foto dan video yang hilang akibat kerosakan pangkalan data, aplikasi kamera tidak disimpan ke pustaka foto dengan betul, atau aplikasi pihak ketiga yang menguruskan pustaka foto. Pengguna hanya memerlukan beberapa langkah mudah

Cara menggunakan MySQLi untuk mewujudkan sambungan pangkalan data dalam PHP: Sertakan sambungan MySQLi (require_once) Cipta fungsi sambungan (functionconnect_to_db) Fungsi sambungan panggilan ($conn=connect_to_db()) Laksanakan pertanyaan ($result=$conn->query()) Tutup sambungan ( $conn->close())

Untuk mengendalikan ralat sambungan pangkalan data dalam PHP, anda boleh menggunakan langkah berikut: Gunakan mysqli_connect_errno() untuk mendapatkan kod ralat. Gunakan mysqli_connect_error() untuk mendapatkan mesej ralat. Dengan menangkap dan mengelog mesej ralat ini, isu sambungan pangkalan data boleh dikenal pasti dan diselesaikan dengan mudah, memastikan kelancaran aplikasi anda.

Menggunakan fungsi panggil balik pangkalan data di Golang boleh mencapai: melaksanakan kod tersuai selepas operasi pangkalan data yang ditentukan selesai. Tambah tingkah laku tersuai melalui fungsi berasingan tanpa menulis kod tambahan. Fungsi panggil balik tersedia untuk operasi memasukkan, mengemas kini, memadam dan pertanyaan. Anda mesti menggunakan fungsi sql.Exec, sql.QueryRow atau sql.Query untuk menggunakan fungsi panggil balik.

Artikel ini akan memberikan pengenalan terperinci tentang cara memasang dan mendaftarkan aplikasi perdagangan bitcoin. Aplikasi perdagangan Bitcoin membolehkan pengguna mengurus dan berdagang kriptografi seperti Bitcoin. Artikel ini membimbing pengguna melalui proses pemasangan dan pendaftaran langkah demi langkah, termasuk memuat turun aplikasi, membuat akaun, melakukan pengesahan identiti, dan deposit pertama. Matlamat artikel ini adalah untuk menyediakan pemula dengan garis panduan yang jelas dan mudah difahami untuk membantu mereka dengan mudah memasuki dunia perdagangan bitcoin.

Data JSON boleh disimpan ke dalam pangkalan data MySQL dengan menggunakan perpustakaan gjson atau fungsi json.Unmarshal. Pustaka gjson menyediakan kaedah kemudahan untuk menghuraikan medan JSON dan fungsi json.Unmarshal memerlukan penuding jenis sasaran kepada data JSON unmarshal. Kedua-dua kaedah memerlukan penyediaan pernyataan SQL dan melaksanakan operasi sisipan untuk mengekalkan data ke dalam pangkalan data.

Cara mengintegrasikan GoWebSocket dengan pangkalan data: Sediakan sambungan pangkalan data: Gunakan pakej pangkalan data/sql untuk menyambung ke pangkalan data. Simpan mesej WebSocket ke pangkalan data: Gunakan pernyataan INSERT untuk memasukkan mesej ke dalam pangkalan data. Dapatkan semula mesej WebSocket daripada pangkalan data: Gunakan pernyataan SELECT untuk mendapatkan semula mesej daripada pangkalan data.

Untuk mengelakkan ralat sambungan pangkalan data PHP, ikuti amalan terbaik: semak ralat sambungan dan padankan nama pembolehubah dengan bukti kelayakan. Gunakan storan selamat atau pembolehubah persekitaran untuk mengelakkan kelayakan pengekodan keras. Tutup sambungan selepas digunakan untuk mengelakkan suntikan SQL dan gunakan pernyataan yang disediakan atau parameter terikat.
