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'.
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.