[DB2] เรียง ID ของแถวตามเงื่อนไขด้วย Function ROW_NUMBER()

IBM DB2

จริงๆช่วงนี้มีอะไรให้เขียน Blog ได้หลายตอนครับ แต่เวลา และปริมาณงานนี่สิไม่เคยพอ เข้าเรื่องเลยดีกว่า ตอนนี้ผมมีหน้าจอนึง ซึ่งแต่ละแถวใน Grid จะมี Column ซ่อนไว้ ชื่อ “SEQNO” เอาไว้เป็น Key คู่กับ Column “COMPANYID” เพื่อเอาไปใช้อ้างอิงในหน้าจออื่นๆที่เรียกใช้งาน ตอนแรกดูเหมือนว่า IDEA นี้น่าจะดี แต่มันมีสิ่งที่ผิดพลาดเรื่องนึงครับ คือ Column “SEQNO” แทนที่มันจะ Auto Increment มันดันเอา Mx + 1 ครับ มันเลยเกิดปัญหาที่ว่า ถ้า User มีข้อมูลใน Grid 4 แถว Column “SEQNO” เรียง 1 ถึง 4 ตามลำดับ จากนั้นลบข้อมูลในแถวที่ 4 หละ แล้วเพิ่มข้อมูลใหม่ แถวใหม่ควรจะได้  “SEQNO” เป็น 5 แต่ระบบเดิมดันกำหนด “SEQNO” เป็น 4 มาให้แทนทำให้หน้าจออื่นที่เคยมีการอ้างอิงเอารายการที่ 4 ไปใช้ แสดงผลผิดครับ หลังจากทราบที่มาของปัญหาแล้ว ผมเข้ามาจัดการเก็บกวาดงานของคนเก่าปรับ Code เรียบร้อยและ แต่ปัญหา คือว่า ข้อมูลเหล่านี้ลุกนำขึ้นเตรียมสำหรับ UAT และ Migrate ต่อไปครับ ซวยละที่นี้ ผมต้องปรับข้อมูลเหล่านี้ให้ถูกต้องก่อนระบบขึ้น Production ครับ โดยคำสั่งที่ผมเอามาใช้ในการจัดการข้อมูลเหล่านี้ คือ ROW_NUMBER() มีหน้าที่ในการ Generate ตัวเลขขึ้นมา โดยสามารถกำหนดเงื่อนไขได้จากคำสั่ง OVER โดยมีรายละเอียด ดังนี้ อธิบายคร่าวๆไปแล้ว ลองมาดูตัวอย่างกันดีกว่าครับ Reference

ความเข้าใจผิดเกี่ยวกับ Open Source

ที่มาจาก http://opensource.com/sites/default/files/styles/image-full-size/public/images/law/OSCD_MPL2_520x292_FINAL.png?itok=2-otV3Z_

หลายคนอาจจะมองว่า Open Source เป็นของฟรี ถูกครับ แต่ยังุถูกไม่หมดครับ เพราะมองง่ายๆ ว่าใช้ฟรี แต่ถ้าเอาไปพัฒนาต่อก็ต้องดูสัญญาตามนี้นะครับ โดยผมขอสรุปเท่าที่ผมรู้บางตัวนะครับ GPL-GNU (General Public License) LGPL (Lesser General Public License) BSD(Berkeley Software Distribution License),MIT(Massachusetts Institute of Technology License) Apache License หมายเหตุ: ถ้าเอา Library ในกลุ่มพวกนี้มาใช้ควรศึกษากฏให้ดีด้วยนะครับ โดยเฉพาะตัว GPL และที่สำคัญควรให้เกียรติกับทีมงานที่พัฒนา Library ที่เราเอามาใช้ด้วยการอ้างอิงไว้ด้วยนะครับ ที่ต่างประเทศพลาดที่นี้ฟ้องกันจนเจ๊งเลยนะครับ References

[DB2] Auto Increment

IBM DB2

