Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-01002:C++ aus der Sequenz abrufen

Ihr Abruf schlägt fehl, weil das Öffnen, Deklarieren und Vorbereiten vor diesem Punkt fehlgeschlagen ist, Sie jedoch nicht nach Fehlern von diesen gesucht haben. Wenn Sie dies tun, erhalten Sie einen ORA-00911: invalid character Fehler, deswegen:

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

Die Anweisung, die erstellt wird, ist

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

Aber dann tun Sie:

exec sql PREPARE S1 FROM :sql_statement;

Wie bei dynamischen SQL- und JDBC-Aufrufen kann diese Vorbereitung nur eine einzige Anweisung annehmen. Das Semikolon am Ende Ihres konstruierten Strings ist ein Anweisungstrenner, der in diesem Zusammenhang keine Bedeutung hat und für den Parser ungültig ist.

Entfernen Sie einfach das Semikolon:

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

und fügen Sie nach jedem exec sql eine Fehlerprüfung hinzu .