Oracle PL/SQL Chèn, cập nhật, xóa và chọn vào [Ví dụ]

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng SQL trong PL/SQL. SQL là thành phần thực tế đảm nhiệm việc tìm nạp và cập nhật dữ liệu trong cơ sở dữ liệu trong khi PL/SQL là thành phần xử lý những dữ liệu này. Hơn nữa, trong bài viết này, chúng tôi cũng sẽ thảo luận về cách kết hợp SQL trong khối PL/SQL.

Giao dịch DML trong PL/SQL

DML là viết tắt của Ngôn ngữ thao tác dữ liệu. Những câu lệnh này chủ yếu được sử dụng để thực hiện hoạt động thao tác. Nó giải quyết các hoạt động dưới đây.

  • Chèn dữ liệu
  • Cập nhật dữ liệu
  • Xóa dữ liệu
  • Lựa chọn dữ liệu

Trong PL/SQL, chúng ta chỉ có thể thực hiện thao tác dữ liệu bằng cách sử dụng các lệnh SQL.

Chèn dữ liệu

Trong PL/SQL, chúng ta có thể chèn dữ liệu vào bất kỳ bảng nào bằng lệnh SQL INSERT INTO. Lệnh này sẽ lấy tên bảng, cột bảng và giá trị cột làm đầu vào và chèn giá trị vào bảng cơ sở.

Lệnh INSERT cũng có thể lấy các giá trị trực tiếp từ một bảng khác bằng cách sử dụng câu lệnh 'SELECT' thay vì đưa ra các giá trị cho mỗi cột. Thông qua câu lệnh 'SELECT', chúng ta có thể chèn bao nhiêu hàng mà bảng cơ sở chứa.

Cú pháp:

BEGIN
  INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>)
     VALUES(<valuel><value2>,...:<value_n>);
END;
  • Cú pháp trên hiển thị lệnh INSERT INTO. Tên bảng và giá trị là các trường bắt buộc, trong khi tên cột không bắt buộc nếu câu lệnh chèn có giá trị cho tất cả các cột của bảng.
  • Từ khóa 'GIÁ TRỊ' là bắt buộc nếu các giá trị được cung cấp riêng biệt như được hiển thị ở trên.

Cú pháp:

BEGIN
  INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
     SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
  • Cú pháp trên hiển thị lệnh INSERT INTO lấy các giá trị trực tiếp từ bằng lệnh SELECT.
  • Từ khóa 'GIÁ TRỊ' không được xuất hiện trong trường hợp này vì các giá trị không được cung cấp riêng biệt.

Cập nhật dữ liệu

Cập nhật dữ liệu đơn giản có nghĩa là cập nhật giá trị của bất kỳ cột nào trong bảng. Điều này có thể được thực hiện bằng cách sử dụng câu lệnh 'UPDATE'. Câu lệnh này lấy tên bảng, tên cột và giá trị làm đầu vào và cập nhật dữ liệu.

Cú pháp:

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;
  • Cú pháp trên hiển thị CẬP NHẬT. Từ khóa 'SET' hướng dẫn công cụ PL/SQL cập nhật giá trị của cột với giá trị đã cho.
  • Mệnh đề 'WHERE' là tùy chọn. Nếu mệnh đề này không được đưa ra thì giá trị của cột được đề cập trong toàn bộ bảng sẽ được cập nhật.

Xóa dữ liệu

Xóa dữ liệu có nghĩa là xóa một bản ghi đầy đủ khỏi bảng cơ sở dữ liệu. Lệnh 'DELETE' được sử dụng cho mục đích này.

Cú pháp:

BEGIN
  DELETE
  FROM
  <table_name>
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • Cú pháp trên hiển thị lệnh DELETE. Từ khóa 'FROM' là tùy chọn và có hoặc không có mệnh đề 'FROM', lệnh sẽ hoạt động theo cùng một cách.
  • Mệnh đề 'WHERE' là tùy chọn. Nếu mệnh đề này không được đưa ra thì toàn bộ bảng sẽ bị xóa.

Lựa chọn dữ liệu

