sql >> Database >  >> RDS >> Oracle

Maak een geneste tabel en voeg alleen gegevens in de binnenste tabel in

U kunt COALESCE( salary_history, salary_list() ) MULTISET UNION ALL salary_list( :your_new_value ) gebruiken om de nieuwe waarde aan de oude lijst toe te voegen (of maak een nieuwe lijst als deze niet bestaat).

Oracle 11g R2 Schema-instellingen :

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 )
/

Query 1 :

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

SELECT * FROM employees

Resultaten :

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

Vraag 2 :

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

SELECT * FROM employees

Resultaten :

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

Vraag 3 :

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

SELECT * FROM employees

Resultaten :

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


  1. Kan ik een gefilterde databasereplicatie met sterpatroon instellen?

  2. Wat betekent `unsigned` in MySQL en wanneer moet je het gebruiken?

  3. Hoe array-lijst in zigzag sorteren in PHP?

  4. Oracle Install voor SSIS-connectiviteit (en stuurprogramma's 32 64 bit)