Sua busca está falhando porque a abertura, declaração e preparação falharam antes desse ponto, mas você não verificou nenhum erro deles. Se você fizer isso, você obterá um
ORA-00911: invalid character
erro, por causa disso: strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");
A afirmação que constrói é
select supplierNumber, supplierName from supplier where supplierNumber < > 1;
Mas então você faz:
exec sql PREPARE S1 FROM :sql_statement;
Assim como as chamadas dinâmicas de SQL e JDBC, essa preparação pode receber apenas uma única instrução. O ponto e vírgula no final de sua string construída é um separador de instrução que não tem nenhum significado neste contexto e é inválido no que diz respeito ao analisador.
Então, basta remover esse ponto e vírgula:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1");
e adicione uma verificação de erro após cada
exec sql
.