# PL/SQL Script Durch Java ausführen lassen



## forced (5. November 2007)

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


----------



## Tobias Köhler (5. November 2007)

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


----------



## forced (5. November 2007)

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:


```
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?


----------



## Ronin-Jay (5. November 2007)

Also ich weiß nicht, ob ich Dich richtig verstanden habe, aber vielleicht hilft Dir folgendes weiter:


```
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.


----------



## Anime-Otaku (5. November 2007)

forced hat gesagt.:


> 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:
> 
> ...



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.


----------



## y0dA (5. November 2007)

forced hat gesagt.:


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



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?


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

Man müsste halt wissen was du genau vorhast.


----------



## forced (6. November 2007)

Ronin-Jay hat gesagt.:


> Also ich weiß nicht, ob ich Dich richtig verstanden habe, aber vielleicht hilft Dir folgendes weiter:
> 
> 
> ```
> ...



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.





Anime-Otaku hat gesagt.:


> 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");




y0dA hat gesagt.:


> 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?
> 
> ...



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!


----------



## forced (6. November 2007)

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.


----------