ดอง Blog ไว้นาน เนื่องจากถึงโค้งสุดท้ายของ Project Treasury ที่ได้ทำกับทางออมสินแล้ว วันนี้ขอเขียนต่อให้เสร็จเลยและกัน จะได้ไปเก็บตัว DataSet ต่อ สำหรับคนที่ใช้งาน DB2 อาจจะสงสัยว่ามันมี Auto Increment แบบ MySQL หรือป่าวครับ คำตอบมีครับ โดยสามารถกำหนดเพิ่ม ดังนี้ครับ โดยคำสั่งข้างต้น คือ การกำหนดให้ระบบสร้างตัวเลขที่ UNIQUE(IDENTITY) ทุกครั้ง โดยให้เริ่มจาก 1 และเพิ่มขึ้นที่ละ 1 ครับ สำหรับตัวอย่างคำสั่งเต็มที่ใช้งานจริมี ดังนี้ครับ โดยเป็นการกำหนดให้ Column ID เป็นแบบ Auto Increment ครับ สำหรับการ import ข้อมูลด้วย DB2MOVE แนะนำให้เลือก Option ตอน Create Table เป็น GENERATE BY DEFAULT แทน GENERATED ALWAYS เพราะ GENERATE BY DEFAULT สามารถยอมให้เอาข้อมูล import เข้า Table ได้ แต่ต้องไป SET ค่า Auto Increment ใหม่ ด้วยคำสั่ง แต่ถ้าอยากจัดการเองทั้งหมดสามารถใช้ GENERATEDOVERRIDE ได้

[DB2] BAT Script สำหรับ Restore DB

IBM DB2

ช่วงนี้มี UAT และต้องการนำ DB จาก SITE งานมาขึ้นที่ Environment ของบริษัทครับ โดยผมได้เขียนโครง BAT Script ง่ายๆ และก็ให้พี่ที่ทำงานปรับปรุงต่อนิดหน่อย โดยมีสาระสำคัญ ดังนี้

สอบ CU-TEP ครั้งแรก

ทำงานมาสักพักและ เริ่มได้แนวทางของตัวเองแล้วว่าจะไปต่อไปด้าน Software Engineer หรือ Business Software Development ครับ สิ่งที่ทำถัดมา คือ เตรียมตัวสอบอะไรที่จำเป็นก่อนครับ สำหรับผม คือ การสอบ CU-TEP เพราะมันต้องใช้ยื่นสอบปริญญาโท ม. จุฬา หรือ จะไปเทียบเข้ามหาวิทยาลัยอื่นก็ได้ครับ ช่วงแรก สมัครสอบ ช่วงที่สอง เตรียมตัวสอบ ช่วงที่สาม สอบครับ ช่วงสุดท้ายประกาศผลสอบครับ

[DB2] SQL1035N The operation failed because the specified database cannot be connected to in the mode requested. SQLSTATE=57019

IBM DB2

ช่วงนี้ต้องเอา DB จาก Site มาทดสอบที่บริษัททุกวันครับ ผมเลยทำ Bat ไว้ และก็ตั้ง Schedule ไว้ครับ โดยมีคำสั่งในส่วนของการ DROP & CREATE DATABASE ใหม่ ดังนี้ครับ เมื่อ Schedule Run ผลปรากฏว่าที่คำสั่ง DROP DATABASE มี Message แจ้งเตือน ดังนี้ครับ SQL1035N  The operation failed because the specified database cannot be  connected to in the mode requested.  SQLSTATE=57019 สาเหตุ การแก้ไข

[REVIEW] Lenovo P90 หลังใช้งานจริงมา 2 สัปดาห์

