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
|
CURSOR C_TABLES IS
SELECT TABLE_NAME FROM user_tab_columns where COLUMN_NAME='BUS_SYMBOL' and TABLE_NAME NOT IN (select VIEW_NAME from user_views);
/* liste des bus_symbol existant pour une table donnee */
CURSOR C_BUS_SYMBOL(t IN varchar2) IS
SELECT DISTINCT bus_symbol FROM t;
c_bus VARCHAR2(15);
--flag NUMBER;
BEGIN
/* Ouverture du fichier des bus symbol */
FicIN := UTL_FILE.FOPEN(v_dir_in,v_fichier_in,'R',32767);
/* Pour toutes les lignes du ficIN */
LOOP
UTL_FILE.GET_LINE (FicIN, v_ligne);
v_ancien_nom := SUBSTR (v_ligne, 1, INSTR (v_ligne, ';') - 1);
v_nouveau_nom := SUBSTR (v_ligne, INSTR (v_ligne, ';') + 1);
DBMS_OUTPUT.PUT_LINE('Nouveau : '||v_nouveau_nom);
DBMS_OUTPUT.PUT_LINE('Ancien : '||v_ancien_nom);
/* On parcourt les tables contenant l attribut b et on update sa valeur */
FOR c_table IN C_TABLES
LOOP
/* Si le nouveau b correspond a un b existant
on le supprime de l existant */
--flag := 0;
FOR c_b IN C_SYMBOL(c_table.TABLE_NAME)
LOOP
IF c_b = v_nouveau_nom THEN
--flag :=1;
DBMS_OUTPUT.PUT_LINE('Le bus symbol *'||v_nouveau_nom||'* est deja present da
ns la table *'||c_table.table_nam
e ||'*');
ELSE
v_cmd := 'update ' || c_table.TABLE_NAME || ' set b = :1 where b= :2';
EXECUTE IMMEDIATE v_cmd USING v_nouveau_nom, v_ancien_nom;
DBMS_OUTPUT.PUT_LINE('TABLE '|| c_table.TABLE_NAME || ' mise a jour ');
END IF;
END LOOP;
END LOOP;
END LOOP;
END;
/ |