SHOW errors
SHOW errors
CREATE OR REPLACE PROCEDURE synchronizuj AS UnhandledConflictOperation EXCEPTION;
BEGIN LOCK TABLE source_log@alab11g IN EXCLUSIVE MODE;
FOR confOper IN (SELECT id, s.operacja AS s, c.operacja AS c
FROM source_log@alab11g s JOIN copy_log c USING(id))
LOOP
CASE
WHEN confOper.s = 'U' AND confOper.c = 'U' THEN
UPDATE pracownicy_copy
SET nazwisko = (SELECT nazwisko FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET etat = (SELECT etat FROM apracownicy_source@alab11g WHERE id_prac = confOper.id_prac),
SET id_szefa = (SELECT id_szefa FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET nazwisko = (SELECT nazwisko FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET zatrudniony = (SELECT zatrudniony FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET placa_dod = (SELECT placa_dod FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET placa_pod = (SELECT placa_pod FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET id_zesp = (SELECT id_zesp FROM pracownicy_source@alab11g WHERE id_prac = confOper.id)
WHERE id_prac = confOper.id;
WHEN confOper.s = 'U' AND confOper.c = 'D' THEN
DELETE FROM pracownicy_source@alab11g WHERE id_prac = confOper.id;
WHEN confOper.s = 'D' THEN
DELETE FROM pracownicy_copy WHERE id_prac = confOper.id;
ELSE
RAISE UnhandledConflictOperation;
END CASE;
END LOOP;
--perform all non-conflict operations from Zrodlo -> Replika
FOR noconf IN (SELECT * FROM pracownicy_source@alab11g WHERE id_prac NOT IN (SELECT id_prac FROM pracownicy_copy)) LOOP
CASE
WHEN noconf.operacja = 'I' THEN
INSERT INTO pracownicy_copy SELECT *
FROM pracownicy_source@alab11g WHERE id_prac = noconf.id;
WHEN noconf.operacja = 'U' THEN
UPDATE praconwicy_copy
SET nazwisko = (SELECT nazwisko FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET etat = (SELECT etat FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET id_szefa = (SELECT id_szefa FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET nazwisko = (SELECT nazwisko FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET zatrudniony = (SELECT zatrudniony FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET placa_dod = (SELECT placa_dod FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET placa_pod = (SELECT placa_pod FROM pracownicy_source@alab11g WHERE id_prac = confOper.id),
SET id_zesp = (SELECT id_zesp FROM pracownicy_source@alab11g WHERE id_prac = confOper.id)
WHERE id_prac = noconf.id;
WHEN noconf.operacja = 'D' THEN
DELETE FROM pracownicy_copy WHERE id_prac = noconf.id;
END CASE;
END LOOP;
--perform all non-conflict operations from Replika -> Zrodlo
FOR noconf IN (SELECT id, operacja FROM copy_log WHERE id NOT IN (SELECT id FROM source_log@alab11g)) LOOP
CASE
WHEN noconf.operacja = 'I' THEN
INSERT INTO pracownicy_source@alab11g SELECT *
FROM pracownicy_copy WHERE id_prac = noconf.id;
WHEN noconf.operacja = 'U' THEN
UPDATE pracownicy_source@alab11g
SET nazwisko = (SELECT nazwisko FROM pracownicy_copy WHERE id_prac = confOper.id),
SET etat = (SELECT etat FROM pracownicy_copy WHERE id_prac = confOper.id),
SET id_szefa = (SELECT id_szefa FROM pracownicy_copy WHERE id_prac = confOper.id),
SET nazwisko = (SELECT nazwisko FROM pracownicy_copy WHERE id_prac = confOper.id),
SET zatrudniony = (SELECT zatrudniony FROM pracownicy_copy WHERE id_prac = confOper.id),
SET placa_dod = (SELECT placa_dod FROM pracownicy_copy WHERE id_prac = confOper.id),
SET placa_pod = (SELECT placa_pod FROM pracownicy_copy WHERE id_prac = confOper.id),
SET id_zesp = (SELECT id_zesp FROM pracownicy_copy WHERE id_prac = confOper.id)
WHERE id_prac = noconf.id;
WHEN noconf.operacja = 'D' THEN
DELETE FROM pracownicy_source@alab11g WHERE id_prac = noconf.id;
END CASE;
END LOOP;
DELETE FROM pracownicy_log@alab11g; DELETE FROM copy_log; END;
/
bledy:
12/8 PL/SQL: SQL Statement ignored
13/103 PL/SQL: ORA-01747: invalid user.table.column, table.column, or co lumn specification
41/9 PL/SQL: SQL Statement ignored
43/104 PL/SQL: ORA-01747: invalid user.table.column, table.column, or co lumn specification
67/9 PL/SQL: SQL Statement ignored
70/94 PL/SQL: ORA-01747: invalid user.table.column, table.column, or co lumn specification
Ten post edytował luke_skywalker 7.06.2009, 17:21:39