Curseurs imbriqués dans PL/SQL
Je travaille avec Oracle PL/SQL.
Im essayant de définir les Curseurs Imbriqués, ce qui signifie que la sortie de la première Curseur doit être l'entrée de la seconde. Pour être plus précis: le premier doit stocker les tables avec un préfixe spécifique en elle. Le second doit stocker toutes les valeurs d'un attribut de tous les tableaux qui sont dans le premier.
Voici mon extrait de code. J'espère qu'il fait mon problème un peu plus clair:
DECLARE
var_table_name VARCHAR2(30);
var_dimension_key VARCHAR2(30);
CURSOR cur_all_dim IS
SELECT
table_name
FROM dba_tables
WHERE dba_tables.tablespace_name = 'USERS'
AND dba_tables.owner = 'DWH_CORE'
AND UPPER (dba_tables.table_name) LIKE ('%DIM%%')
AND UPPER (dba_tables.table_name) NOT LIKE ('%TEMP%')
AND UPPER (dba_tables.table_name) NOT LIKE ('%DEBUG%')
AND UPPER (dba_tables.table_name) NOT LIKE ('%LOG%');
CURSOR cur_dimension_key IS
SELECT dimension_key FROM var_table_name;
BEGIN
OPEN cur_all_dim;
LOOP
EXIT WHEN cur_all_dim%NOTFOUND;
FETCH cur_all_dim INTO var_table_name;
OPEN cur_dimensions_key;
LOOP
EXIT WHEN cur_dimensions_key%NOTFOUND;
FETCH cur_dimensions_key INTO var_dimension_key;
dbms_output.put_line (var_table_name);
dbms_output.put_line (var_dimension_key);
END LOOP;
CLOSE cur_dimension_key;
END LOOP;
CLOSE cur_all_dim;
END;
OriginalL'auteur user3364656 | 2014-02-28
Vous devez vous connecter pour publier un commentaire.
Curseurs statiques ne peuvent accéder à des objets statiques. En d'autres termes, les curseurs statiques uniquement si toutes les tables et les colonnes sont connus au moment de la compilation.
Si vous avez besoin d'accéder à une table dont le nom ne sera connu que lors de l'exécution, vous aurez à utiliser SQL dynamique. Par exemple, vous pourriez utiliser un
REF CURSOR
dans votre cas:J'ai utilisé un curseur implicite. Le curseur de la variable est locale à la boucle, de façon similaire à la norme de procédure
FOR
boucle (vous n'avez pas besoin de déclareri
dansFOR i IN 1..n
).ok, je comprends cela. Mais pourquoi ai-je un message d'erreur 'CUR_DIMENSIONS_KEY" n'est pas declarated? (PLS-00201)
Probablement parce qu'il y avait une erreur dans mon code
CUR_DIMENSIONS_KEY
n'a pas été déclarée, maisCUR_DIMENSION_KEY
a été !ohh merci.. j'aurais vu que pour mon propre. Vous m'avez aidé à vraiment beaucoup!
OriginalL'auteur Vincent Malgrat
OriginalL'auteur Raj Sharma