Author: เบญจวรรณ สุขหนู

หาข้อมูลที่ซ้ำซ้อนในตารางด้วย LAG Function

LAG Functionเป็นฟังก์ชันที่ให้เราสามารถเข้าถึงแถวข้อมูลก่อนหน้าของตารางได้โดยที่ไม่ต้องทำการ self-join รูปแบบการใช้งานLAG ( expression [, offset [, default] ] )OVER ( [ query_partition_clause ] order_by_clause ) โดยที่ ตัวอย่าง : การใช้งานฟังก์ชัน LAG Query ข้างต้นเป็นการหาผลการเรียนของภาคการศึกษาก่อนหน้าของรายวิชาที่ลงทะเบียนเรียน โดยที่ ผลลัพธ์จาก Query คราวนี้เรามาประยุกต์ใช้งานฟังก์ชัน LAG กันค่ะ ตัวอย่าง : การประยุกต์ใช้ฟังก์ชัน LAG เพื่อหาข้อมูลที่ซ้ำซ้อนในตารางเรามีตารางข้อมูลชื่อ V3_PLAN_SEC2_1_PLO ซึ่งประกอบด้วยฟิลด์ PLAN_SEC2_1_PLO_ID (🔑)…

กู้คืนข้อมูลที่ถูกลบด้วย Oracle Flashback Query

เคยเจอเหตุการณ์ที่ใช้คำสั่งผิดพลาดหรือเผลอลบข้อมูลไปโดยที่ไม่ได้ตั้งใจ และได้ทำการ commit ไปเรียบร้อยแล้วไม่สามารถ rollback กลับได้มั้ย 😊 สำหรับคำถามข้างต้นคิดว่าคงจะมีบ้างแหละที่จะพลาดกันบ้างใช่มั้ยคะ แต่ไม่เป็นไรค่ะ เรามีวิธีการแก้ปัญหาที่เกิดจากความผิดพลาดที่ไม่ได้ตั้งใจของเรา วันนี้จึงขอนำเสนอวิธีการที่จะกู้คืนข้อมูลได้ด้วยตัวเอง โดยที่ไม่ต้องไปร้องขอให้ DBA กู้คืนข้อมูลให้ด้วย Flashback Query กันค่ะ Flashback Query เป็นฟีเจอร์ที่ช่วยให้เราสามารถเรียกดูข้อมูลย้อนหลัง ณ เวลา TIMESTAMP ที่ต้องการ ได้โดยใช้ AS OF clause การใช้งาน Flashback Query ก็ไม่ยาก ตามไปดูตัวอย่างการใช้งานกันค่ะ ตัวอย่าง Step1 : วันที่ 22 สิงหาคม 2565…

การประยุกต์ใข้  Sequence เพื่อสร้างตัวเลขอัตโนมัติให้กับ Table ใน Oracle Database

ก่อนหน้านี้เคยได้รับความต้องการจากระบบหนึ่งซึ่งเป็นระบบที่รับสมัครนักเรียนเพื่อเข้าศึกษาต่อในมหาวิทยาลัยโดยมีความต้องการข้อหนึ่งว่า “ในส่วนการจัดเก็บข้อมูลเลขที่สมัคร ให้รันข้อมูลเลขที่ผู้สมัครตามโครงการที่เปิดรับในแต่ละปีการศึกษา” เนื่องในการพัฒนาระบบนี้ มีการใช้ Oracle Database ในการจัดการฐานข้อมูลอยู่แล้ว เพื่อน ๆ ที่เคยทำงานกับ Oracle Database ก็จะทราบว่าเราสามารถใช้ Oracle Sequence  เพื่อสร้างตัวเลขอัตโนมัติได้ ดังนั้นเราจึงสามารถที่จะใช้ Oracle Sequence มาประยุกต์ใช้เพื่อที่จะรันเลขที่ผู้สมัครได้ โดยสามารถมั่นใจได้ว่าจะไม่เกิดปัญหาผู้สมัครได้ข้อมูลเลขที่สมัครเดียวกัน กรณีที่ทำการสมัครในโครงการเดียวกันเรียนพร้อม ๆ กันอย่างแน่นอน วิธีการดำเนินการก็ไม่ยุ่งยากแค่สร้าง sequence ตามโครงการและปีที่เปิดรับทั้งหมดไว้ให้ก่อนให้เรียบร้อยและเมื่อนักศึกษามาสมัครก็สามารถเรียกใช้ได้เลย ตามวิธีการข้างต้นก็ไม่น่าจะมีปัญหาอะไร แต่ก็เริ่มมีคำถามในใจ ถ้าโครงการนั้นไม่มีผู้สมัครเลย ถ้าดำเนินการสร้างไว้ก่อนก็เปลืองเปล่า ๆ หรือถ้าลืมสร้างของบางโครงการ ระบบต้องเกิดข้อผิดพลาดแน่นอน จึงเกิดแนวคิดใหม่แทนที่จะสร้างไว้ก่อน เปลี่ยนเป็นสร้าง sequence ตอนที่นักเรียนสมัครในโครงการนั้น ๆ…

