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

Tạo bảng lồng nhau và chỉ chèn dữ liệu vào bảng bên trong

Bạn có thể sử dụng COALESCE( salary_history, salary_list() ) MULTISET UNION ALL salary_list( :your_new_value ) để thêm giá trị mới vào danh sách cũ (hoặc tạo một danh sách mới nếu nó không tồn tại).

Thiết lập lược đồ Oracle 11g R2 :

CREATE OR REPLACE TYPE salary_list AS TABLE OF NUMBER;
/

CREATE TABLE employees(
  id             NUMBER,
  salary_history salary_list
) NESTED TABLE salary_history STORE AS salary_history_tab
/

INSERT INTO employees VALUES ( 1, NULL )
/

Truy vấn 1 :

UPDATE employees
SET   salary_history = COALESCE( salary_history, salary_list() )
                       MULTISET UNION ALL salary_list( 500 )
WHERE id = 1

SELECT * FROM employees

Kết quả :

| ID | SALARY_HISTORY |
|----|----------------|
|  1 |            500 |

Truy vấn 2 :

UPDATE employees
SET   salary_history = COALESCE( salary_history, salary_list() )
                       MULTISET UNION ALL salary_list( 700 )
WHERE id = 1

SELECT * FROM employees

Kết quả :

| ID | SALARY_HISTORY |
|----|----------------|
|  1 |        500,700 |

Truy vấn 3 :

UPDATE employees
SET   salary_history = COALESCE( salary_history, salary_list() )
                       MULTISET UNION ALL salary_list( 500 )
WHERE id = 1

SELECT * FROM employees

Kết quả :

| ID | SALARY_HISTORY |
|----|----------------|
|  1 |    500,700,500 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm SYS_EXTRACT_UTC () trong Oracle

  2. Các ký tự đặc biệt của Oracle

  3. ORA-00903:tên bảng không hợp lệ trên PreparedStatement

  4. Truy vấn Pivot / Crosstab trong Oracle 10g (Số cột động)

  5. Thay đổi giá trị đã chèn bằng trình kích hoạt