Din hentning mislykkes, fordi åbning, erklæring og klargøring mislykkedes før det tidspunkt, men du tjekkede ikke for nogen fejl fra disse. Hvis du gjorde det, ville du få et ORA-00911: invalid character
fejl på grund af dette:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");
Udsagnet, der bygger, er
select supplierNumber, supplierName from supplier where supplierNumber < > 1;
Men så gør du:
exec sql PREPARE S1 FROM :sql_statement;
Som med dynamiske SQL- og JDBC-kald kan denne forberedelse kun tage en enkelt sætning. Semikolonet i slutningen af din konstruerede streng er en sætningsseparator, som ikke har nogen betydning i denne sammenhæng, og den er ugyldig, hvad angår parseren.
Så bare fjern det semikolon:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1");
og tilføj en fejlkontrol efter hver exec sql
.