7
votes

Utilisation du curseur REF dans le développeur Oracle SQL

J'utilise le développeur Oracle SQL, mais je dispose d'un problème de voir des résultats d'un package qui renvoie un curseur REF. Vous trouverez ci-dessous la définition du package: xxx

Je suppose que la question est possible et si oui, que dois-je faire. J'utilise le développeur Oracle SQL 1.5.5. Merci.

wade

Voici le code que j'ai appelé mon colis (généré par TOAD): xxx

i obtenir L'erreur:

ora-06502: PL / SQL: Erreur numérique ou de valeur

J'espère que cela l'effache un peu plus.


4 commentaires

Tout ce que je vois, c'est le SPC - Où est le corps?


Le problème que j'ai d'avoir est que lorsque j'essaie de lire le curseur Ref, je reçois des erreurs. J'ai placé le SPC juste pour montrer ce que ma référencée a ressemblait à mon réfé et j'espère que quelqu'un peut me montrer le code PL / SQL à exécuter dans le développeur SQL pour la produire.


@ Wade73: Quel est le numéro de ligne associé à l'erreur? Pour ce que vous avez fourni, je pense que cela a à voir avec la population du rec_type.accru_cd dans la procédure SP ...


Voici l'erreur: ORA-06502: PL / SQL: Erreur numérique ou valeur ORA-06512: à la ligne 16


6 Réponses :


0
votes

Il suffit de faire une boucle qui itière à travers le curseur REF renvoyé. Vous pouvez produire à la console à l'aide de dbms_output.put_line () et en choisissant des champs spécifiques à afficher.


1 commentaires

J'ai fait une modification ci-dessus, car cela ne semble pas fonctionner.



1
votes

La seule valeur explicite que je vois dans le programme généré est xxx

essayer une conversion explicite ( to_date ('31 -aug-2009 ',' dd-mon- Yyyy ') à la place, peut-être que cela se débarrasse du problème.

Si cela ne vous aide pas, pouvez-vous voir si votre erreur est générée dans le code SP ou dans le code YOR? Si vous le pouvez 'T figurez cela directement, définissez un SP du code que vous avez, définissez un point d'arrêt et entrez dans le code pour voir où vient l'erreur.


0 commentaires

0
votes

Il n'y a aucun moyen de dire sans voir quelle est la requête du curseur. Jetez un coup d'œil à la déclaration de sélection que vous utilisez dans la procédure SP. L'une des colonnes que vous sélectionnez dans un champ numérique dans REC_TYPE renvoie des données de caractère, qui ne peuvent pas être converties en un numéro.

Au lieu d'essayer de déterminer comment sortir le curseur, prenez l'instruction SELECT à partir de SP et de l'exécuter autonome. Regardez les résultats que vous obtenez. Vous allez chercher des valeurs non chiffrées revenant dans l'un des champs où vous vous attendez à un numéro.


0 commentaires

13
votes

Vous pouvez facilement imprimer les résultats de sortie d'un ref_cursor dans le développeur SQL pour voir la valeur de retour ..

Voici un exemple de fonction Refcursor: P>

variable v_ref_cursor refcursor;
exec :v_ref_cursor := get_employees(); 
print :v_ref_cursor


0 commentaires

1
votes

Dans votre commentaire, vous DYPEHERE est l'erreur:

ora-06502: pl / sql: numérique ou valeur Erreur ORA-06512: à la ligne 16

Peu importe que cela puisse apparaître comme parfois, les erreurs PL / SQL ne sont pas générées au hasard. Cette erreur indique une conversion de type de données imparfaite qui se produit à la ligne 16 de votre procédure. Sans voir toute votre procédure, il n'est pas possible pour nous de localiser la ligne 16. Heureusement, l'éditeur de code dans SQL Developer mettra des numéros de ligne dans la gouttière; Si vous ne voyez pas de numéros de ligne, vous devrez basculer une préférence.

Ce que vous devez rechercher est une chaîne étant mise à disposition d'une variable de numéro ou de date, ou un nombre étant distribué à un champ de date. Cela peut être signalé par un nombre explicite to_number () ou TO_Date, auquel cas vous devez vérifier le masque de format et / ou le contenu de données. Alternativement, vous pouvez avoir une fonte implicite. Dans ce cas, vous devrez peut-être le rendre explicite, avec le masque de format approprié. Bien sûr, il pourrait s'agir d'une conversion accidentelle et indésirable car la projection de l'instruction SELECT ne correspond pas à la signature de l'enregistrement de curseur REF. C'est facile à réparer.


0 commentaires

8
votes

Si vous avez une procédure qui nécessite un Refcurseur dans la signature de la proc, vous pouvez le faire:

var rc refcursor;
execute <package>.my_proc(:rc);
print rc;


0 commentaires