SQL New Features In Oracle9i - Multitabel Inserts

In Oracle 9i zijn er een groot aantal verbeteringen aangebracht in SQL. Hieronder - Multitabel Inserts

Multitable Inserts


Multitable inserts zorgt ervoor dat een enkele  INSERT INTO .. SELECT statement, voorwaardelijk of niet-voorwaardelijke, naar meerdere tabellen inserts doet. Dit statement verminderd  table scans en  PL/SQL code wat nodig is om meerdere voorwaardelijke inserts te doen , vergeleken met vorige versie. Zijn voornamelijke nut is voor het ETL proces in data warehouses, waar het geparalleliseerd kan worden en/of non_relationele data in een relationeel formaat kan converteren.

Onvoorwaardelijke insert into ALL tables


INSERT ALL
  INTO sal_history VALUES(empid,hiredate,sal)
  INTO mgr_history VALUES(empid,mgr,sysdate)
SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGR
  FROM employees WHERE employee_id > 200;


Omzetten insert naar split non-relational data


INSERT ALL
  INTO Sales_info VALUES (employee_id,week_id,sales_MON)
  INTO Sales_info VALUES (employee_id,week_id,sales_TUE)
  INTO Sales_info VALUES (employee_id,week_id,sales_WED)
  INTO Sales_info VALUES (employee_id,week_id,sales_THUR)
  INTO Sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
    sales_WED, sales_THUR,sales_FRI
FROM Sales_source_data;


Voorwaardelijke insert into ALL tables


INSERT ALL
  WHEN SAL>10000 THEN
    INTO sal_history VALUES(EMPID,HIREDATE,SAL)
  WHEN MGR>200 THEN
    INTO mgr_history VALUES(EMPID,MGR,SYSDATE)
SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGR
  FROM employees WHERE employee_id > 200;


Insert into de EERSTE tabel met een matching condition


INSERT FIRST
  WHEN SAL > 25000  THEN
    INTO special_sal VALUES(DEPTID,SAL)
  WHEN HIREDATE like ('%00%') THEN
    INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
  WHEN HIREDATE like ('%99%') THEN
    INTO hiredate_history_99 VALUES(DEPTID,HIREDATE)
  ELSE
    INTO hiredate_history VALUES(DEPTID, HIREDATE)
SELECT department_id DEPTID, SUM(salary) SAL,
    MAX(hire_date) HIREDATE
  FROM employees GROUP BY department_id;
  

De beperkingen van multitable inserts zijn:


Multitable inserts kunnen alleen uitgevoerd worden op tabellen, niet op views of materialized views. 
Je kan geen multitable insert uitvoeren via een DB link.
Je kan heen  multiple insert uitvoren into geneste tabellen tables.
De som van alle INTO columns kunnen niet hoger worden dan 999.
Sequences cannot be used in the subquery of the multitable insert statement.

zie ook

Expliciet genoemde indexen op Keys
Share Locks op ongeindexeerde FKs
PK Lookup tijdens FK Inserten
View Constraints
Function Based Index Verbeteringen
MERGE Statement
Multitabel Inserts
Externe Tabellen
SELECT .. FOR UPDATE Verbeteringen

 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 249 gasten online