Su recuperación está fallando porque la apertura, la declaración y la preparación fallaron antes de ese punto, pero no verificó ningún error de esos. Si lo hiciera, obtendría un ORA-00911: invalid character
error, debido a esto:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");
La declaración que construye es
select supplierNumber, supplierName from supplier where supplierNumber < > 1;
Pero luego lo haces:
exec sql PREPARE S1 FROM :sql_statement;
Al igual que con las llamadas dinámicas de SQL y JDBC, esta preparación solo puede tomar una sola declaración. El punto y coma al final de su cadena construida es un separador de declaraciones que no tiene ningún significado en este contexto, y no es válido en lo que respecta al analizador.
Así que simplemente elimine ese punto y coma:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1");
y agregue una verificación de error después de cada exec sql
.