J'ai reçu un accès en lecture à une base de données Oracle pour obtenir des données pour ma propre base de données. Le DBA m'a donné une procédure stockée qu'il m'assure que c'est tout ce dont j'ai besoin, mais je n'ai pas encore pu l'exécuter depuis Ruby.Comment exécuter une procédure stockée Oracle dans Ruby
J'ai la gemme ruby-oci8 et le client instantané Oracle.
Voici ce que j'ai géré jusqu'à maintenant.
require 'oci8'
conn = OCI8.new('user','pass','//remoteora1:1521/xxxx')
=> #<OCI8::RWHRUBY>
cursor = conn.parse("call REPOSITORY.GET_PMI_ADT('722833', 'W', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null)")
=> #<OCI8::Cursor:0x56f4d50>
Et c'est là que je suis bloqué. J'ai cet objet OCI8 :: Cursor mais je ne sais pas quoi en faire. Cela devrait me renvoyer tout un tas de résultats (où les valeurs nulles sont dans la requête) mais je n'ai rien. Exécuter cursor.exec avec et sans paramètres (je ne suis pas sûr que les paramètres dont j'ai besoin si) me donne des erreurs.
cursor.exec donne
OCIError: ORA-06553: PLS-:
ORA-06553: PLS-:
ORA-06553: PLS-:
ORA-06553: PLS-306: wrong number or typ
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
ORA-06553: PLS-306: wrong number or type of arguments in call to 'GET_PMI_ADT'
etc ...
cursor.fetch donne
OCIError: ORA-24338: statement handle not executed
Est-ce que quelqu'un a des idées ici? Je suis bien au dessus de ma tête.
Une mise à jour ici pour tous ceux qui regardent encore. Si je change la procédure stockée à
BEGIN REPOSITORY.GET_PMI_ADT('722833', 'W', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); END;
Je reçois maintenant l'erreur;
OCIERROR: ORA-06550: line 1, column 45:
PLS-00363: expression ' NULL' cannot be used as an assignment target
Est-ce que cela confirme que la procédure stockée est incorrecte? Y at-il quelque chose d'évident à faire pour le corriger?
Désolé, J'aurais dû inclure cela. Ajouté ci-dessus. – brad
Avez-vous essayé d'exécuter cette ligne de code exacte dans Oracle? Il semble qu'il y ait un problème avec la procédure stockée que vous essayez d'invoquer. – Strelok
Je n'ai pas accès à la base de données Oracle et le DBA m'a assuré qu'il n'y aurait pas de problème avec sa procédure stockée ... J'ai cependant mes soupçons. – brad