J'ai un curseur dans une fonction ORACLE que je génère dynamiquement en utilisant les arguments de la fonction.Problème de liaison avec l'instruction OPEN-FOR-USING
Je définit le texte du curseur et, dans certains cas, je la phrase suivante:
sql_stmt := sql_stmt || 'AND MOD (LOG_ID, :logsetmax) = :logset ';
j'ouvre le curseur et passer des arguments en utilisant l'instruction ORACLE OUVERT-FOR-UTILISATION (par exemple avec: logsetmax mis à 3 et: logset mis à 0). Quand mon programme inclut la contrainte au-dessus de mon programme se bloque et j'obtiens des erreurs ORA-03113 et ORA-03114.
Est-ce que ORACLE m'empêche de lier l'argument cursor de: logsetmax (passé avec USING) dans la fonction MOD de ma déclaration de curseur et de provoquer ce comportement imprévisible?
Je soupçonne que mon erreur est due à une division par zéro par un argument non lié qui provoque l'expiration de la connexion ORACLE?
Toutes les suggestions seraient grandement appréciées.
MISE À JOUR
En tant que solution pratique, je révisais mon SQL pour supprimer ces contraintes de la liaison du curseur et les codé en dur dans le SQL comme suit:
sql_stmt := sql_stmt || 'AND MOD (LOG_ID, ' || p_logsetmax || ') = ' || p_logset || ' ';
Avez-vous essayé simplement d'exécuter la requête sans curseurs et dynamique SQL manuellement.Cause-t-il le même type de problème, – Calmar
Si je code les valeurs dans la contrainte de problème, cela fonctionne correctement, le problème semble être avec les valeurs de liaison. – David