Вашето извличане е неуспешно, защото отварянето, декларирането и подготовката са неуспешни преди тази точка, но не сте проверили за грешки от тях. Ако го направихте, ще получите ORA-00911: invalid character
грешка, поради това:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");
Инструкцията, която изгражда е
select supplierNumber, supplierName from supplier where supplierNumber < > 1;
Но след това правите:
exec sql PREPARE S1 FROM :sql_statement;
Както при динамичните SQL и JDBC извиквания, тази подготовка може да приеме само един оператор. Точката и запетая в края на конструирания от вас низ е разделител на изрази, който няма никакво значение в този контекст и е невалиден, що се отнася до анализатора.
Така че просто премахнете тази точка и запетая:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1");
и добавете проверка за грешки след всеки exec sql
.