Il tuo recupero non riesce perché l'apertura, la dichiarazione e la preparazione sono fallite prima di quel punto, ma non hai verificato la presenza di errori da quelli. Se lo facessi, otterresti un ORA-00911: invalid character
errore, per questo motivo:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");
L'istruzione che costruisce è
select supplierNumber, supplierName from supplier where supplierNumber < > 1;
Ma poi lo fai:
exec sql PREPARE S1 FROM :sql_statement;
Come con le chiamate dinamiche SQL e JDBC, questa preparazione può richiedere solo una singola istruzione. Il punto e virgola alla fine della stringa costruita è un separatore di istruzioni che non ha alcun significato in questo contesto e non è valido per quanto riguarda il parser.
Quindi rimuovi quel punto e virgola:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1");
e aggiungi un controllo degli errori dopo ogni exec sql
.