ใช้เวลาเรียบเรียงและพิมพ์ลงในนี้นานมาก
เพราะคิดไป พิมพ์ไป FB ไป ทดสอบ sql ไป
===================================================
มาต่อกันนะครับ ผมก็คิดไปว่าถ้าลองเขียน SQL เพื่อ update ค่าลง sys_value ที่ sys_name="LAST_PCU_UPGRADE_STRUCTURE_VERSION" จะทำอย่างไรดี
ผมก็ลองเขียน SQL แบบนี้ครับ
update sys_var
set sys_value=(select sys_value from sys_var where sys_name like "%current_db%")
where sys_name="LAST_PCU_UPGRADE_STRUCTURE_VERSION"
ปรากฏว่า....เงียบครับ HOSxP ไม่แจ้ง error อะไรออกมาเลย บอกแค่ execute done. ผมก็นึกว่าเสร็จสิครับ
ลองไป select * from sys_var where sys_name like "%version%" ก็ยังไม่ได้ตามที่ต้องการ
sys_value ที่ sys_name="LAST_PCU_UPGRADE_STRUCTURE_VERSION" ยังว่างเปล่าเหมือนเดิม
เอ....ทำยังไงถึงจะรู้ว่ามันไม่ทำงานตามที่เราสั่งด้วยเหตุใด ความรู้เกี่ยวกับ SQL ที่มีอยู่น้อยนิดก็นำมาใช้แล้ว
ผมก็เลยเอาคำสั่งไป run ใน HeidiSQL ซึ่งเป็น Front-End ของ MySQL ตัวเก่งที่ผมใช้งานอยู่บ่อย ๆ ครับ
ก็เลยได้ error ออกมาแบบนี้ครับ
SQL Error (1093): You can't specify target table 'sys_var' for update in FROM clauseหลังจากนั้นผมก็ลองเขียน SQL ไปเรื่อย ๆ ครับ ซึ่งพบว่าการใช้ SQL แบบ select ธรรมดาไม่สามารถใช้ได้ครับ
ก็เลยคิดว่าคงต้องใช้ตัวแปรมาช่วยเก็บค่า และส่งเข้าไปใน select statement แล้วล่ะครับ
จนสุดท้ายก็ได้ออกมาแบบนี้ครับ
set @v = (select sys_value from sys_var where sys_name like "%current_db%");
set @dot1 = locate(".",@v);
set @dot2 = locate(".",@v,@dot1+1);
set @dot3 = locate(".",@v,@dot2+1);
set @v2 = concat(left(@v,@dot1-1),substr(@v,@dot1+1,@dot2-@dot1-1),lpad(substr(@v,@dot2+1,@dot3-@dot2-1),4,"0"),lpad(substr(@v,@dot3+1),4,"0"));
update sys_var
set sys_value = @v2
where sys_name ="LAST_PCU_UPGRADE_STRUCTURE_VERSION";
ซึ่งไม่สามารถ run ที่สายฟ้าของ HOSxP ได้นะครับ ต้อง run ผ่าน command Line หรือ Front-end นะครับ
ผมจึงทำเป็น batch file ไว้ สำหรับ run หลัง upgrade structure อีกทีครับ
คิดไปคิดมา...เสียเวลาไปตั้งนาน แต่ผมว่าเปิดตารางแล้วใส่ค่าเข้าไปเองน่าจะเร็วกว่าครับ
แต่สิ่งที่ผมว่าผมได้มันมาก็คือ
ประสบการณ์ครับ ได้คิด ได้ประยุกต์ใช้ SQL หลาย ๆ แบบ ได้ฝึกสมอง ....แค่นี้ก็คุ้มค่ากับเวลาที่เสียไปแล้วล่ะครับ