Pourquoi ne peut-on pas utiliser un fort ref curseur avec l'Instruction SQL dynamique?
Je suis en train d'utiliser une forte ref cur avec le sql dynamique de tresorerie mais il est donné à une erreur,mais lorsque j'utilise la faiblesse de curseur qu'elle fonctionne,Veuillez expliquer ce qu'est la raison, et s'il vous plaît
me faire parvenir un lien de serveur oracle architecte contenant de la matière sur la façon de la compilation et de l'analyse est effectuée dans le serveur Oracle. C'est l'erreur avec code.
ERROR at line 6:
ORA-06550: line 6, column 7:
PLS-00455: cursor 'EMP_REF_CUR' cannot be used in dynamic SQL OPEN statement
ORA-06550: line 6, column 2:
PL/SQL: Statement ignored
declare
type ref_cur_type IS REF CURSOR RETURN employees%ROWTYPE; --Creating a strong REF cursor,employees is a table
emp_ref_cur ref_cur_type;
emp_rec employees%ROWTYPE;
BEGIN
OPEN emp_ref_cur FOR 'SELECT * FROM employees';
LOOP
FETCH emp_ref_cur INTO emp_rec;
EXIT WHEN emp_ref_cur%NOTFOUND;
END lOOP;
END;
OriginalL'auteur Vineet | 2010-05-06
Vous devez vous connecter pour publier un commentaire.
Ici est une procédure avec un typage fort curseur ref:
Cette déclaration suivante échoue parce que la signature de l'EMP d'enregistrement ne correspond pas à celle de la table DEPT.
Mais si nous changeons la projection de faire correspondre le DÉPARTEMENT de la table, puis nous avons du succès:
Alors, pourquoi ne pouvons-nous pas utiliser un fortement typées ref-curseur avec le SQL dynamique?
Car le compilateur ne peut pas analyser la chaîne dans l'instruction SQL dynamique. Il ne peut donc pas affirmer que les colonnes de la requête à la projection de l'correspondre en nombre et le type de données de la signature du curseur ref. Par conséquent, il ne peut valider le contrat entre le ref variable de curseur et de la requête. Il est encore plus facile de comprendre pourquoi cela ne peut pas être autorisé lorsque l'on considère que l'instruction SQL dynamique pourrait être assemblé à partir d'une requête sur USER_TAB_COLUMNS.
OriginalL'auteur APC
Une autre possibilité est de déclarer et définir un Type d'Enregistrement de l'objet à un conteneur pour les résultats de votre requête. Cela pourrait être utile si la requête est une requête de JOINTURE, de retour de colonnes à partir de plusieurs tables jointes.
REMARQUE: Vous pouvez utiliser la technique décrite ci-dessus sur une dynamique construit instruction de requête SQL, en substituant 'select deptno,ename,job, de pge" avec une variable comme v_sql et mise à jour de cette variable avec l'instruction SQL à l'intérieur du corps de la procédure.
OriginalL'auteur user2001990
Vous n'êtes pas autorisé à ouvrir une fortement typé ref cursor pour un sql dynamique, comme l'oracle de moteur ne peut pas vérifier si la structure du sql dynamique est la mise en correspondance avec celle du curseur ref type de retour.
OriginalL'auteur Ramakant Mishra