Oracle แทรก PL/SQL อัปเดต ลบ & เลือกลงใน [ตัวอย่าง]
⚡ สรุปอย่างชาญฉลาด
คำสั่ง SQL ภายใน Oracle PL/SQL จัดการงานประมวลผลข้อมูลทุกอย่าง ช่วยให้สามารถแทรก อัปเดต ลบ และเลือกแถวได้โดยตรง คำสั่ง INSERT, UPDATE, DELETE และ SELECT INTO ใช้สำหรับย้ายและดึงข้อมูลภายในฐานข้อมูล
ธุรกรรม DML ใน PL/SQL
DML ย่อมาจาก Data Manipulation Language ซึ่งเป็นกลุ่มของภาษาสำหรับจัดการข้อมูล (Data Manipulation Language) SQL คำสั่งที่เปลี่ยนแปลงข้อมูลที่จัดเก็บไว้ในตาราง ภายใน บล็อก PL/SQLคำสั่งเหล่านี้ทำหน้าที่ประมวลผลข้อมูล ในขณะที่ PL/SQL จัดเตรียมตรรกะโดยรอบ ส่วน DML จัดการกับการดำเนินการดังต่อไปนี้
- การแทรกข้อมูล
- อัปเดตข้อมูล
- การลบข้อมูล
- การเลือกข้อมูล
ใน PL/SQL การจัดการข้อมูลจะทำได้ผ่านคำสั่ง SQL เท่านั้น
การแทรกข้อมูล
ใน PL/SQL การเพิ่มแถวลงในตารางจะใช้คำสั่ง SQL INSERT INTO คำสั่งนี้รับชื่อตาราง คอลัมน์เป้าหมาย และค่าของคอลัมน์เป็นอินพุต จากนั้นจะแทรกค่าลงในตารางหลัก
คำสั่ง INSERT ยังสามารถดึงค่าจากตารางอื่นโดยตรงโดยใช้คำสั่ง SELECT แทนการระบุค่าสำหรับแต่ละคอลัมน์ได้ โดยใช้คำสั่ง SELECT สามารถแทรกข้อมูลได้มากเท่ากับจำนวนแถวที่มีอยู่ในตารางต้นทางในครั้งเดียว
ไวยากรณ์:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) VALUES(<value1>,<value2>,...,<value_n>); END;
ไวยากรณ์ข้างต้นแสดงคำสั่ง INSERT INTO ชื่อตารางและค่าเป็นฟิลด์ที่จำเป็น ในขณะที่ชื่อคอลัมน์เป็นตัวเลือกเมื่อคำสั่ง INSERT ระบุค่าสำหรับทุกคอลัมน์ของตาราง คำว่า VALUES เป็นคำที่จำเป็นเมื่อระบุค่าแยกต่างหาก ดังที่แสดงไว้ข้างต้น
ไวยากรณ์:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>; END;
รูปแบบที่สองของคำสั่ง INSERT INTO นี้จะดึงค่าโดยตรงจาก โดยใช้คำสั่ง SELECT คำว่า VALUES ต้องไม่ปรากฏที่นี่ เนื่องจากค่าต่างๆ ไม่ได้ถูกระบุแยกต่างหาก
อัปเดตข้อมูล
การอัปเดตข้อมูลหมายถึงการเปลี่ยนแปลงค่าของคอลัมน์ในแถวที่มีอยู่แล้ว ทำได้โดยใช้คำสั่ง UPDATE ซึ่งรับชื่อตาราง ชื่อคอลัมน์ และค่าใหม่เป็นอินพุต และทำการอัปเดตข้อมูล
ไวยากรณ์:
BEGIN UPDATE <table_name> SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be updated>; END;
ไวยากรณ์ข้างต้นแสดงคำสั่ง UPDATE คำหลัก SET สั่งให้เอนจิน PL/SQL อัปเดตคอลัมน์ด้วยค่าที่กำหนด ส่วนเงื่อนไข WHERE นั้นเป็นตัวเลือก หากไม่ได้ระบุไว้ ค่าของคอลัมน์ที่กล่าวถึงจะถูกอัปเดตในตารางทั้งหมด
การลบข้อมูล
การลบข้อมูลหมายถึงการลบข้อมูลทั้งหมดหนึ่งรายการออกจากตารางฐานข้อมูล โดยใช้คำสั่ง DELETE ในการดำเนินการนี้
ไวยากรณ์:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be deleted>; END;
ไวยากรณ์ข้างต้นแสดงคำสั่ง DELETE คำว่า FROM เป็นตัวเลือก และไม่ว่าจะมีหรือไม่มีส่วน FROM คำสั่งก็จะทำงานเหมือนกัน ส่วน WHERE ก็เป็นตัวเลือกเช่นกัน หากไม่ได้ระบุไว้ ระบบจะล้างข้อมูลในตารางทั้งหมด
การเลือกข้อมูล
การดึงข้อมูลหรือการเรียกค้นข้อมูล หมายถึงการดึงข้อมูลที่ต้องการจากตารางในฐานข้อมูล ซึ่งทำได้โดยใช้คำสั่ง SELECT ร่วมกับส่วนคำสั่ง INTO คำสั่ง SELECT จะดึงค่าจากฐานข้อมูล และส่วนคำสั่ง INTO จะกำหนดค่าเหล่านั้นให้กับตัวแปรภายในบล็อก PL/SQL
ควรพิจารณาประเด็นต่อไปนี้เมื่อใช้คำสั่ง SELECT ร่วมกับ INTO:
- คำสั่ง SELECT ควรส่งคืนข้อมูลเพียงหนึ่งรายการเมื่อใช้ส่วน INTO เนื่องจากตัวแปรหนึ่งตัวสามารถเก็บค่าได้เพียงค่าเดียว หากคำสั่ง SELECT ส่งคืนมากกว่าหนึ่งแถว ข้อผิดพลาด TOO_MANY_ROWS ถูกยกขึ้น
- คำสั่ง SELECT จะกำหนดค่าให้กับตัวแปรในส่วน INTO ดังนั้นจึงจำเป็นต้องมีอย่างน้อยหนึ่งระเบียนเพื่อเติมค่าลงไป หากไม่พบระเบียนใด ๆ จะเกิดข้อผิดพลาด NO_DATA_FOUND ขึ้น
- จำนวนคอลัมน์และชนิดข้อมูลในส่วน SELECT ควรตรงกับจำนวนตัวแปรและชนิดข้อมูลในส่วน INTO
- ค่าต่างๆ จะถูกดึงออกมาและเติมในลำดับเดียวกับที่กล่าวไว้ในคำสั่ง
- เงื่อนไข WHERE เป็นส่วนเสริมที่ไม่จำเป็น และช่วยให้คุณกำหนดข้อจำกัดเพิ่มเติมสำหรับข้อมูลที่ดึงมาได้
- คำสั่ง SELECT สามารถใช้ในเงื่อนไข WHERE ของคำสั่ง DML อื่นๆ เพื่อกำหนดค่าของเงื่อนไขได้
- คำสั่ง SELECT ที่ใช้ภายในคำสั่ง INSERT, UPDATE หรือ DELETE ไม่ควรมีส่วน INTO เนื่องจากในกรณีเหล่านั้นจะไม่ทำการกำหนดค่าให้กับตัวแปรใดๆ
ไวยากรณ์:
BEGIN SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
ไวยากรณ์ข้างต้นแสดงคำสั่ง SELECT-INTO คำว่า FROM เป็นคำที่จำเป็นและระบุตารางที่ต้องการดึงข้อมูล ส่วนคำสั่ง WHERE เป็นตัวเลือก หากไม่ได้ระบุ ข้อมูลจากทั้งตารางจะถูกดึงมา
1 ตัวอย่าง: ในตัวอย่างนี้ เราจะมาดูวิธีการดำเนินการ DML ใน PL/SQL กัน เราจะแทรกข้อมูลสี่รายการด้านล่างลงในตาราง emp
| อีเอ็มพี_NAME | EMP_NO | เงินเดือน | MANAGER |
|---|---|---|---|
| BBB | 1000 | 25000 | AAA |
| XXX | 1001 | 10000 | BBB |
| YYY | 1002 | 10000 | BBB |
| ZZZ | 1003 | 7500 | BBB |
จากนั้นเราจะอัปเดตเงินเดือนของ 'XXX' เป็น 15000 ลบข้อมูลพนักงาน 'ZZZ' และสุดท้ายแสดงรายละเอียดของพนักงาน 'XXX'
ภาพหน้าจอด้านล่างแสดงบล็อก PL/SQL ฉบับสมบูรณ์ที่ใช้ในตัวอย่างนี้
DECLARE l_emp_name VARCHAR2(250); l_emp_no NUMBER; l_salary NUMBER; l_manager VARCHAR2(250); BEGIN INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('BBB',1000,25000,'AAA'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('XXX',1001,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('YYY',1002,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('ZZZ',1003,7500,'BBB'); COMMIT; Dbms_output.put_line('Values Inserted'); UPDATE EMP SET salary=15000 WHERE emp_name='XXX'; COMMIT; Dbms_output.put_line('Values Updated'); DELETE emp WHERE emp_name='ZZZ'; COMMIT; Dbms_output.put_line('Values Deleted'); SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX'; Dbms_output.put_line('Employee Detail'); Dbms_output.put_line('Employee Name:'||l_emp_name); Dbms_output.put_line('Employee Number:'||l_emp_no); Dbms_output.put_line('Employee Salary:'||l_salary); Dbms_output.put_line('Employee Manager Name:'||l_manager); END; /
Output:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
Code คำอธิบาย:
- Code บรรทัดที่ 2-5: การประกาศตัวแปร
- Code บรรทัดที่ 7-14: แทรกข้อมูลลงในตาราง emp
- Code สาย 15: กำลังยืนยันรายการแทรกข้อมูล
- Code บรรทัดที่ 17-19: ปรับเงินเดือนของพนักงาน 'XXX' เป็น 15000 บาท
- Code สาย 20: กำลังยืนยันธุรกรรมการอัปเดต
- Code สาย 22: กำลังลบข้อมูลของ 'ZZZ'
- Code สาย 23: ยืนยันการลบข้อมูล
- Code สาย 25: เลือกข้อมูลของ 'XXX' และกำหนดค่าให้กับตัวแปร l_emp_name, l_emp_no, l_salary และ l_manager
- Code บรรทัดที่ 26-30: แสดงค่าบันทึกที่ดึงมาได้


