Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tạo bảng lồng nhau làm đối tượng cơ sở dữ liệu trong Oracle

Nếu bạn định sử dụng lại bảng lồng nhau mà bạn muốn tạo thì làm như vậy dưới dạng đối tượng cơ sở dữ liệu là lựa chọn tốt nhất cho bạn. Bạn có thể lưu trữ chúng trong cơ sở dữ liệu của mình vĩnh viễn và sử dụng chúng bất cứ khi nào bạn muốn.

Ngoài việc tạo Bộ sưu tập PL / SQL kiểu Bảng lồng nhau bên trong một khối PL / SQL, bạn cũng có thể tạo chúng dưới dạng đối tượng cơ sở dữ liệu và lưu trữ vĩnh viễn. Ngoài ra bạn có thể tái sử dụng chúng bất cứ khi nào bạn muốn. Bảng lồng nhau được tạo dưới dạng đối tượng cơ sở dữ liệu có thể dựa trên Kiểu dữ liệu gốc hoặc Kiểu dữ liệu do người dùng xác định. Trong hướng dẫn này, chúng tôi sẽ tập trung vào phần trước và để phần sau cho phần hướng dẫn tiếp theo.

Cách tạo bộ sưu tập kiểu bảng lồng nhau dựa trên kiểu dữ liệu ban đầu

Theo kiểu dữ liệu nguyên thủy, chúng ta có nghĩa là các kiểu dữ liệu được xác định trước bởi ngôn ngữ và được đặt tên bằng một từ khóa dành riêng. Bạn có thể tham khảo Tài liệu Oracle này để đọc thêm về Kiểu dữ liệu PL / SQL.

Các bảng sau không có ràng buộc, chỉ mục hoặc bất kỳ thứ gì được thiết kế trên chúng và được tạo hoàn toàn để trình bày cách tạo bảng lồng nhau dưới dạng đối tượng cơ sở dữ liệu.

Bước 1:Bật đầu ra Máy chủ

SET SERVEROUTPUT ON;

Bước 2:Tạo bộ sưu tập loại Bảng lồng nhau

CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2 (10);
/

Câu lệnh trên khi thực thi thành công sẽ tạo một bảng lồng nhau với tên ‘my_nested_table’ sẽ dựa trên kiểu dữ liệu nguyên thủy VARCHAR2.

Bước 3:Cách sử dụng bảng lồng nhau?

Loại tập hợp mà chúng tôi đã tạo ở trên có thể được sử dụng để chỉ định loại cột của bảng.

CREATE TABLE my_subject(
	  sub_id    	NUMBER,
	  sub_name  	VARCHAR2 (20),
	  sub_schedule_day    my_nested_table
) NESTED TABLE sub_schedule_day STORE AS nested_tab_space;
/

Bảng trên là một bảng bình thường ngoại trừ 3 cột của nó thuộc loại bảng lồng nhau có thể chứa nhiều giá trị. Để xác định một cột của bảng là kiểu bảng lồng nhau, bạn phải cho trình biên dịch biết tên của cột và bảng lưu trữ. Bạn có thể làm như vậy bằng cách sử dụng mệnh đề NESTED ABLE và STORE AS, như chúng ta đã làm ở đây trong dòng số 5. ​​Sử dụng mệnh đề NESTED TABLE, chúng tôi chỉ định tên của cột và sử dụng mệnh đề STORE AS, chúng tôi chỉ định bảng lưu trữ cho bảng lồng nhau.

Bạn có thể tham khảo video hướng dẫn mà tôi đã giải thích từng bước về quy trình tạo bảng ở trên.

Chèn hàng vào bảng

INSERT INTO my_subject (sub_id, sub_name, sub_schedule_day)
VALUES (101, 'Maths', my_nested_table('mon', 'Fri'));

Bạn chèn các hàng vào bảng lồng nhau giống như khi bạn chèn vào bảng bình thường. Tuy nhiên, để chèn dữ liệu vào cột của kiểu bảng lồng nhau, trước tiên bạn phải viết tên của bảng lồng nhau mà trong trường hợp của chúng ta là 'my_nested_table' (tham khảo bước 2) và sau đó ghi dữ liệu theo kiểu dữ liệu của bảng lồng nhau của bạn và đặt nó bên trong dấu ngoặc đơn.

Truy xuất dữ liệu từ bảng

Một câu lệnh SELECT DML đơn giản có thể được sử dụng để truy xuất dữ liệu từ bảng.

SELECT * FROM my_subject;

Câu lệnh DML đơn giản này sẽ hiển thị cho bạn tất cả dữ liệu được lưu trữ trong bảng mà chúng tôi đã tạo ở trên. Để xem dữ liệu từ một hàng cụ thể, bạn có thể sử dụng mệnh đề WHERE với SELECT DML

SELECT * FROM my_subject WHERE sub_id = 101;

Nếu bạn muốn thì bạn có thể sử dụng truy vấn phụ để kiểm tra dữ liệu từ cột mà bạn đã xác định là loại bảng lồng nhau.

SELECT * FROM TABLE (
  SELECT sub_schedule_day FROM my_subject WHERE sub_id = 101
);

Truy vấn trên sẽ hiển thị cho bạn dữ liệu của chủ đề có id-chủ đề 101 chỉ từ cột sub_schedule_day. Trong truy vấn này, chúng tôi đã sử dụng biểu thức TABLE để mở phiên bản và hiển thị dữ liệu ở định dạng quan hệ.

Cập nhật dữ liệu của bảng

Bạn có thể cập nhật tất cả các giá trị của cột mà bạn xác định là bảng lồng nhau hoặc bạn có thể cập nhật một phiên bản giống nhau.

Cập nhật tất cả các giá trị của cột loại bảng lồng nhau.

UPDATE my_subject SET sub_schedule_day = my_nested_table('Tue', 'Sat') 
WHERE sub_id = 101;
/

Truy vấn trên sẽ cập nhật tất cả các giá trị của sub_schedule_day từ 'Thứ Hai', 'Thứ Sáu' đến 'Thứ Ba' và 'Thứ Bảy'. Bây giờ, giả sử bạn chỉ muốn cập nhật một phiên bản duy nhất của cột này bằng cách thay thế ‘Sat’ bằng ‘Thu’. Bạn sẽ làm điều đó như thế nào?

Cập nhật phiên bản duy nhất của bảng lồng nhau

Để cập nhật một trường hợp duy nhất của cột loại bảng lồng nhau, bạn có thể một lần nữa sử dụng biểu thức TABLE để giúp đỡ.

UPDATE TABLE
  (SELECT sub_schedule_day FROM my_subject 
  WHERE sub_id = 101) A
SET A.COLUMN_VALUE   = 'Thur' 
WHERE A.COLUMN_VALUE = 'Sat';

Truy vấn trên sẽ cập nhật giá trị từ ‘Sat’ thành ‘Thur’ trong bảng.

Hy vọng bạn thích đọc và học được điều gì đó mới. Hãy nhớ đăng ký kênh của chúng tôi vì có nhiều bài hướng dẫn thú vị như vậy. Cảm ơn &chúc một ngày tốt lành!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sử dụng hàm rownum với> đăng nhập oracle

  2. Tải dữ liệu hình ảnh vào các cột BLOB trong Oracle

  3. Làm thế nào để tải tập lệnh bảng trong Oracle SQL Developer?

  4. Cài đặt gói RODBC / ROracle trên OS X Mavericks

  5. Nhận kết quả hàng đầu cho từng nhóm (trong Oracle)