Je fetch mislukt omdat het openen, declareren en voorbereiden allemaal voor dat punt is mislukt, maar je hebt niet gecontroleerd op eventuele fouten. Als je dat deed, kreeg je een ORA-00911: invalid character
fout, hierdoor:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");
De verklaring die wordt opgebouwd is
select supplierNumber, supplierName from supplier where supplierNumber < > 1;
Maar dan doe je:
exec sql PREPARE S1 FROM :sql_statement;
Net als bij dynamische SQL- en JDBC-aanroepen, kan deze voorbereiding slechts één instructie bevatten. De puntkomma aan het einde van je geconstrueerde tekenreeks is een scheidingsteken voor instructies dat in deze context geen betekenis heeft, en het is ongeldig voor zover het de parser betreft.
Dus verwijder gewoon die puntkomma:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1");
en voeg een foutcontrole toe na elke exec sql
.