ว่าด้วยเรื่องการคำนวณตัวเลขตรวจสอบ (Check Digit)

ได้รับมอบหมายจากทีมในการสร้าง Oracle Function เพื่อคำนวณตัวเลขตรวจสอบ (check digit) ของการชำระเงินค่าสมัครผ่านช่องทางการชำระเงินช่องทางหนึ่ง โดยได้รับ requirement มาดังภาพข้างล่างนี้ จากภาพข้างต้นจะมีข้อมูลสำหรับการนำเข้า 4 ชุดซึ่งประกอบด้วย ชุดที่ 1 : Customer No.1/Ref.1  ชุดที่ 2 : Due Date (DDMMYY : พ.ศ.)   ชุดที่ 3 : Customer No.2/Ref.2 ชุดที่ 4 : จำนวนเงินที่ต้องชำระ พร้อมด้วยขั้นตอนวิธีในการคำนวณตัวเลขตรวจสอบ (check digit) ดังนี้…

การเชื่อมต่อฐานข้อมูล Oracle ผ่าน Access office 365

สำหรับหลาย ๆ ท่านนอกเหนือจากที่ต้องมีหน้าที่ในการพัฒนาโปรแกรมเป็นหลักแล้ว อาจจะต้องมีหน้าที่ในการนำเข้าข้อมูลด้วย ตัวเองก็เช่นกันต้องทำหน้าที่ในการนำเข้าข้อมูลเข้าฐานข้อมูล Oracle อยู่เป็นประจำ จริงๆ มีหลายเครื่องมือในการนำเข้าข้อมูล เช่น SQL Developer , Toad for Oracle เป็นต้น แต่บางครั้งก็ไม่สะดวกเพราะบางข้อมูลต้องผ่านการจัดการก่อนถึงจะสามารถถ่ายโอนได้ ตัวเองก็มีอีกวิธีคือ ถ่ายโอนผ่าน Access office 365 สำหรับบทความในครั้งนี้ ขอนำเสนอวิธีการเชื่อมต่อฐานข้อมูล Oracle ผ่าน Access office 365 เผื่อใครจะใช้เป็นทางเลือกในการจัดการข้อมูลของ Oracle กันค่ะ โดยทำตามขั้นตอนดังต่อไปนี้ STEP 1 ติดตั้ง  Oracle Database 12c Release…

วิธีการแสดงผลวันที่เป็นภาษาที่ต้องการด้วยฟังก์ชัน TO_CHAR

หลาย ๆ คนคงเคยเจอปัญหาว่าฐานข้อมูลของเรากำหนด default การจัดเก็บข้อมูลวันที่ไว้เป็นปี ค.ศ. แต่ระบบที่เราพัฒนาต้องแสดงผลเป็นปี พ.ศ. เราต้องทำอย่างไร วันนี้จึงขอนำเสนอวิธีการแสดงผลวันที่เป็นภาษาที่เราต้องการด้วยฟังก์ชัน TO_CHAR กันค่ะ โดยที่ฟังก์ชัน TO_CHAR ทำหน้าที่ในการแปลงข้อมูลตัวเลขและข้อมูลวันที่เป็นตัวอักษร ซึ่งมีรูปแบบ Syntax ดังนี้ TO_CHAR( input_value, [format_mask], [nls_parameter] ) พารามิเตอร์ของฟังก์ชัน TO_CHAR คือ input_value (จำเป็น): ค่าของวันที่ที่ต้องการจะแปลงค่า format_mask (ทางเลือก): เป็นรูปแบบที่ต้องการให้แสดง หากไม่ได้ระบุไว้จะแสดงตามค่า default ที่กำหนดไว้ nls_parameter (ทางเลือก): เป็น nls language…

