sql >> Base de Datos >  >> RDS >> Oracle

ORA-01002:recuperar fuera de secuencia C++

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 .