Java + sqlplus

Hi

ich versuche mittels einer Java Klasse die Ausführungspläne einer Oracle Datenbanken auszugeben, leider hab ich bis jetzt keinen Erfolg, die Ausführungspläne konnte ich mit dem Befehl EXPLAIN PLAIN FOR SELECT * FROM STUDENT; innerhalb der sql commando ausgeben, aber wie kann ich das in meiner java klasse machen?
Meine Applikation ist mit der Datenbank mit dem JDBC verbunden und ich konnte die Zeilen von der Tabelle STUDENT, die ich in der DB angelegt habe, auch ausgeben.

GIbt es in Java oder in den Oracle Bibliotheken irgendwelche Klasse bzw. Methoden, wo man plan_table ausgibt?

Danke

Hallo.

Hi

ich versuche mittels einer Java Klasse die Ausführungspläne
einer Oracle Datenbanken auszugeben, leider hab ich bis jetzt

…welche Oracle DB ? Aktuell ist 10g

keinen Erfolg, die Ausführungspläne konnte ich mit dem Befehl
EXPLAIN PLAIN FOR SELECT * FROM STUDENT; innerhalb der sql
commando ausgeben, aber wie kann ich das in meiner java klasse
machen?

Eigentlich genauso, nur in den Code eingebettet. Siehe auch http://www.galileocomputing.de/openbook/javainsel5/j… und folgende

Meine Applikation ist mit der Datenbank mit dem JDBC verbunden
und ich konnte die Zeilen von der Tabelle STUDENT, die ich in
der DB angelegt habe, auch ausgeben.

GIbt es in Java oder in den Oracle Bibliotheken irgendwelche
Klasse bzw. Methoden, wo man plan_table ausgibt?

Das sieht evtl. gut aus (Achtung, kommerzielle Buchwerbung): http://www.edv-buchversand.de/oracle/productinfo.php…
http://www.myeclipse-training.de/info_java_hibernate…
ISBN 3898642283 Buch anschauen

Danke

HTH
mfg M.L.

Hi Markus,

danke vorllem für deine Antwort,

ich benutze oracle 10g XE, und jdeveloper 10 auch…

zurück zu meinem Problem,

in meinem sql kommando wenn ich „explain plan for select * from student“ eingebe, da krige ich denn die ausgabe „explain plan ausgeführt“

da ist die Klasse :

mport java.sql.*;
import java.sql.SQLException;
import oracle.jdbc.*;
import oracle.jdbc.driver.*;
import oracle.jdbc.driver.OracleDriver;

public class HRUpdate
{

Connection conn;
Statement stmt;
PreparedStatement pstmt;

public HRUpdate()
{
}

public void initialize() throws Exception
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection(„jdbc:oracle:thin:@localhost:1521:XE“,„username“,„password“);
conn.setAutoCommit(false);

stmt = conn.createStatement();

ResultSet result = stmt.executeQuery(„explain plan for select * from student“);

while(result.next())
{

// System.out.print(result.getInt(1));
System.out.print(result.getString(2));
// System.out.print(result.getString(3));
// System.out.println(result.getDate(4));
}
System.out.println(„i am connected“);

}

public static void main(String[] args) throws Exception
{
HRUpdate update = new HRUpdate();
update.initialize();
}

}

Da krige ich die folgende Fehlermeldung:
java.sql.SQLException: ORA-01002: FETCH auf ungültigen oder geschlossenen Cursor.

ich weiss, dass ich mit result.getString(2) auf der zweiten spalte zugreife, da aber die Ausgabe nur eine Satz ist in diesem Fall (explain plan ausgeführt) soll man nicht mit result.getString(2) zugreifen sondern mit was anders denk ich oder?

ich habe auch den verdacht, dass irgendwas mit dem Query nciht funktioniert obwohl mit der gleichen query im sql Kommando, das Ding tut, hmmmmm?

was denkst du?

und danke nochmal

Hallo,

zuerst schickst du das explain plan an die DB.

stmt.execute(„EXPLAIN PLAN FOR SELECT * FROM tab“);

Explain Plan füllt ja schließlich nur die Plan_table und erzeugt kein Resultset. Deshalb die Fehlermeldung.
danach schaust Du dir das Ergebnis an:
stmt.executeQuery(„SELECT * FROM plan_table“)

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]