วิธีการคำนวณหาอายุด้วย Oracle Datetime Functions

อายุเป็นเพียงตัวเลข มีคนพูดไว้แบบนี้ แล้วถ้าเราอยากจะรู้ล่ะว่าไอ้ตัวเลข จำนวนปี จำนวนเดือน และจำนวนวัน ของอายุเรามันเป็นตัวเลขอะไร ถ้าไม่อะไรมากใช้เครื่องคิดเลข หรือนับเอาก็ได้อยู่ แต่ถ้าต้องคำนวณของทุกคนในองค์กรล่ะจะนับเอง หรือเครื่องคิดเลขก็คงไม่ไหวแล้ว ดังนั้นวันนี้จึงจะขอแนะนำ Oracle Datetime Functions ที่สามารถนำมาประยุกต์ใช้ เพื่อคำนวณหาอายุของเรากันค่ะ Oracle Datetime Functions ที่จะแนะนำในวันนี้คือ ฟังก์ชัน TRUNC (date), ADD_MONTHS และฟังก์ชัน MONTHS_BETWEEN โดยมีรายละเอียดของฟังก์ชันดังนี้ ฟังก์ชัน คำอธิบาย ADD_MONTHS เพิ่มจำนวนเดือนลงในวันที่ที่ระบุ MONTHS_BETWEEN หาจำนวนเดือนระหว่าง 2 วันที่ที่ระบุ TRUNC (date) คืนค่าวันที่พร้อมส่วนเวลาของวันที่ตัดให้เป็นหน่วยที่ระบุ ตัวอย่างการใช้งานฟังก์ชัน…

SQL Expression สำหรับหาช่วงเวลาที่ต้องการ

ใครที่เคยสร้าง Materialized View จะทราบว่าต้องมีการกำหนดช่วงเวลาเพื่อให้ Materialized View นั้นทำการ Refresh ข้อมูลเพื่อให้ได้ข้อมูลที่เป็นปัจจุบัน หรือแม้แต่ Job ก็เช่นกันต้องกำหนดช่วงเวลาเพื่อให้ Job ทำงานตามช่วงเวลาที่กำหนด บางคนอาจจะเจอปัญหาว่าไม่รู้ว่าต้องกำหนดอย่างไร เช่น อยากให้ทำงานทุก 8 โมงเช้า หรืออยากให้ทำงานทุกเที่ยงคืน เป็นต้น เพื่อให้ปัญหานั้นหมดไป เรามาทำความเข้าใจเกี่ยวกับช่วงเวลาบน Oracle กันดีกว่า จากที่เราทราบกันว่า 1 วันมี 24 ชั่วโมง 1 ชั่วโมงมี 60 นาที และ 1 นาทีมี 60 วินาที บน…

Transpose rows into columns using the Oracle PIVOT operator

ก่อนหน้านี้เราเคยนำเสนอบทความวิธีการทรานสโพส (หมุน) ข้อมูลจากแถวเป็นคอลัมน์ ด้วยการใช้ฟังก์ชัน SUM และ DECODE กันมาแล้ววันนี้ลองมาใช้อีกวิธีในการแสดงผลดังกล่าวด้วย PIVOT ก่อนอื่นมาดูในส่วน syntax ของ PIVOT กันก่อน   PIVOT Syntax SELECT * FROM ( SELECT column1, column2 FROM tables WHERE conditions ) PIVOT ( aggregate_function(column2) FOR column2 IN ( expr1, expr2, … expr_n) | subquery…