Chiếu/tìm nạp dữ liệu có nghĩa là lấy dữ liệu cần thiết từ bảng cơ sở dữ liệu. Điều này có thể đạt được bằng cách sử dụng lệnh 'SELECT' với mệnh đề 'INTO'. Lệnh 'SELECT' sẽ lấy các giá trị từ cơ sở dữ liệu và mệnh đề 'INTO' sẽ gán các giá trị này cho biến cục bộ của Khối PL/SQL.

Dưới đây là những điểm cần được xem xét trong câu lệnh 'SELECT'.

  • Câu lệnh 'SELECT' chỉ được trả về một bản ghi trong khi sử dụng mệnh đề 'INTO' vì một biến chỉ có thể chứa một giá trị. Nếu câu lệnh 'SELECT' trả về nhiều hơn một giá trị thì ngoại lệ 'TOO_MANY_ROWS' sẽ được nâng lên.
  • Câu lệnh 'SELECT' sẽ gán giá trị cho biến trong mệnh đề 'INTO', do đó, nó cần lấy ít nhất một bản ghi từ bảng để điền giá trị. Nếu nó không nhận được bất kỳ bản ghi nào thì ngoại lệ 'NO_DATA_FOUND' sẽ được đưa ra.
  • Số lượng cột và kiểu dữ liệu của chúng trong mệnh đề 'SELECT' phải khớp với số lượng biến và kiểu dữ liệu của chúng trong mệnh đề 'INTO'.
  • Các giá trị được tìm nạp và điền theo thứ tự giống như được đề cập trong câu lệnh.
  • Mệnh đề 'WHERE' là tùy chọn cho phép có nhiều hạn chế hơn đối với các bản ghi sắp được tìm nạp.
  • Câu lệnh 'SELECT' có thể được sử dụng trong điều kiện 'WHERE' của các câu lệnh DML khác để xác định giá trị của các điều kiện.
  • Câu lệnh 'SELECT' khi sử dụng câu lệnh 'INSERT', 'UPDATE', 'DELETE' không được có mệnh đề 'INTO' vì nó sẽ không điền bất kỳ biến nào trong những trường hợp này.

Cú pháp:

BEGIN
  SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<variable_n> 
   FROM <table_name>
   WHERE <condition to fetch the required records>;
END;
  • Cú pháp trên hiển thị lệnh SELECT-INTO. Từ khóa 'TỪ' là bắt buộc để xác định tên bảng mà dữ liệu cần được tìm nạp.
  • Mệnh đề 'WHERE' là tùy chọn. Nếu mệnh đề này không được đưa ra thì dữ liệu từ toàn bộ bảng sẽ được tìm nạp.

Ví dụ 1: Trong ví dụ này, chúng ta sẽ xem cách thực hiện các hoạt động DML trong PL / SQL. Chúng ta sẽ chèn bốn bản ghi dưới đây vào bảng emp.

EMP_NAME EMP_NO LÃNH SỰ GIÁM ĐỐC
BBB 1000 25000 AAA
XXX 1001 10000 BBB
YYY 1002 10000 BBB
Zzz 1003 7500 BBB

Sau đó, chúng ta sẽ cập nhật mức lương của 'XXX' thành 15000 và chúng ta sẽ xóa hồ sơ nhân viên 'ZZZ'. Cuối cùng, chúng ta sẽ chiếu thông tin chi tiết của nhân viên 'XXX'.

Lựa chọn dữ liệu trong 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;
/

Đầu ra:

Values Inserted
Values Updated
Values Deleted
Employee Detail 
Employee Name:XXX 
Employee Number:1001 
Employee Salary:15000 
Employee Manager Name:BBB

Giải thích mã:

  • Dòng mã 2-5: Khai báo biến.
  • Dòng mã 7-14: Chèn bản ghi vào bảng emp.
  • Dòng mã 15: Thực hiện các giao dịch chèn.
  • Dòng mã 17-19: Cập nhật mức lương của nhân viên 'XXX' lên 15000
  • Dòng mã 20: Cam kết giao dịch cập nhật.
  • Dòng mã 22: Xóa bản ghi của 'ZZZ'
  • Dòng mã 23: Thực hiện giao dịch xóa.
  • Dòng mã 25-27: Chọn bản ghi 'XXX' và điền vào biến l_emp_name, l_emp_no, l_salary, l_manager.
  • Dòng mã 28-32: Hiển thị giá trị bản ghi được tìm nạp.