[DB2] -tvf , -td@ -f คือ อะไร

จริงๆ บทความนี้ผมดองมานานมาก เพราะเดือนที่แล้ว เดือนกุมภาพันธ์ เดือนแห่งการกุมขมับ เพราะ 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 ตามด้วยคำสั่งที่ต้องการ โดยมีรูปแบบ ดังนี้

2015-03-15_161724

ตัวอย่างคำสั่งง่ายๆ

  • รูปแบบ 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 นะครับ

2015-03-15_165642-vert

จาก 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.