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 ซึ่งสามารถที่จะไม่ระบุก็ได้ ถ้าไม่ระบุก็จะเป็นการตัดข้อความที่จะแทนที่ออก

ตัวอย่าง

  1. select? replace(‘AAABCAA’,’A’) from dual ;????????????????result = ‘BC’
  2. select? replace(‘AAABCAA’,’A’,’1′) from dual;??????????? result =’111BC11′
  3. select? replace(‘AAABCAA’,’AA’,’2′) from dual;????????result = ‘2ABC2’
  4. ต้องการเปลี่ยน 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 ผลลัพธ์มารันอีกครั้ง เป็นอันเสร็จเรียบร้อยครับ ง่ายใช่มั้ยละ ลองทดสอบดูนะครับ

You may also like...

Leave a Reply

Your email address will not be published.