2016-06-09 : มี Minor Update P90_S149_160504_ROW มาแล้วครับ ลองดูความเห็นส่วนตัวของผมได้ที่นี่ครับ 2016-02-01 : UPDATE นะครับ มือถือรุ่นนี้ โดยลอยแพเรื่องการ Update Android 5.0 (Lollipop) เรียบร้อยแล้วนะครับ โดยผมได้ไปสอบถามทาง FanPage Lenovo แต่ได้รับการบ่ายเบียง ถึงสาเหตุ ที่ไม่ได้ Update Software ครับ พอลองใช้งานนานๆสัก 2-3 เดือน เครื่องอืดมากครับ ใครที่คิดจะซื้อคิดดีๆก่อนนะครับ สำหรับ Update Lenovo รุ่นอื่นๆ สามารถติดตามได้จาก ที่นี่ ครับ  จริงๆผมไม่ได้อยากจะเปลี่ยนมือถือใหม่หรอกครับ แต่บังเอิญว่าเจ้า Lenovo P780 มันดันแยกร่าง 555 แยกในช่วงวันงาน Thailand Mobile Expo พอดี เลยได้ฤกษ์ในการเสียตังค์ครับ (จริงถ้าเครื่องนี้ไม่บึ้ม ผมมีแพลนที่จะเปลี่ยนช่วงเดือนกันยาอยู่แล้วครับ 2 ปี ุุ6 เดือน พอดีครับ) สำหรับ Spec ของเจ้า Lenovo P90 คร่าวๆครับ CPU Intel Atom Z3560 (Quad-core 1.83 GHz) GPU PowerVR G6430 RAM 2GB ROM 32 GB (ไม่สามารถใส่ SD Card เพิ่มได้ครับ หน้าจอ IPS 5.5 นิ้ว 1920 x 1080 pixel (รองรับ Multitouch ได้สูงสุด 5 นิ้วครับ ใส่ SIM ได้ 1 SIM แบบ Micro-SIM รองรับทุกค่ายมือถือในไทยรวมถึง 4G LTE…

[DB2] User Define Function – SQL Scalar Example

IBM DB2

พอดีมีรุ่นน้องให้สอนการเขียน Function บน DB2 ครับ โดย Function ที่ผมเขียนเป็นแบบ SQL Scalar Function โดยเจ้า SQL Scalar Function เป็น Function ที่คืนค่าผลลัพธ์ มีการคืนผลลัพธ์ออกมาค่าเดียวเสมอ โดยมีรูปแบบข้อมูล เช่น datetime, int, varchar เป็นต้นครับ ตัวอย่าง Scalar Function ที่มีในระบบพวก ABS() ที่ส่งตัวเลข เข้าไป คืนผลลัพธ์ที่ตัวเครื่องหมายแล้ว ออกมาค่าเดียวครับ เช่น ABS(-5) = 5 สำหรับ Function นี้ ผมขอเอาตัวอย่างจริงเลยและกัน(ขี้เกียจคิดครับ ฮ่าๆ) โดย Function นี้มีหน้าที่แปลงรอบการจ่าย COUPON FREQUENCY(รอบการจ่ายดอกเบี้ย) ของ BOND ออกมาเป็น TENOR CODE(ช่วงเวลาครับ เช่น 1 เดือน / 2 เดือน เป็นต้นครับ) เพราะในระบบเดิมมันเก็บ COUPON FREQUENCY ใน Table FIXEDINCOME ดังนี้ครับ  ID ในระบบ  ความหมาย 1 Monthly 2 Two Month 3 Quarterly 4 TRI-ANNUALLY 5 SEMI-ANNUALLY 6 ANNUALLY 7 AT CALL ซึ่งมันไม่สื่อถึงเวลาครับ โดยเจ้าข้อมูลที่สื่อถึงเวลามันอยู่ใน Table TENOR ดังนี้ครับ โดยมี Field ที่จำเป็น ดังนี้ Field Name ความหมาย TENOR ID ID ของ…

[JAVA] Eclipse exit code 13

บางครั้งวลาเราไปอบรมข้างนอก ลงเครื่องใหม่ หรืออ่า่นๆก็แล้วที่ ที่จำเป็นต้องลง Java ตามที่มีคนให้มา หรือ download มาลงเองแหละ แล้วพอไปจะไปเปิดมัน ดันเจอ Message แบบนี้เข้า สำหรับเจ้า Error มีสาเหตุ และวิธีการแก้ไข ดังนี้ครับ สาเหตุ: เกิดจากตัว Eclipse ไม่พบ Java ที่เรา Required ครับ การแก้ไข: มีวิธีการแก้ที่เป็นไปได้ ดังนี้ครับ  

Right Software | Software Right

ภาพจาก https://commons.wikimedia.org/wiki/File:John_Lavery_-_IWM_War_Room.jpg

เขียน Code มา 2 ปี บางทีเราสงสัยว่า เรากำลังทำอะไร ทำให้เสร็จส่งลูกค้าพอหรือป่าว ทำไปปุ๊บหมดโปรเจคออกก็ทิ้งหนี้(พวก Spaghetti Code และอื่นๆบราๆ) ให้คนรุ่นหลัง วันนี้ผมอยากเสนอ keyword ในการพัฒนา Software 2 คำ ซึ่งมันต้องไปด้วยกันนะครับ ไม่ใช่เลือกอย่างใด อย่างหนึ่ง ดังนี้ Right Software (Validation) Right Software (Validation) คือ เราทำ Software ได้ ตรงสิ่งที่คุณลูกค้าต้องการ Software Right (Verification) Software Right (Verification) คือ เราทำ Software ที่มีพื้นฐานดี โดยเค้าพื้นฐานดี เราอาจจะมองว่าระบบของเรา สำหรับคนที่เกี่ยวข้องทุกคนนะครับ อย่ามองว่าทุกเรื่องมันเกี่ยวกับ Developer หรือ Programmer อย่างเดียวครับ เพราะบางครั้งมันอาจจะผิดจากลูกค้าที่ยังไม่สามารถบอกความต้องการได้ หรือทีม BA/SA ที่คิดกันไปเองครับ เพิ่มเติมนะครับตอนแรก นึกอยู่ตั้งนานว่า 2 คำนี้มันเกี่ยวกับอะไร  พอลองหาข้อมูลพบว่าเกี่ยวข้องกับ Verification & Validation ครับ