Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-01002:recupero della sequenza C++

Il tuo recupero non riesce perché l'apertura, la dichiarazione e la preparazione sono fallite prima di quel punto, ma non hai verificato la presenza di errori da quelli. Se lo facessi, otterresti un ORA-00911: invalid character errore, per questo motivo:

    strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
    strcat((char *)sql_statement.arr,"from supplier ");
    strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");

L'istruzione che costruisce è

select supplierNumber, supplierName from supplier where supplierNumber < > 1;

Ma poi lo fai:

exec sql PREPARE S1 FROM :sql_statement;

Come con le chiamate dinamiche SQL e JDBC, questa preparazione può richiedere solo una singola istruzione. Il punto e virgola alla fine della stringa costruita è un separatore di istruzioni che non ha alcun significato in questo contesto e non è valido per quanto riguarda il parser.

Quindi rimuovi quel punto e virgola:

    strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
    strcat((char *)sql_statement.arr,"from supplier ");
    strcat((char *)sql_statement.arr,"where supplierNumber < > 1");

e aggiungi un controllo degli errori dopo ogni exec sql .