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'

การเลือกข้อมูลใน 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,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: การแสดงค่าบันทึกที่ดึงมา