1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| CREATE OR REPLACE PACKAGE BODY pathpack IS
FUNCTION check_path(p_tampon VARCHAR2, p_pere ROWID DEFAULT NULL)
RETURN ROWID IS
TYPE cur_dyn IS REF CURSOR;
curpere cur_dyn;
v_rowid ROWID;
v_requete VARCHAR2(500);
BEGIN
IF p_pere IS NULL THEN
v_requete := 'SELECT ROWID FROM t_path WHERE pere IS NULL AND path =''' ||
REPLACE(p_tampon, '''', '''''') || '''';
ELSE
v_requete := 'SELECT ROWID FROM t_path WHERE pere =''' || p_pere ||
''' AND path =''' || REPLACE(p_tampon, '''', '''''') || '''';
END IF;
--Comme il n'est cencé n'y avoir que 1 seul répertoire avec ce nom la à la racine pas
--besoin de boucle
OPEN curpere FOR v_requete;
FETCH curpere
INTO v_rowid;
CLOSE curpere;
IF v_rowid IS NULL THEN
--Le repertoire n'existe pas je l'ajoute
INSERT INTO t_path
VALUES
(p_tampon, p_pere)
RETURNING ROWID INTO v_rowid;
COMMIT;
RETURN v_rowid;
ELSE
--Le repertoire existe je renvoie son rowid
RETURN v_rowid;
END IF;
END;
PROCEDURE insertpath IS
CURSOR cur_test IS
SELECT * FROM dispatchobjet;
tampon VARCHAR2(257);
v_rowidpere ROWID;
v_temppath VARCHAR2(257);
v_date DATE := SYSDATE;
BEGIN
FOR rec IN cur_test LOOP
tampon := substr(lower(rec.pathnom), 3 + 1);
tampon := rtrim(tampon, '\');
--Si c que un repertoire
IF instr(tampon, '\') = 0 AND rec.objettype = 'R' THEN
v_rowidpere := check_path(tampon);
ELSE
--Si y a plusieur sous repertoire
LOOP
EXIT WHEN instr(tampon, '\') = 0;
--On prend le premier repertoire
v_temppath := substr(tampon, 1, instr(tampon, '\') - 1);
v_rowidpere := check_path(v_temppath, v_rowidpere);
tampon := substr(tampon, instr(tampon, '\') + 1);
END LOOP;
--on fini le dernier repertoire
v_rowidpere := check_path(tampon, v_rowidpere);
IF rec.objettype = 'F' THEN
INSERT INTO t_file VALUES (v_rowidpere, rec.filenom);
COMMIT;
END IF;
END IF;
v_rowidpere := NULL;
END LOOP;
htp.prn((SYSDATE - v_date) * 1440);
END;
END pathpack; |