Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Oracle Fehlermeldung mit FROM ORA-00923
Bratwurstexe
myCSharp.de - Member

Avatar #DjnCTOgpyUQc0tznMTdl.png


Dabei seit:
Beiträge: 16

Themenstarter:

Oracle Fehlermeldung mit FROM ORA-00923

beantworten | zitieren | melden

Hallo zusammen,

ich habe bei einer Abfrage welche ich gerne in mein C# Programm einbinden möchte eine Fehlermeldung.
Könntet ihr euch einmal meine Eingabe ansehen? Habe ich etwas Übersehen? Alle anderen Abfragen funktionieren in meinem Programm.

Ich bekomme die Fehlermeldung Oracle.ManagedDataAccess.Client.OracleException: "ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden"

Das kann ich mir leider nicht erklären, da ich genau diese Abfrage auf der Datenbank ohne Probleme ausführen kann.

Ich danke euch!
Achso und schonmal Frohe Weihnachten.


private void button5_Click(object sender, EventArgs e)
        {
            con.Open();
            OracleCommand cmd = new OracleCommand();


            cmd.CommandText =   "select r.lrou_groupident AS Batchbezeichnung,lum.lwds_ident AS Bereich," +
                "round(sum(ll.lcsl_qtyhost / lum.lpu_factor))AS Offene_GVEs," +
                "to_char(sysdate, 'HH24:MI') AS Erstellzeit" +
                "from lcos_ship_head lh,lcos_ship_line ll,product l,lproduct_um lum,lroute r"+
                "where lh.lcsh_ref = ll.lcsh_ref" +
                "and ll.lprod_ref = l.lprod_ref" +
                "and l.lprod_ref = lum.lprod_ref" +
                "and r.lrou_ref = ll.lrou_ref" +
                "and lum.lpu_zzsalesunit = 1" +
                "and lum.lwds_ident in ('DPS', 'MPS', 'MAN', 'WAN')" +
                "and trunc(r.lrou_date) between(sysdate - 5) and (sysdate)" +
                "and ll.lcsl_state > 60" +
                "group by r.lrou_groupident,lum.lwds_ident";

            cmd.Connection = con;
            OracleDataAdapter adapter = new OracleDataAdapter();
            adapter.SelectCommand = cmd;
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);

            dataGridView1.AutoResizeColumns();
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

            dataGridView1.DataSource = dataset.Tables[0];

            con.Close();
        }


In Oracle sieht es wie folgt aus und funktioniert wie erwünscht.


select r.lrou_groupident AS Batchbezeichnung,lum.lwds_ident AS Bereich,
round(sum(ll.lcsl_qtyhost/lum.lpu_factor))AS Offene_GVEs,

to_char(sysdate,'HH24:MI') AS Erstellzeit
                                        
from lcos_ship_head lh,
lcos_ship_line ll,
lproduct l,
lproduct_um lum,
lroute r
                                       
where lh.lcsh_ref = ll.lcsh_ref
and ll.lprod_ref = l.lprod_ref
and l.lprod_ref = lum.lprod_ref
and r.lrou_ref = ll.lrou_ref
and lum.LPU_UM = ll.LCSL_UM
and lum.lpu_zzsalesunit = 1
and lum.lwds_ident in ('DPS','MPS','MAN','WAN')
and trunc(r.lrou_date) between (sysdate -5) and (sysdate)
and ll.lcsl_state > 60  
                                
group by r.lrou_groupident,lum.lwds_ident
Attachments
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 218

beantworten | zitieren | melden

Schau dir im Debugger mal den Inhalt deines cmd.CommandText an. Fällt dir dann bestimmt schnell auf

Tipp: Leerzeichen
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dannoe am .
private Nachricht | Beiträge des Benutzers
Bratwurstexe
myCSharp.de - Member

Avatar #DjnCTOgpyUQc0tznMTdl.png


Dabei seit:
Beiträge: 16

Themenstarter:

beantworten | zitieren | melden

Zitat von dannoe
Schau dir im Debugger mal den Inhalt deines cmd.CommandText an. Fällt dir dann bestimmt schnell auf

Tipp: Leerzeichen

Hey Danone,

Bin ich Blind? Ich komme beim besten Willen nicht drauf.
Ich habe die Leerzeichen überprüft aber konnte nichts finden um ehrlich zu sein.



