cursor cur1 is select table_name, nom_colonnes from all_tables where conditions;
v_cur1 cur1%rowtype;
cursor cur2 is select * from v_cur1.table_name;
génère une erreur de compilation de type v_cur1.table_name : table ou vue inexistante.une solution possible est le code suivant :
declare
cursor cur_tables is
select nomtable
from toutestables;
vr_cur_tables cur_tables%rowtype;
req_index varchar2(400);
nb_key_index number;
--crée un objet de type record
type keyIndex is record (nomindex varchar2(20), valindex varchar2(20));
--crée un objet de type tableau composé d'un index et d'une colonne contenant un objet keyIndex de type record
type tKeyIndex is table of keyindex;
cursor cur_tables is
select nomtable
from toutestables;
vr_cur_tables cur_tables%rowtype;
req_index varchar2(400);
nb_key_index number;
--crée un objet de type record
type keyIndex is record (nomindex varchar2(20), valindex varchar2(20));
--crée un objet de type tableau composé d'un index et d'une colonne contenant un objet keyIndex de type record
type tKeyIndex is table of keyindex;
tableKeyIndex tKeyIndex;
i number;req_nb_key varchar2(400);
begin
for vr_cur_tables in cur_tables loop
dbms_output.put_line(vr_cur_tables.nomtable);
-- sélectionne les données de la table en cours
req_index := 'select * from ' || vr_cur_tables.nomtable;
-- récupère les données du select dans une table
execute immediate req_index bulk collect into tableKeyIndex;
req_nb_key :='select count(*) from ' || vr_cur_tables.nomtable;
execute immediate req_nb_key into nb_key_index;
--Pour chaque tupple du select affiche la valeur de la colonne nomindex de la table en cours
for i in 1..nb_key_index loop
dbms_output.put_line(tableKeyIndex(i).nomindex);
end loop;
end loop;
end;
Aucun commentaire:
Enregistrer un commentaire