Datu-base estekak, MySQL erreplikazioa eta PL/SQL prozedurak: gida praktikoa
Link = tabla@link
MySQL = dbo+tabla@link;
SQL>
Datu-base esteka sortzea
CREATE DATABASE LINK dblink_name
CONNECT TO username IDENTIFIED BY password
USING 'DBserver';
MySQL datu-base adibidea eta erreplikazioa
CREATE DATABASE erreplikazio_adibidea;
USE erreplikazio_adibidea;
CREATE TABLE taula1 (ID INTEGER PRIMARY KEY, Izena VARCHAR(20));
INSERT INTO taula1 VALUES (1, 'Aitor'), (2, 'Maren'), (3, 'Beñat');
SELECT * FROM taula1;
GRANT REPLICATION SLAVE ON *.* TO 'erreuser'@'192.168.0.2' IDENTIFIED BY '1234';
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
UNLOCK TABLES;
Oracle PL/SQL prozedura: langileari lana eguneratzea
CREATE OR REPLACE PROCEDURE P_10_20_LANGILEARI_LANAALDATU (v_langile_berria_id NUMBER, v_lana_izena VARCHAR2) AS
v_lana_id lanak.lana_id%TYPE;
lanaexistentzia NUMBER;
BEGIN
SELECT COUNT(lana_izena) INTO lanaexistentzia FROM lanak WHERE lana_izena = v_lana_izena;
IF lanaexistentzia = 0 THEN
v_lana_id := UPPER(SUBSTR(v_lana_izena, 0, 2)) || '_' || UPPER(SUBSTR(v_lana_izena, (LENGTH(v_lana_izena) - 2), 3));
INSERT INTO lanak VALUES (v_lana_id, v_lana_izena, NULL, NULL);
dbms_output.put_line(v_lana_izena || ' lanpostua sortu da: ' || v_lana_id || ' identifikatzailearekin.');
ELSE
SELECT lana_id INTO v_lana_id FROM lanak WHERE v_lana_izena = lana_izena;
END IF;
UPDATE langileak SET lana_id = v_lana_id WHERE langilea_id = v_langile_berria_id;
dbms_output.put_line(v_langile_berria_id || ' IDa daukan langileari, hurrengo lanpostua esleitu zaio: ' || v_lana_izena);
END P_10_20_LANGILEARI_LANAALDATU;
CREATE OR REPLACE FUNCTION F_10_22_EXTRA_SARIA
(a_langile_id IN LANGILEAK.LANGILEA_ID%TYPE, a_lanpostuaren_izena IN LANAK.LANA_IZENA%TYPE,
a_langile_izena_berria OUT LANGILEAK.IZENA%TYPE, a_langile_abizena OUT LANGILEAK.ABIZENA%TYPE)
RETURN LANGILEAK.SOLDATA%TYPE
AS
a_lana_izena LANAK.LANA_IZENA%TYPE;
a_soldata_igoera FLOAT;
a_win VARCHAR2(7);
a_soldata_berria LANGILEAK.SOLDATA%TYPE;
BEGIN
SELECT lana_izena INTO a_lana_izena FROM lanak
WHERE lana_id = (SELECT lana_id FROM langileak WHERE langilea_id = a_langile_id);
IF a_lana_izena = a_lanpostuaren_izena THEN
a_soldata_igoera := 0.75;
a_win := '_WIN_75';
ELSE
a_soldata_igoera := 0.25;
a_win := '_WIN_25';
END IF;
UPDATE langileak SET soldata = soldata * (1 + a_soldata_igoera) WHERE langilea_id = a_langile_id;
UPDATE langileak SET izena = izena || a_win WHERE langilea_id = a_langile_id;
SELECT L.izena, L.abizena, L.soldata INTO a_langile_izena_berria, a_langile_abizena, a_soldata_berria
FROM langileak L WHERE langilea_id = a_langile_id;
RETURN a_soldata_berria;
END F_10_22_EXTRA_SARIA;