- --CWICZENIE HORYZONTALNE ROZPRASZANIE DANYCH
- CREATE TABLE employees_shipping (
- EMPLOYEE_ID NUMBER(6,0) NOT NULL ENABLE,
- FIRST_NAME VARCHAR2(20 BYTE),
- LAST_NAME VARCHAR2(25 BYTE) NOT NULL ENABLE,
- SALARY NUMBER(8,2),
- DEPARTMENT_ID NUMBER(4,0),
- CONSTRAINT employee_id_pk_shipping PRIMARY KEY (employee_id) ENABLE
- );
- drop table employees_shipping;
- commit;
- SELECT * FROM employees_others@foo;
- CREATE SYNONYM employees_others FOR employees_others@foo;
- SELECT * FROM employees_others;
- create view employees as
- select * from employees_shipping
- union all
- select * from employees_others;
- CREATE OR REPLACE TRIGGER ON_EMPLOYEES_INSERT
- INSTEAD OF INSERT ON employees
- DECLARE
- BEGIN
- CASE WHEN :NEW.department_id=50 THEN
- INSERT INTO employees_shipping VALUES (:NEW.employee_id, :NEW.first_name, :NEW.last_name, :NEW.salary, :NEW.department_id);
- ELSE
- INSERT INTO employees_others VALUES (:NEW.employee_id, :NEW.first_name, :NEW.last_name, :NEW.salary, :NEW.department_id);
- END CASE;
- END;
- CREATE OR REPLACE TRIGGER ON_EMPLOYEES_DELETE
- INSTEAD OF DELETE ON employees
- DECLARE
- BEGIN
- CASE WHEN :OLD.department_id=50 THEN
- DELETE FROM employees_shipping em WHERE em.employee_id = :OLD.employee_id;
- ELSE
- DELETE FROM employees_others em WHERE em.employee_id = :OLD.employee_id;
- END CASE;
- END;
- CREATE OR REPLACE TRIGGER ON_EMPLOYEES_UPDATE
- INSTEAD OF UPDATE ON employees
- DECLARE
- BEGIN
- CASE WHEN :OLD.department_id=:NEW.department_id THEN
- CASE WHEN :OLD.department_id=50
- THEN
- UPDATE employees_shipping em
- SET em.employee_id = :NEW.employee_id, em.first_name = :NEW.first_name, em.last_name = :NEW.last_name, em.salary = :NEW.salary, em.department_id = :NEW.department_id;
- ELSE
- UPDATE employees_others em
- SET em.employee_id = :NEW.employee_id, em.first_name = :NEW.first_name, em.last_name = :NEW.last_name, em.salary = :NEW.salary, em.department_id = :NEW.department_id;
- END CASE;
- ELSE
- CASE WHEN :OLD.department_id=50
- THEN
- dbms_output.put_line('wartosci'||' '||:NEW.employee_id||' '|| :NEW.first_name||' '|| :NEW.last_name||' '|| :NEW.salary||' '|| :NEW.department_id);
- INSERT INTO employees_others VALUES (:NEW.employee_id, :NEW.first_name, :NEW.last_name, :NEW.salary, :NEW.department_id);
- DELETE FROM employees_shipping em WHERE em.employee_id = :OLD.employee_id;
- ELSE
- INSERT INTO employees_shipping VALUES (:NEW.employee_id, :NEW.first_name, :NEW.last_name, :NEW.salary, :NEW.department_id);
- DELETE FROM employees_others em WHERE em.employee_id = :OLD.employee_id;
- END CASE;
- END CASE;
- END;
- rollback;
- INSERT INTO employees VALUES (3,'NIKODEM','DYZMA',300,50);
- INSERT INTO employees VALUES (2,'UKSZ','NOW',300,51);
- purge recyclebin;
- SELECT * FROM employees_shipping;
- SELECT * FROM employees_others;
- commit;
- --OTHERS
- --2 UKSZ NOW 300 51
- --SHIPPING
- --1 UKSZ NOW 300 50
- --3 NIKODEM DYZMA 300 50
- insert into employees_others values (3 ,'NIKODEM', 'DYZMA', 300, 33);
- UPDATE employees em SET em.department_id = 33 WHERE em.employee_id = 3;
- CREATE TABLE employees_others (
- EMPLOYEE_ID NUMBER(6,0) NOT NULL ENABLE,
- FIRST_NAME VARCHAR2(20 BYTE),
- LAST_NAME VARCHAR2(25 BYTE) NOT NULL ENABLE,
- SALARY NUMBER(8,2),
- DEPARTMENT_ID NUMBER(4,0),
- CONSTRAINT employee_id_pk_others PRIMARY KEY (employee_id) ENABLE
- );