private void button5_Click(object sender, EventArgs e)
        {

            
            con.Open();
            OracleCommand cmd = new OracleCommand();


            cmd.CommandText = 
"select r.lrou_groupident AS Batchbezeichnung,lum.lwds_ident AS Bereich,"
+ "round(sum(ll.lcsl_qtyhost/lum.lpu_factor)) AS Offene_GVEs,"
+ "to_char(sysdate,'HH24:MI') AS Erstellzeit"
+ "From lcos_ship_head lh,lcos_ship_line ll,product l,lproduct_um lum,lroute r"
+ "where lh.lcsh_ref = ll.lcsh_ref"
+ "and ll.lprod_ref = l.lprod_ref"
+ "and l.lprod_ref = lum.lprod_ref"
+ "and r.lrou_ref = ll.lrou_ref"
+ "and lum.lpu_zzsalesunit = 1"
+ "and lum.lwds_ident in ('DPS', 'MPS', 'MAN', 'WAN')"
+ "and trunc(r.lrou_date) between(sysdate - 5) and (sysdate)"
+ "and ll.lcsl_state > 60"
+ "group by r.lrou_groupident,lum.lwds_ident";

            cmd.Connection = con;
            OracleDataAdapter adapter = new OracleDataAdapter();
            adapter.SelectCommand = cmd;
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);

            dataGridView1.AutoResizeColumns();
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

            dataGridView1.DataSource = dataset.Tables[0];

            con.Close(); 
        }
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Bratwurstexe am .
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 218

beantworten | zitieren | melden

Also wenn du z.B. diese zwei Zeilen konkatenierst:
Zitat
+ "to_char(sysdate,'HH24:MI') AS Erstellzeit"
+ "From lcos_ship_head lh,lcos_ship_line ll,product l,lproduct_um lum,lroute r"

Dann kommt doch folgendes raus oder:
Zitat
to_char(sysdate,'HH24:MI') AS ErstellzeitFrom lcos_ship_head lh,lcos_ship_line ll,product l,lproduct_um lum,lroute r

Und "ErstellzeitFrom" ist glaube ich nicht gewollt oder?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dannoe am .
private Nachricht | Beiträge des Benutzers
Bratwurstexe
myCSharp.de - Member

Avatar #DjnCTOgpyUQc0tznMTdl.png


Dabei seit:
Beiträge: 16

Themenstarter:

beantworten | zitieren | melden

Ohje. Okay darauf hätte ich echt drauf kommen können. Ist mir vorher nicht passiert da ich den CommandText in anderen abfragen in einer Zeile geschrieben hatte. Dankeschön

Nun habe ich aber die Fehlermeldung
Fehler
Oracle.ManagedDataAccess.Client.OracleException: "ORA-00933: SQL-Befehl wurde nicht korrekt beendet"
Das kann ich hier nicht ganz nachvollziehen



private void button5_Click(object sender, EventArgs e)
        {

            
            con.Open();
            OracleCommand cmd = new OracleCommand();


            cmd.CommandText = "select r.lrou_groupident AS Batchbezeichnung,lum.lwds_ident AS Bereich,"
                              + "round(sum(ll.lcsl_qtyhost/lum.lpu_factor)) AS Offene_GVEs,"
                              + "to_char(sysdate,'HH24:MI') AS Erstellzeit from lcos_ship_head lh,lcos_ship_line ll,product l,lproduct_um lum,lroute r"
                              + "where lh.lcsh_ref = ll.lcsh_ref"
                              + "and ll.lprod_ref = l.lprod_ref"
                              + "and l.lprod_ref = lum.lprod_ref"
                              + "and r.lrou_ref = ll.lrou_ref"
                              + "and lum.lpu_zzsalesunit = 1"
                              + "and lum.lwds_ident in ('DPS', 'MPS', 'MAN', 'WAN')"
                              + "and trunc(r.lrou_date) between(sysdate - 5) and (sysdate)"
                              + "and ll.lcsl_state > 60"
                              + "group by r.lrou_groupident,lum.lwds_ident";

            cmd.Connection = con;
            OracleDataAdapter adapter = new OracleDataAdapter();
            adapter.SelectCommand = cmd;
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);

            dataGridView1.AutoResizeColumns();
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

            dataGridView1.DataSource = dataset.Tables[0];

            con.Close(); 
        }
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.358

beantworten | zitieren | melden

Und das gleiche auch bei den folgenden "Zeilen" (vor where, and und group by)...
Mach am besten jeweils ein Leerzeichen vor die Schlüsselwörter".
private Nachricht | Beiträge des Benutzers
Bratwurstexe
myCSharp.de - Member

Avatar #DjnCTOgpyUQc0tznMTdl.png


