2010-02-01 5 views
1

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 || ' '; 
+1

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

+0

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

Répondre

2

L'ORA-03113: fin de -file sur l'erreur de canal de communication est une erreur générique. L'erreur ORA-03113 lors de la connexion suggère que la connexion a été établie, mais perdue plus tard, comme un délai d'attente.

Il y a plusieurs causes possibles pour l'erreur ORA-03113.

L'ORA-3113 pourrait être signalé pour ces scénarios:

  • machine écrasé
  • processus serveur a été tué au niveau O/S
  • problèmes réseau
  • erreurs internes Oracle/avorte sur le serveur
  • Le client gère incorrectement plusieurs connexions
  • etc .. beaucoup de causes possibles

Action: Il y avait une communication erreur qui nécessite une enquête plus approfondie . Tout d'abord, vérifiez les problèmes réseau et passez en revue l'installation SQL * Net . Recherchez également dans le fichier alert.log les erreurs éventuelles. Enfin, testez pour voir si le processus serveur est mort et si un fichier de trace a été généré à l'échec .

source: ora-code.com