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
.