Twoje pobieranie kończy się niepowodzeniem, ponieważ otwieranie, zadeklarowanie i przygotowanie wszystkich nie powiodło się przed tym punktem, ale nie sprawdziłeś żadnych błędów z nich. Jeśli tak, otrzymasz ORA-00911: invalid character
błąd, z tego powodu:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");
Oświadczenie, które buduje, to
select supplierNumber, supplierName from supplier where supplierNumber < > 1;
Ale wtedy robisz:
exec sql PREPARE S1 FROM :sql_statement;
Podobnie jak w przypadku dynamicznych wywołań SQL i JDBC, to przygotowanie może zająć tylko jedną instrukcję. Średnik na końcu skonstruowanego ciągu jest separatorem instrukcji, który nie ma żadnego znaczenia w tym kontekście i jest niepoprawny, jeśli chodzi o parser.
Więc po prostu usuń ten średnik:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1");
i dodaj sprawdzanie błędów po każdym exec sql
.