Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA-01002 :récupération hors séquence C++

Votre extraction échoue car l'ouverture, la déclaration et la préparation ont toutes échoué avant ce point, mais vous n'avez vérifié aucune erreur de celles-ci. Si vous le faisiez, vous obtiendriez un ORA-00911: invalid character erreur, à cause de ceci :

    strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
    strcat((char *)sql_statement.arr,"from supplier ");
    strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");

La déclaration qui se construit est

select supplierNumber, supplierName from supplier where supplierNumber < > 1;

Mais alors vous faites :

exec sql PREPARE S1 FROM :sql_statement;

Comme pour les appels dynamiques SQL et JDBC, cette préparation ne peut prendre qu'une seule instruction. Le point-virgule à la fin de votre chaîne construite est un séparateur d'instructions qui n'a aucune signification dans ce contexte, et il n'est pas valide en ce qui concerne l'analyseur.

Supprimez simplement ce point-virgule :

    strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
    strcat((char *)sql_statement.arr,"from supplier ");
    strcat((char *)sql_statement.arr,"where supplierNumber < > 1");

et ajouter une vérification d'erreur après chaque exec sql .