จริงๆ บทความนี้ผมดองมานานมาก เพราะเดือนที่แล้ว เดือนกุมภาพันธ์ เดือนแห่งการกุมขมับ เพราะ Project ล่าสุดของออมสินต้องส่ง Software ในส่วนของ Phase1 ภายในเดือนนั้นครับ หลังจากผ่านเข้าสู่ Season 2 เฮ้ยย Phase 2 พอมีเวลาได้หายใจบ้าง เลยจะมาเก็บบทความที่ดองไว้ครับ โดยวันนี้ผมขออธิบายคำสั่งเกี่ยวกับ DB2 คำสั่ง -tvf , -td@ ก่อนครับ เพราะหลายๆคนคงใช้คำสั่งเหล่านี้ โดยหลักการ CPD (Copy and Paster Development ครับ ฮ่าๆ) แต่ไม่รู้ว่ามัน คือ อะไร และคำสั่งที่ลองไป มันมีอะไรที่พิเศษ หรือป่าวนะ
เจ้าคำสั่ง -tvf , -td@ เป็นคำสั่งที่ใช้ใน DB2 CLP (Command Line Processor) มองง่ายๆว่าเป็น DOS ของ DB2 โดยเอาไว้รันคำสั่งเฉพาะ หรือเป็น SQL ก็ได้นะครับ เพื่อจัดการกับฐานข้อมูล โดยคำสั่งขึ้นต้นด้วย db2 ตามด้วยคำสั่งที่ต้องการ โดยมีรูปแบบ ดังนี้
ตัวอย่างคำสั่งง่ายๆ
- รูปแบบ db2-command ตามตัวอย่าง ดังนี้
db2 connect to TSWDB
- รูปแบบ sql-statement ตามตัวอย่าง ดังนี้
db2 select * from syscat.tables where tabschema='INVS' or simply
- สำหรับคำสั่งอื่นๆสามารถไปดูได้จาก Help ครับ
DB2 ?- --Displays a list of all DB2 commands DB2 ?command- --Displays information about a specific command DB2 ?SQLnnnn- --Displays information about a specific SQLCODE DB2 ?DB2nnnn- --Displays information about DB2 error
หลังจากเกริ่นพื้นฐานไปแล้ว มาถึงคิวของคำสั่ง -tvf บ้างนะครับ โดยคำสั่ง -tvf อยู่ในส่วนของ option-flag ครับ Concept ของ option-flag คือ การผสมตัวอักษร ซึ่งแต่ละตัวอักษรมีคุณสมบัติเฉพาะตัวครับ สามารถดูได้จาก Help นะครับ ซึ่งผมได้ Capture มาบางส่วนแล้ว โดยอ้างอิงจาก Version 10.5 นะครับ
จาก Option-Flag -tvf สามารถแปลความหมายได้ ดังนี้ครับ
- f คือ การอ่านข้อมูลจากไฟล์ โดยเป็น textfile หรือ sql ก็ได้ครับ (ต้องวางไว้หลังสุดเสมอ)
- v คือ เมื่อข้อมูลจาก file ให้มีการ echo ออกมาแสดงผลผ่านทางหน้าจอ
- t คือ บอกว่าใช้ ; (Semicolon) เป็นตัวจบคำสั่งการทำงานครับ
สำหรับ -tvf การใช้งานจริงคำสั่งนี้ใช้ เพื่อรัน Script SQL และแสดงผลลัพธ์การ Run หน้าจอ
แล้ว -td@ -f ต่างจากคำสั่งแรกนิดเดียว โดยเป็นการบอกให้ DB2 execute script จนถึงจุด Mark ที่ต้องการ เช่น @ (ใช้ตัวอักษรอะไรก็ได้ แต่ต้องกำหนดใน Script และคำสั่งให้เหมือนกันครับ)
ตัวอย่าง Script นี้ (InsertSystemUser.txt) ถ้าไม่ใช้ -td@ ตัว db2 อ่านไปทีละบรรทัดตามที่มี ; (Semicolon) บอกไว้ เนื่องจากคำสั่งแรกเป็นการประกาศค่าตัวแปร เมื่อ db2 ไปอ่านคำสั่งถัดไปที่เป็นการ Set ค่าตัวแปร ระบบแจ้งว่าหาตัวแปรที่ประกาศไว้ไม่เจอครับ ทางแก้ คือ เราต้องบอกให้ DB2 Execute Script ชุดนั้นทั้งชุดครับ
--Script Name: InsertSystemUser.txt --Create by: CHATRI NGAMBENCHAWONG --Insert System User BEGIN ATOMIC DECLARE CREATETIME TIMESTAMP; SET CREATETIME = CURRENT TIMESTAMP; --INSERT System User (Username: DS_System, Password: DS_System) INSERT INTO USERINVS(USERID,USERNAME, FIRSTNAMEENG, LASTNAMEENG,FULLNAME, USERPOSITION, PASSWORD, PWDLASTCHANGE, ACTIVEFLAG,ACTIONFLAG,CREATEBY,CREATETIME) VALUES (-1, 'DS_System', 'DEBUGGINGSOFT', 'SYSTEM', 'DEBUGGINGSOFT SYSTEM', 'SYSTEM USER', 'DDD60BB3F7E8AF7FBB071E5A79F8694DAE068A568F79AEDE5E09FBCB40D32378', CREATETIME, 'A','N',-1,CREATETIME); --INSERT Group INSERT INTO GROUPINVS(GROUPID, GROUPNAME, ACTIVEFLAG, ACTIONFLAG, CREATEBY, CREATETIME) VALUES(-1,'DS_System', 'A','N', -1, CREATETIME); --Assign user to group INSERT INTO GROUPUSER(GROUPID, GROUPCREATETIME, USERID, USERCREATETIME) VALUES(-1,CREATETIME,-1,CREATETIME); END@
เวลานำไปใช้งานจริงให้เขียน db2 clp ดังนี้ครับ
db2 -td@ -f InsertSystemUser.txt
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.