Oracle แทรก PL/SQL อัปเดต ลบ & เลือกลงใน [ตัวอย่าง]
ในบทช่วยสอนนี้ เราจะมาเรียนรู้วิธีใช้งาน SQL ใน PL/SQL SQL เป็นองค์ประกอบจริงที่ดูแลการดึงและอัปเดตข้อมูลในฐานข้อมูลในขณะที่ PL/SQL เป็นองค์ประกอบที่ประมวลผลข้อมูลเหล่านี้ นอกจากนี้ ในบทความนี้ เราจะกล่าวถึงวิธีการรวม SQL ภายในบล็อก PL/SQL
ธุรกรรม DML ใน PL/SQL
ดีเอ็มแอล ย่อมาจาก ภาษาการจัดการข้อมูลคำสั่งเหล่านี้ใช้เป็นหลักในการดำเนินการจัดการ โดยจะเกี่ยวข้องกับการดำเนินการดังต่อไปนี้
- การแทรกข้อมูล
- อัปเดตข้อมูล
- การลบข้อมูล
- การเลือกข้อมูล
ใน PL/SQL เราสามารถจัดการข้อมูลได้โดยใช้คำสั่ง SQL เท่านั้น
การแทรกข้อมูล
ใน PL/SQL เราสามารถแทรกข้อมูลลงในตารางใดก็ได้โดยใช้คำสั่ง SQL INSERT INTO คำสั่งนี้จะใช้ชื่อตาราง คอลัมน์ของตาราง และค่าของคอลัมน์เป็นอินพุต และแทรกค่าลงในตารางฐาน
คำสั่ง INSERT สามารถรับค่าได้โดยตรงจากตารางอื่นโดยใช้คำสั่ง 'SELECT' แทนที่จะให้ค่าสำหรับแต่ละคอลัมน์ ด้วยคำสั่ง 'SELECT' เราสามารถแทรกแถวได้มากเท่าที่มีอยู่ในตารางฐาน
ไวยากรณ์:
BEGIN INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>) VALUES(<valuel><value2>,...:<value_n>); END;
- ไวยากรณ์ข้างต้นแสดงคำสั่ง INSERT INTO ชื่อตารางและค่าเป็นฟิลด์บังคับ ในขณะที่ชื่อคอลัมน์ไม่จำเป็นหากคำสั่งแทรกมีค่าสำหรับคอลัมน์ทั้งหมดของตาราง
- คำหลัก 'VALUES' มีผลบังคับใช้หากมีการระบุค่าแยกกันตามที่แสดงด้านบน
ไวยากรณ์:
BEGIN INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>) SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>; END;
- ไวยากรณ์ข้างต้นแสดงคำสั่ง INSERT INTO ที่รับค่าโดยตรงจาก โดยใช้คำสั่ง SELECT
- ในกรณีนี้ไม่ควรมีคำหลัก 'VALUES' เนื่องจากไม่ได้ระบุค่าแยกกัน
อัปเดตข้อมูล
การอัปเดตข้อมูลหมายถึงการอัปเดตค่าของคอลัมน์ใดๆ ในตาราง ซึ่งสามารถทำได้โดยใช้คำสั่ง 'UPDATE' คำสั่งนี้ใช้ชื่อตาราง ชื่อคอลัมน์ และค่าเป็นอินพุตและอัปเดตข้อมูล
ไวยากรณ์:
BEGIN UPDATE <table_name> SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- ไวยากรณ์ด้านบนแสดง UPDATE คำหลัก 'SET' สั่งให้กลไก PL/SQL อัปเดตค่าของคอลัมน์ด้วยค่าที่กำหนด
- ส่วนคำสั่ง 'WHERE' เป็นทางเลือก หากไม่ได้ระบุส่วนคำสั่งนี้ ค่าของคอลัมน์ที่กล่าวถึงในตารางทั้งหมดจะได้รับการอัปเดต
การลบข้อมูล
การลบข้อมูลหมายถึงการลบบันทึกทั้งหมดออกจากตารางฐานข้อมูล คำสั่ง 'DELETE' ใช้เพื่อจุดประสงค์นี้
ไวยากรณ์:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- ไวยากรณ์ข้างต้นแสดงคำสั่ง DELETE คีย์เวิร์ด 'FROM' เป็นทางเลือก และมีหรือไม่มีอนุประโยค 'FROM' คำสั่งจะทำงานในลักษณะเดียวกัน
- ส่วนคำสั่ง 'WHERE' เป็นทางเลือก หากไม่ระบุข้อกำหนดนี้ ตารางทั้งหมดจะถูกลบ
การเลือกข้อมูล
การฉายภาพ/การดึงข้อมูลหมายถึงการดึงข้อมูลที่ต้องการจากตารางฐานข้อมูล ซึ่งสามารถทำได้โดยใช้คำสั่ง 'SELECT' พร้อมด้วยส่วนคำสั่ง 'INTO' คำสั่ง 'SELECT' จะดึงค่าจากฐานข้อมูล และส่วนคำสั่ง 'INTO' จะกำหนดค่าเหล่านี้ให้กับตัวแปรท้องถิ่นของ บล็อก PL/SQL.
ด้านล่างนี้เป็นจุดที่ต้องพิจารณาในคำสั่ง 'SELECT'
- คำสั่ง 'SELECT' ควรส่งคืนเพียงระเบียนเดียวในขณะที่ใช้คำสั่งย่อย 'INTO' เนื่องจากตัวแปรตัวเดียวสามารถเก็บค่าได้เพียงค่าเดียว หากคำสั่ง 'SELECT' ส่งคืนค่ามากกว่าหนึ่งค่า เกินข้อยกเว้น 'TOO_MANY_ROWS' จะเกิดขึ้น
- คำสั่ง 'SELECT' จะกำหนดค่าให้กับตัวแปรในส่วนคำสั่ง 'INTO' ดังนั้นจึงจำเป็นต้องได้รับอย่างน้อยหนึ่งระเบียนจากตารางเพื่อเติมค่า หากไม่ได้รับบันทึกใดๆ แสดงว่าข้อยกเว้น 'NO_DATA_FOUND' จะปรากฏขึ้น
- จำนวนคอลัมน์และประเภทข้อมูลในส่วนคำสั่ง 'SELECT' ควรตรงกับจำนวนตัวแปรและประเภทข้อมูลในส่วนคำสั่ง 'INTO'
- ค่าต่างๆ จะถูกดึงออกมาและเติมในลำดับเดียวกับที่กล่าวไว้ในคำสั่ง
- ส่วนคำสั่ง 'WHERE' เป็นทางเลือกที่ช่วยให้มีข้อจำกัดมากขึ้นในบันทึกที่กำลังจะถูกดึงข้อมูล
- คำสั่ง 'SELECT' สามารถใช้ในเงื่อนไข 'WHERE' ของคำสั่ง DML อื่นๆ เพื่อกำหนดค่าของเงื่อนไข
- คำสั่ง 'SELECT' เมื่อใช้คำสั่ง 'INSERT', 'UPDATE', 'DELETE' ไม่ควรมีอนุประโยค 'INTO' เนื่องจากจะไม่เติมตัวแปรใด ๆ ในกรณีเหล่านี้
ไวยากรณ์:
BEGIN SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<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'
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,managed 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(‘Emplovee 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
คำอธิบายรหัส:
- รหัสบรรทัด 2-5: การประกาศตัวแปร
- รหัสบรรทัด 7-14: การแทรกบันทึกลงในตาราง emp
- รหัสบรรทัดที่ 15: ยืนยันการทำธุรกรรมแทรก
- รหัสบรรทัด 17-19: ปรับปรุงเงินเดือนพนักงาน 'XXX' เป็น 15000
- รหัสบรรทัดที่ 20: ยืนยันธุรกรรมการอัพเดต
- รหัสบรรทัดที่ 22: การลบบันทึกของ 'ZZZ'
- รหัสบรรทัดที่ 23: ยืนยันการทำธุรกรรมการลบ
- รหัสบรรทัด 25-27: การเลือกบันทึกของ 'XXX' และเติมลงในตัวแปร l_emp_name, l_emp_no, l_salary, l_manager
- รหัสบรรทัด 28-32: การแสดงค่าบันทึกที่ดึงมา