Dabei seit:
Beiträge: 16

Themenstarter:

beantworten | zitieren | melden

Zitat von Th69
Und das gleiche auch bei den folgenden "Zeilen" (vor where, and und group by)...
Mach am besten jeweils ein Leerzeichen vor die Schlüsselwörter".

Guten Abend Th69,

Danke für deine Antwort.

Habe ich gemacht.
Das ist mir schon fast unangenehm aber jetzt bekomme ich eine neue Fehlermeldung. :\
Oracle.ManagedDataAccess.Client.OracleException: "ORA-00942: Tabelle oder View nicht vorhanden"
Aber warum sagt VS dass die Tabelle nicht exestiert? Ich habe meinen ConnectionString auf genau diese Abfrage/Benutzer abgestimmt.




 private void button5_Click(object sender, EventArgs e)
        {

            
            con.Open();
            OracleCommand cmd = new OracleCommand();


            cmd.CommandText = "select r.lrou_groupident AS Batchbezeichnung,lum.lwds_ident AS Bereich,round(sum(ll.lcsl_qtyhost/lum.lpu_factor)) AS Offene_GVEs,"
                              + " to_char(sysdate,'HH24:MI') AS Erstellzeit from lcos_ship_head lh,lcos_ship_line ll,product l,lproduct_um lum,lroute r"
                              + " where lh.lcsh_ref = ll.lcsh_ref"
                              + " and ll.lprod_ref = l.lprod_ref"
                              + " and l.lprod_ref = lum.lprod_ref"
                              + " and r.lrou_ref = ll.lrou_ref"
                              + " and lum.lpu_zzsalesunit = 1"
                              + " and lum.lwds_ident in ('DPS', 'MPS', 'MAN', 'WAN')"
                              + " and trunc(r.lrou_date) between(sysdate - 5) and (sysdate)"
                              + " and ll.lcsl_state > 60"
                              + " group by r.lrou_groupident,lum.lwds_ident";

            cmd.Connection = con;
            OracleDataAdapter adapter = new OracleDataAdapter();
            adapter.SelectCommand = cmd;
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);

            dataGridView1.AutoResizeColumns();
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

            dataGridView1.DataSource = dataset.Tables[0];

            con.Close(); 
        }
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Bratwurstexe am .
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 218

beantworten | zitieren | melden

In deinem Query in C# schreibst du "product l".
In deinem Beispiel Query, den du direkt ausgeführt hast, schreibst du "lproduct l".

Liegt hier der Fehler? Falls ja, solltest du langsam mal Feierabend machen
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dannoe am .
private Nachricht | Beiträge des Benutzers
Bratwurstexe
myCSharp.de - Member

Avatar #DjnCTOgpyUQc0tznMTdl.png


Dabei seit:
Beiträge: 16

Themenstarter:

beantworten | zitieren | melden

Hey Danone,

Wo war nur mein Kopf. Im Endeffekt lag es tatsächlich nur an den Leerzeichen.
Meine Abfrage funktioniert nun endlich.

Ich denke ich werde mal nach hause gehen. Reicht für Heute
Wünsche noch einen schönen Abend. Vielen Dank nochmal.

Moderationshinweis von Abt (22.12.2021 - 10:22)

Bitte keine Full Quotes

private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.852

beantworten | zitieren | melden

Hinweis: ist vielleicht auch nicht die beste Idee, wie Du Deinen Quellcode organisierst und überall Verantwortlichkeiten mischst :-)
[Artikel] Drei-Schichten-Architektur

PS: bitte beachte [Hinweis] Wie poste ich richtig?
zB ist das ErrorTag einfach nur "error" und nicht "b" in eckigen Klammern - so kann das Forum technisch auch besser mit Deinen Inhalten umgehen und die Leute können Deinen Beitrag besser lesen.

Oder auch sinnvoll zitieren. Macht kein Sinn, dass Du die Beiträge anderer in der kompletten Länge zitierst.
Hilft niemanden, macht alles unübersichtlicher ;-)
private Nachricht | Beiträge des Benutzers
Bratwurstexe
myCSharp.de - Member

Avatar #DjnCTOgpyUQc0tznMTdl.png


Dabei seit:
Beiträge: 16

Themenstarter:

Danke

beantworten | zitieren | melden

Hallo Abt,

Vielen Dank für deinen Post. Ich habe mir das nochmal genau durchgelesen und werde das künftig beherzigen.

Ich wünsche dir/euch einen guten Rutsch ins neue Jahr.
private Nachricht | Beiträge des Benutzers