Oracle 用拼接字串更新表 測試
先看我們的資料:
SQL> select count(1) from dave where cust_tel like '0551%';
COUNT(1)
----------
2723
在我們的Dave表裡,cust_tel 電話以0551 開頭的有2723條記錄,現在我們把這些記錄換成0556.
我們使用如下方法測試一下:
- SQL> select * from v$version;
- BANNER
- ----------------------------------------------------------------------
- Oracle Database 11g Enterprise EditionRelease 11.2.0.1.0 - Production
- PL/SQL Release 11.2.0.1.0 - Production
- CORE 11.2.0.1.0 Production
- TNS for 32-bit Windows: Version 11.2.0.1.0- Production
- NLSRTL Version 11.2.0.1.0 – Production
- SQL> UPDATE dave SET cust_tel = '0556'|| SUBSTR (cust_tel, 5) WHERE cust_tellike '0551%';
- 2723 rows updated.
- SQL> rollback;
- Rollback complete.
- SQL> UPDATE dave SET cust_tel = '0556'|| SUBSTR (cust_tel, 5) WHERE cust_telin (select cust_tel from dave where cust_tel like '0551%');
- 2723 rows updated.
- SQL> rollback;
- Rollback complete.
寫法很多,關鍵要注意效率問題,尤其是要更新的資料量比較大時。
另測試發現Oracle10g 和11g 在語法支援上的一些區別:
在Oracle 10g上可以使用如下語法:
- BEGIN
- FOR cl IN (SELECT object_name from d1 WHEREobject_type='TABLE')
- LOOP
- UPDATE d1
- SET object_name = 'D' || SUBSTR (object_name, 2)
- WHERE object_name = cl.object_name;
- END LOOP;
- END;
但如果在Oracle 11g中使用如下語法:
- BEGIN
- FOR cl IN (SELECT id from dave WHERE cust_tel LIKE '0551%')
- LOOP
- UPDATE dave
- SET cust_tel = '0556' || SUBSTR (cust_tel, 5)
- WHERE id = cl.id;
- END LOOP;
- END;
則會一致處於等待狀態。
但是在Oracle 11g中,可以使用如下的遊標來處理,這種方法也是我們之前的提高的根據rowid 來完成大量的Update操作:
- DECLARE
- CURSOR cur IS
- SELECT rowid as ROW_ID from dave WHEREcust_tel LIKE '0551%' ORDER BY ROWID; ---如果表的資料量不是很大,可以不用 order by rowid
- V_COUNTER NUMBER;
- BEGIN
- V_COUNTER := 0;
- FOR row IN cur LOOP
- UPDATE dave
- SET cust_tel = '0556' || SUBSTR (cust_tel, 5)
- WHERE ROWID = row.ROW_ID;
- V_COUNTER := V_COUNTER + 1;
- IF (V_COUNTER>= 1000) THEN
- COMMIT;
- V_COUNTER := 0;
- END IF;
- END LOOP;
- COMMIT;
- END;
有關這種方法的具體說明參考:
http://blog.csdn.net/tianlesoftware/article/details/6576156
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15880878/viewspace-719945/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- javascript字串拼接效率測試JavaScript字串
- 字串拼接應用字串
- JavaScript 字串拼接JavaScript字串
- [golang]字串拼接Golang字串
- js的字串拼接JS字串
- JS字串拼接優化JS字串優化
- C語言 - 字串拼接C語言字串
- Oracle select 語句字串拼接小例項-quote使用Oracle字串
- 【編測編學】零基礎學python_03_字串(拼接+換行+製表符)Python字串
- python怎麼拼接字串Python字串
- 如何更高效的拼接字串?字串
- 字串拼接運算比較字串
- ABAP字串拼接保留空格字串
- Javascript之字串拼接詳解JavaScript字串
- oracle外部表的測試學習 (轉)Oracle
- Oracle可傳輸表空間測試Oracle
- js 遍歷陣列取出字串用逗號拼接JS陣列字串
- oracle plsql之動態sql_輸出拼接的長字串OracleSQL字串
- oracle測試資料庫啟用Oracle資料庫
- oracle分割槽表的分類及測試Oracle
- hive表連線和oracle測試對比HiveOracle
- Java 字串比較、拼接問題Java字串
- Go語言字串高效拼接(三)Go字串
- Go語言字串高效拼接(一)Go字串
- Go語言字串高效拼接(二)Go字串
- 字串拼接格式化輸出字串
- Java字串拼接寫法 joiner.onJava字串
- databinding字串拼接不支援中文字串
- 儲存過程中拼接字串儲存過程字串
- Oracle 級聯表更新和SQLServer 級聯表更新OracleSQLServer
- oracle儲存過程中單引號及字串拼接處理Oracle儲存過程字串
- Swift 4.0 字串擷取,拼接,字串富文字顯示Swift字串
- oracle 並行cpu查詢分割槽表測試Oracle並行
- 走進 JDK 之談談字串拼接JDK字串
- String/StringBuilder字串拼接操作UI字串
- Java程式碼中字串拼接方式分析Java字串
- 字串拼接+和concat的區別字串
- 前端實用工具分享——字串拼接(一)前端字串