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 |