PL/SQL Script Durch Java ausführen lassen

forced

Mitglied
Servus

Nach nun 4 Stunden googeln bin ich am verzweifeln - Ich möchte ein PL/SQL Statement / Script von Java ausführen lassen.

Einfach dieses Script in ein statement.executeQuery packen funktioniert leider nicht.

Wie ist es also möglich, entweder ein Script was in einem String "query" gespeichert ist, oder in einer externen txt-Datei, zur Javalaufzeit ausführen zu lassen?

Vielen Dank
Julian
 
Spontan würde ich sagen: Datei einlesen(gibt es genug Möglichkeiten), leere Zeilen als Trennung zwischen den Queries ansehen, die Queries dann in ne ArrayListe<String> laden und dann über ne for schleife ausführen. So in der Art würde ich es machen;)
 
Danke erstmal, aber ich denke das bringt mich nicht weiter, denn meiner Meinung nach muss das Script als ganzes ausgegührt werden und nicht zeile-für-zeile.

Habe mein PL/SQL Script mal eingefügt:

Code:
String query = "DECLARE" +
				"zahl number(3);" +
				"" +
				"BEGIN" +
				"" +
				"select source into zahl from table where column = 'xxx' and rownum = 1;"  +
				"" +
				"END;" +
				"/ ";

Ich weiß das Script macht keinen Sinn, letztendlich soll es eine Zahl auslesen und mir dann zurück geben. Ist sowas überhaupt realisierungstechnisch möglich? :confused:
 
Also ich weiß nicht, ob ich Dich richtig verstanden habe, aber vielleicht hilft Dir folgendes weiter:

Java:
	public int testCall(String name) throws Exception{
		CallableStatement cs=null;
		int id = 0;
		try{
			cs = con.prepareCall("{?=call ECM_INSERTAPPLICATION('"+name+"')}");

			//rueckgabe registrieren
			cs.registerOutParameter(1, OracleTypes.NUMBER);
			
			cs.execute();
	        //rueckgabe holen
			id = cs.getInt(1);
			

	        cs.close();
	        con.close();
		}
		catch(Exception e){
			throw new Exception("testCall() throws: "+e.getMessage());
		}
		return id;
	}

Das ist ein kleines Skript, welches einen Namen übergeben bekommt, diesen in eine Tabelle einfügt und mir dann die ID den neuen Eintrages zurückliefert.
 
Danke erstmal, aber ich denke das bringt mich nicht weiter, denn meiner Meinung nach muss das Script als ganzes ausgegührt werden und nicht zeile-für-zeile.

Habe mein PL/SQL Script mal eingefügt:

Code:
String query = "DECLARE" +
				"zahl number(3);" +
				"" +
				"BEGIN" +
				"" +
				"select source into zahl from table where column = 'xxx' and rownum = 1;"  +
				"" +
				"END;" +
				"/ ";

Ich weiß das Script macht keinen Sinn, letztendlich soll es eine Zahl auslesen und mir dann zurück geben. Ist sowas überhaupt realisierungstechnisch möglich? :confused:

Du solltest vielleicht auch Leerzeichen zwischen den einzelnen Wörtern einfügen, aber...

Ein PSQL Script ist ja kein SQL...sondern ein Script (also sowas wie VB, PHP nur einfacher) was dir SQL Anweisungen ausführt.
Daher brauchst du eine Scriptengine welches dir das Script ausführen kann(wobei du für PSQL kaum eins finden wirst). Oder du portierst das Script nach Java.
 
Servus

Nach nun 4 Stunden googeln bin ich am verzweifeln - Ich möchte ein PL/SQL Statement / Script von Java ausführen lassen.

Einfach dieses Script in ein statement.executeQuery packen funktioniert leider nicht.

Wie ist es also möglich, entweder ein Script was in einem String "query" gespeichert ist, oder in einer externen txt-Datei, zur Javalaufzeit ausführen zu lassen?

Vielen Dank
Julian

Also irgendwie verstehe ich dein Problem nicht. Du hast 2 Möglichkeiten:
1. Dein "Script" wird eine Procedure (welche Datenbank benutzt du eigentlich?)
2. Schonmal etwas von COUNT gehört?

Code:
select count(*)
 from table
 where column = 'xxx' AND rownum = 1

Man müsste halt wissen was du genau vorhast.
 
Also ich weiß nicht, ob ich Dich richtig verstanden habe, aber vielleicht hilft Dir folgendes weiter:

Java:
	public int testCall(String name) throws Exception{
		CallableStatement cs=null;
		int id = 0;
		try{
			cs = con.prepareCall("{?=call ECM_INSERTAPPLICATION('"+name+"')}");

			//rueckgabe registrieren
			cs.registerOutParameter(1, OracleTypes.NUMBER);
			
			cs.execute();
	        //rueckgabe holen
			id = cs.getInt(1);
			

	        cs.close();
	        con.close();
		}
		catch(Exception e){
			throw new Exception("testCall() throws: "+e.getMessage());
		}
		return id;
	}

Das ist ein kleines Skript, welches einen Namen übergeben bekommt, diesen in eine Tabelle einfügt und mir dann die ID den neuen Eintrages zurückliefert.

Ja soweit gar nciht verkehrt, aber hier übergibst du ja, soweit ich weiß, einfach den namen der SP, welche dann anschließend ausgeführt wird. Meine Scripte sind aber leider nicht fest gespeichert im DBMS sondern müssen irgendwie dynamisch übergeben und abgearbeitet werden.



Du solltest vielleicht auch Leerzeichen zwischen den einzelnen Wörtern einfügen, aber...

Ein PSQL Script ist ja kein SQL...sondern ein Script (also sowas wie VB, PHP nur einfacher) was dir SQL Anweisungen ausführt.
Daher brauchst du eine Scriptengine welches dir das Script ausführen kann(wobei du für PSQL kaum eins finden wirst). Oder du portierst das Script nach Java.

Danke für deine Hilfe;

Genau so ein Scriptengine suche ich praktisch, aber wie du schon gesagt hast, finde ich keins. Ich dachte eben, es gäbe evtl. eine Methode á la "Statement.RunFromFile(./script.sql");


Also irgendwie verstehe ich dein Problem nicht. Du hast 2 Möglichkeiten:
1. Dein "Script" wird eine Procedure (welche Datenbank benutzt du eigentlich?)
2. Schonmal etwas von COUNT gehört?

Code:
select count(*)
 from table
 where column = 'xxx' AND rownum = 1

Man müsste halt wissen was du genau vorhast.

Sry, vergessen, ich greife auf eine Oracle Datenbank zu.

Um Missverständnisse zu vermeiden, ich bin einfach nur auf der Suche nach einer Möglichkeit, per Java ein PL/SQL Script auszuführen

Danke für Eure Bemühungen!
 
Zuletzt bearbeitet:
ok für denn Fall das nichts mehr kommt und andere das gleiche Problem haben:

Ich werde nun einfach eine Stored Procedure anlegen und per EXECUTE IMMEDIATE mein übergebenes PL/SQL Script ausführen lassen. Die SP kann man mit Java relativ leicht ansprechen und sich die Rückgabewerte geben lassen.
 
Zurück