Announcement

Collapse
No announcement yet.

java.sql.SQLException: ORA-00933: SQL command not properly ended

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • java.sql.SQLException: ORA-00933: SQL command not properly ended

    Hallo,
    ich versuche nun schon seit Stunden herauszufinden weshalb diese Exception auftritt. Bzw. wieso sie auftritt oder was sie bedeutet weiß ich, allerdings nicht was in meinem SQL-Statement falsch sein soll... Hier das Statement:

    Code:
    UPDATE processstep 
    SET status = 8 WHERE psid =  332079
    UPDATE processinstance 
    SET status = 7 
    WHERE  pinid = (SELECT processinstance.pinid FROM processinstance, processstep WHERE processstep.psid = 332079 AND processstep.pinid = processinstance.pinid)
    UPDATE process 
    SET status = 8 WHERE  pid = 3860

  • #2
    Und wie sieht der Javacode aus?
    Christian

    Comment


    • #3
      Mehrere Statements werden idR durch ein Semicolon getrennt. Die sehe ich hier nicht.
      Mehrere Statements hintereinander sind je nach Client/Ausführungstechnik nicht möglich, sowas geht nur per Script. keine Ahnung wie das in Java ist.
      Query- und Commandobjekte so wie ich sie kenne dürfen nur ein Statement enthalten, dann aber ohne Semicolon.

      Was ziemlich sicher geht ist ein anonymer Block:
      Begin
      DeinStatement1;
      DeinStatement2;
      ..
      DeinStatementN;
      End;

      Ein anonymous block ist im Prinzip eine PLSQL Prozedur ohne Namen. Ist eigentlich mächtiger als ein Script, aber etwas größenbeschränkt.
      Gruß, defo

      Comment


      • #4
        Der Java Code ist folgender:
        Code:
        public static void fus(String db, String psid, String pid){
        	PreparedStatement pstmt;
        	Connection con = datenbankZugriff.dbverbindung.getConnection(db);
        	System.out.println("PSID " + psid);
        	System.out.println("PID " + pid);
        	System.out.println("DB " + db);
        	System.out.println("HIER VOR DEM TRY!");
        	
        	try {
        		pstmt = con.prepareStatement("UPDATE processstep SET status = ? WHERE psid = ? UPDATE processinstance " +
        				"SET status = ? WHERE pinid = (SELECT processinstance.pinid FROM processinstance, processstep " +
        				"WHERE processstep.psid = ? AND processstep.pinid = processinstance.pinid) UPDATE process " +
        				"SET status = ? WHERE pid = ?");
        		
        		pstmt.setInt(1, 8);
        		pstmt.setString(2, psid);
        		pstmt.setInt(3, 7);
        		pstmt.setString(4, psid);
        		pstmt.setInt(5, 8);
        		pstmt.setString(6, pid);
        		pstmt.executeQuery();
        		System.out.println("updated");
        		con.close();
        	} catch (SQLException e) {
        		// TODO Auto-generated catch block
        		e.printStackTrace();
        	}
        }
        
        }
        Mit anonymen Block wäre das dann dementsprechend:

        Code:
        	try {
        		pstmt = con.prepareStatement("BEGIN " +
        				"UPDATE processstep SET status = ? WHERE psid = ?; " +
        				"UPDATE processinstance SET status = ? WHERE pinid = (SELECT processinstance.pinid FROM processinstance, processstep WHERE processstep.psid = ? AND processstep.pinid = processinstance.pinid); " +
        				"UPDATE process SET status = ? WHERE pid = ?;" +
        				"END;");
        Ist das so richtig oder kann ich das nicht in ein PreparedStatement schmeißen?

        EDIT: Die Semicolons hatte ich schon diverse mal entfernt und wieder hinzugefügt, an denen liegt es nicht.

        Comment


        • #5
          Originally posted by Br4ve View Post

          Ist das so richtig oder kann ich das nicht in ein PreparedStatement schmeißen?

          EDIT: Die Semicolons hatte ich schon diverse mal entfernt und wieder hinzugefügt, an denen liegt es nicht.
          Wie gesagt, keine Ahnung, wie das in Java ist. Ohne Begin / End helfen die Semicolon allein eher nicht.
          Mit Begin / End und Semicolon ist es ein anonymer Block und sollte laufen..
          Gruß, defo

          Comment


          • #6
            Klasse, funktioniert. Danke!

            Comment

            Working...
            X