none
ExecuteReaderAsync mit define Anweisung RRS feed

  • Frage

  • Hallo!

    Vielleicht kann mir hier ja jemand helfen / hat Erfahrung ... ?

    Ich habe einen (Oracle.ManagedDataAccess.ClientCommand mit dem ich über die ExcecuteReader-Methode Daten abrufe:

    var cmd = new Oracle.ManagedDataAccess.Client.OracleCommand(zSQL, conn);            // SQL-Command initalisieren
    var reader = await cmd.ExecuteReaderAsync(CommandBehavior.CloseConnection, ct);     // SQL-DataReader initalisieren
    

    Für einfache SQL-Statement's funktioniert dies auch zuverlässig.

    Nun möchte ich jedoch ein SQL-Statement, dass eine define-Anweisung enthält ausführen:

    define zTyp = 'CHAR';
    
    SELECT TABLE_NAME
    FROM all_tab_columns
    WHERE data_type IN ('&zTyp');

    dies wird mir mit dem Oracle-Fehler ORA-00900: Ungültige SQL-Anweisung quittiert.

    Wenn ich die gleiche SQL-Anweisung im Oracle SQL-Developer ausführe, läuft sie problemlos durch!

    Muss ich die SQL-Anweisung irgendwie "bearbeiten/formatieren" damit sie der Oracle Client/Command ausführen kann?

    Dienstag, 17. April 2018 08:50

Antworten

  • Hallo perlfred,

    Du kannst die Execute-Anweisung in IDEs nicht verwenden - sie ist ein SQL-Plus-Befehl. Dieses Thema wird im diesen Thread beschrieben:
    ORA-00900: invalid SQL statement- when run a procedure in oracle 10g
    Um die Prozedur in einer anderen Anwendung auszuführen, kannst Du den Aufruf einfach in einen PL/SQL-Block umschließen. Weitere Informationen findest Du im diesen Link:
    ORA-00900 Invalid Statement [duplicate]

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert perlfred Mittwoch, 18. April 2018 12:47
    Mittwoch, 18. April 2018 07:46
    Moderator

Alle Antworten

  • Hallo perlfred,

    Du kannst die Execute-Anweisung in IDEs nicht verwenden - sie ist ein SQL-Plus-Befehl. Dieses Thema wird im diesen Thread beschrieben:
    ORA-00900: invalid SQL statement- when run a procedure in oracle 10g
    Um die Prozedur in einer anderen Anwendung auszuführen, kannst Du den Aufruf einfach in einen PL/SQL-Block umschließen. Weitere Informationen findest Du im diesen Link:
    ORA-00900 Invalid Statement [duplicate]

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert perlfred Mittwoch, 18. April 2018 12:47
    Mittwoch, 18. April 2018 07:46
    Moderator
  • Hallo Ivan!

    Ich verwende zwar die define-Anweisung, aber die Ursache scheint wohl die gleiche zu sein, es sind SQL-Plus-Befehle.

    Diese (und auch meine) SQL-Anweisung einfach in einen begin end - Block einzuschließen, löst das Problem nicht so einfach. Die SQL-"Anweisung" wird zwar dann erst einmal vom Oracle-Server interpretiert, aber er betrachtet diese "Anweisung" dann als PL-SQL-Block, in dem Variablen mit DECLARE definiert werden müssen, Spalten Variablen zugeordnet werden müssen usw..

    Ein "umformen" der Anweisung in einen lauffähigen PL-SQL-Block ist zwar möglich, geht aber an meinem gewünschten Ziel vorbei.

    Trotzdem vielen Dank! für die grundlegende Erkenntnis (SQL-Plus-Befehl)!

    Fred.





    • Bearbeitet perlfred Mittwoch, 18. April 2018 13:10
    Mittwoch, 18. April 2018 13:05