Oracle PL/SQL Tips : How to use replace() function
Oracle PL/SQL Tips : How to use replace() function
พบกันอีกเช่นเคย วันนี้มีฟังก์ชันเล็กๆมาฝาก คิดว่าน่าจะเป็นประโยชน์ครับ เพราะเป็นฟังก์ชันที่ใช้จัดการเกี่ยวกับ String,
การเปลี่ยนแปลงข้อความ ฟังก์ชันที่ว่านี้คือ “replace()” function ครับ
มีรูปแบบการใช้งานดังนี้
Syntax:
replace(original_string, string_want_to_replace, [replacement_string]);
- original_string? คือ ข้อความต้นฉบับที่ต้องการเข้ากระบวนการเปลี่ยนแปลง
- string_want_to_replace คือ ข้อความภายใน original string ที่ต้องการถูกแทนที่
- replacement_string คือ ข้อความใหม่ที่จะมาแทนที่ข้อความ string_want_to_replace ซึ่งสามารถที่จะไม่ระบุก็ได้ ถ้าไม่ระบุก็จะเป็นการตัดข้อความที่จะแทนที่ออก
ตัวอย่าง
- select? replace(‘AAABCAA’,’A’) from dual ;????????????????result = ‘BC’
- select? replace(‘AAABCAA’,’A’,’1′) from dual;??????????? result =’111BC11′
- select? replace(‘AAABCAA’,’AA’,’2′) from dual;????????result = ‘2ABC2’
- ต้องการเปลี่ยน A=1, B=2, C=3
select replace(replace(replace(‘AAABCAA’,’A’,’1′),’B’,’2′),’C’,’3′) from dual; result = ‘1112311’
จากตัวอย่างคงทำให้เราเห็นภาพการใช้ฟังก์ชัน replace() กันบ้างแล้วนะครับ คราวนี้เรามาประยุกต์ใช้กันอีกนิดหน่อย พอดีผมมีตัวอย่างการใช้ replace() เพื่อต้องการ rename ตารางหลายๆตาราง ไม่อยากมาทำมือที่ละตาราง ก็จะใช้ select statment สร้างสคริปต์ในการ rename ตารางดังนี้
ตัวอย่าง????????สมมติมีตารางอยู่ทั้งหมด 200 ตาราง โดยตารางมีรูปแบบของชื่อดังนี้??? T_52_MASTER_<distinct name>_QA? ต้องการ rename ให้เป็นรูปแบบใหม่ดังนี้ MT52_<distinct_name>?ดังตัวอย่าง?
??SQL>??rename? T_52_MASTER_A1_QA??to? MT52_A1 ;
ถ้าเราเรียกใช้คำสั่ง rename เองจะต้องเรียกคำสั่งทั้งหมด 200 ครั้ง คงต้องใช้เวลากันนานน่าดูเพื่อเป็นการประหยัด ผมก็จะใช้ Select Statement สร้างสคริปต์การ rename 200 ตารางดังนี้
SQL> select ‘rename ‘||object_name||’ to ‘||replace(replace(object_name,’T_52_MASTER’,’MT52′),’_QA’)||’;’ from user_objects where object_name like ‘T_52_MASTER%’ and object_type=’TABLE’;
เมื่อรัน Statement นี้จะได้ผลลัพธ์คือ
rename? T_52_MASTER_A1_QA??to? MT52_A1 ;
rename T_52_MASTER_B14_QA to MT52_B14 ;
rename T_52_MASTER_C13_QA to MT52_C13 ;
rename T_52_MASTER_D12_QA to MT52_D12 ;
…
จากนั้นก็ copy ผลลัพธ์มารันอีกครั้ง เป็นอันเสร็จเรียบร้อยครับ ง่ายใช่มั้ยละ ลองทดสอบดูนะครับ