oracle plsql採用for loop和rollback savepoint實現重複值可繼續插入exception
--建立表並構建唯一索引
SQL> create table t_unique(a int);
Table created
SQL> create unique index idx_t_unique on t_unique(a);
Index created
SQL> insert into t_unique values(1);
1 row inserted
SQL> commit;
Commit complete
--如果再相同值則報錯
SQL> insert into t_unique values(1);
insert into t_unique values(1)
ORA-00001: unique constraint (TBL_BCK.IDX_T_UNIQUE) violated
--讓重複插入可以有5次機會,最終可以插入資料
create or replace procedure proc_same_continue_insert
as
v_a pls_integer:=1;
begin
for i in 1..5 loop
dbms_output.put(i||' insert ');--標記為第幾次插入
begin
savepoint transaction_savepoint1;--真正插入前標記一個儲存點,便於回滾
insert into t_unique values(v_a);
commit;
dbms_output.put_line(i||' insert succeed');--僅起到一個輸出日誌的功能
exit;--插入完記錄後直接退出儲存過程的執行
exception
when dup_val_on_index then --如果重複插入
dbms_output.put_line('insert same key,please retry');--先提示重複插入
v_a:=v_a+1;--累加重複插入的值為一個新值
rollback to transaction_savepoint1;--注:此行語句與上行程式碼v_a:=v_a+1順序先後皆不影響程式碼實現
end;
end loop;
end;
/
Procedure created
SQL> select * from t_unique;
A
---------------------------------------
1
SQL> exec proc_same_continue_insert;
1 insert insert same key,please retry
2 insert 2 insert succeed
PL/SQL procedure successfully completed
SQL> select * from t_unique;
A
---------------------------------------
1
2 --插入一個新記錄
小結:1,適用於高併發的環境,可能會發生多客戶端同時插入記錄,會出現插入相同值的情況,可採用此法
2,實現機制:採用exception異常處理模組,累加出錯列值為另一新值,再用rollback savepoint繼續執行原
insert程式碼實現
3,成功insert後,commit提交,爾後是exit;直接退出即可儲存過程即可
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-762142/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL儲存過程SAVEPOINT ROLLBACK toMySql儲存過程
- 刪除oracle重複值Oracle
- 連續插值,用forall實現。
- oracle plsql_table of_index by binary_integer_for loop_批量賦值OracleSQLIndexOOP賦值
- oracle goldengate實現欄位插入時間值OracleGo
- oracle plsql儲存過程_while loop_end loop_exitOracleSQL儲存過程WhileOOP
- sql重複插入問題SQL
- 如何實現React元件的可複用性React元件
- PLSQL重點問題理解和實戰SQL
- mysql避免插入重複資料MySql
- O’Reilly:調查發現雲端計算採用率繼續上升
- Mysql RC/RR隔離原理和區別 不可重複讀和可重複讀MySql
- plsql之pragma exception_initSQLException
- Event Loop的規範和實現OOP
- plsql插入圖片SQL
- 用JS實現氣泡排序和插入排序JS排序
- mybatis oracle資料庫批次插入資料,忽略主鍵重複MyBatisOracle資料庫
- Web Components 系列(十一)—— 實現 MyCard 的可複用Web
- ORACLE 插入空值測試Oracle
- oracle 重複列只顯示一次的實現Oracle
- 用JavaScript實現插入排序JavaScript排序
- SQL 處理重複值SQL
- 建立Oracle唯一約束,忽略已有的重複值Oracle
- mysql & oracle savepoint 使用方法MySqlOracle
- Oracle 回滾(ROLLBACK)和撤銷(UNDO)Oracle
- 採用spark和openfire實現即時通訊系統Spark
- 使用者許可權 plsql OracleSQLOracle
- MySQL 處理插入過程中的主鍵唯一鍵重複值辦法MySql
- tcbs_批量儲存過程_plsql事務_savepoint_異常儲存過程SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制-savepoint語句SQL
- 婚戀交友原始碼開發,採用連線複用實現效能優化原始碼優化
- 併發請求的重複插入問題
- jsonp 的原理和採用 Promise API 的實現JSONPromiseAPI
- 優雅的實現請求類驗證規則的重複利用(無需繼承,可適用於多個請求類的規則合併)繼承
- 靈活運用分散式鎖解決資料重複插入問題分散式
- Java實現-帶重複元素的子集Java
- iPhone 6s或繼續採用800萬畫素後置攝像頭iPhone
- forall_for loop效能對比測試_plsqlOOPSQL