# Stored Procedure - Aufruf mit call



## cam (12. Jan 2009)

Hallo,

ich habe nun einige Beiträge zum Aufruf von Stored Procedures gelesen, aber ich komme damit nicht zurecht.
Im Moment wird die Stored Procedure nicht gefunden - nu hab ich überlegt, ok, die ist in einem anderen Verzeichnis gespeichert, hab versucht den Pfad mit anzugeben, aber irgendwas mach ich da auch falsch. 
Mit den ganzen "?" komme ich auch nicht zurecht.

Das ist das, was ich mir aus den verschiedenen Beiträgen und Google-Suchen rausgenommen hab:


```
if(EinlagernM5.boxGr5 == "G0"){
			try{
				CallableStatement callG0 = Frame.cn.prepareCall("{? = call SPG0(?, ?, ?, ?)}");
				callG0.registerOutParameter(1, Types.CHAR);
				callG0.registerOutParameter(2, Types.CHAR);
				callG0.registerOutParameter(3, Types.CHAR);
				callG0.registerOutParameter(4, Types.CHAR);
				callG0.registerOutParameter(5, Types.CHAR);
				Frame.rs = callG0.executeQuery();
				if(Frame.rs.next()){
					reiheG01 = Frame.rs.getString(1);
					spalteG01 = Frame.rs.getString(2);
					ebeneG01 = Frame.rs.getString(3);
					fachG01 = Frame.rs.getString(4);
					fachG02 = Frame.rs.getString(5);
					System.out.println(reiheG01 + spalteG01 + ebeneG01 + fachG01 + fachG02);
				}
			}catch(Exception ex){
				System.out.println("Keine Verbindung: " + ex);
			}
		}
```


----------



## cam (12. Jan 2009)

Ok, wenn man die Stored Procedure ausführt, landet sie automatisch im richtigen Verzeichnis und wir gefunden - wobei mir gesagt wird, dass kein ResultSet existiert...
Aber am ende muss ich doch ein "DROP PROCEDURE" ranhängen? Aber wenn ich das mache, verschwindet die SP wieder und ich kann sie über Java nicht mehr aufrufen?!


----------



## SlaterB (12. Jan 2009)

nebenbei:
> if(EinlagernM5.boxGr5 == "G0"){ 

Strings mit equals vergleichen!


----------



## cam (12. Jan 2009)

*g* ja klar...
bin nur seit Wochen mit dieser blöden Abfrage beschäftigt, dass ich das vergessen habe...
Aber das hilft mir nu auch nicht weiter


----------



## cam (13. Jan 2009)

Ich brauche bitte ganz dringend eure Hilfe!!!

Ich schicke jetzt einfach mal eine der Prozeduren mit...


```
CREATE PROCEDURE boxG0
   @reihe CHAR(1) OUTPUT
   , @spalte CHAR(1) OUTPUT
   , @ebene CHAR(1) OUTPUT
   , @fach1 CHAR(1) OUTPUT
   , @fach2 CHAR(1) OUTPUT
   AS
      BEGIN
         DECLARE @reiheG0 CHAR(1), @spalteG0 CHAR(1), @ebeneG0 CHAR(1), @fachG01 CHAR(1)
         DECLARE c_G0 CURSOR FOR
            SELECT reihe, spalte, ebene, fach FROM la_platz WHERE mgl_g0 = '1' AND belegt = '0' AND reserv = '0'
         OPEN c_G0
         FETCH c_G0 INTO @reiheG0, @spalteG0, @ebeneG0, @fachG01         
         GOTO Schleife;         
      END
      
	  Schleife:
      IF(@fachG01 = '1')
         BEGIN            
            DECLARE @belegt1 BIT, @reserviert1 BIT
            DECLARE c_G0fach2_1 CURSOR FOR
               SELECT belegt, reserv FROM la_platz WHERE reihe = @reiheG0 AND spalte = @spalteG0 AND ebene = @ebeneG0 AND fach = '2'
            OPEN c_G0fach2_1
            FETCH c_G0fach2_1 INTO @belegt1, @reserviert1            
            IF(@belegt1 = '0' AND @reserviert1 = '0')
            BEGIN
               SET @fach1 = '1'
               SET @fach2 = '2'
               CLOSE c_G0fach2_1
			   DEALLOCATE c_G0fach2_1
               GOTO Ende;
            END
            ELSE
				CLOSE c_G0fach2_1
				DEALLOCATE c_G0fach2_1
				GOTO Weiter;
            
         END
         IF(@fachG01 = '3')
         BEGIN            
            DECLARE @belegt3 BIT, @reserviert3 BIT
            DECLARE c_G0fach2_3 CURSOR FOR
               SELECT belegt, reserv FROM la_platz WHERE reihe = @reiheG0 AND spalte = @spalteG0 AND ebene = @ebeneG0 AND fach = '4'
            OPEN c_G0fach2_3
            FETCH c_G0fach2_3 INTO @belegt3, @reserviert3            
            IF(@belegt3 = '0' AND @reserviert3 = '0')
            BEGIN
               SET @fach1 = '3'
               SET @fach2 = '4'
               CLOSE c_G0fach2_3
			   DEALLOCATE c_G0fach2_3
               GOTO Ende;
            END
            ELSE
				CLOSE c_G0fach2_3
				DEALLOCATE c_G0fach2_3
				GOTO Weiter;
            
         END
         
         Weiter:
			FETCH NEXT FROM c_G0 INTO @reiheG0, @spalteG0, @ebeneG0, @fachG01
			GOTO Schleife;
			
		 Ende:
			SET @reihe = @reiheG0;
			SET @spalte = @spalteG0;
			SET @ebene = @ebeneG0;
			CLOSE c_G0
			DEALLOCATE c_G0
      
   GO
   DECLARE @reiheG0 CHAR(1), @spalteG0 CHAR(1), @ebeneG0 CHAR(1), @fachG01 CHAR(1), @fachG02 CHAR(1)
   EXECUTE boxG0 @reiheG0 OUTPUT, @spalteG0 OUTPUT, @ebeneG0 OUTPUT, @fachG01 OUTPUT, @fachG02 OUTPUT
   SELECT @reiheG0, @spalteG0, @ebeneG0, @fachG01, @fachG02   
--DROP PROCEDURE boxG0
```

Es ist mir ja klar, dass die Prozedur bereits erzeugt sein muss, damit ich sie über Java aufrufen kann. Und mir ist auch klar, dass es Prozeduren ja deshalb gibt, damit man sie mehrfach verwenden kann, ABER ich stehe total auf dem Schlauch, wie ich das umsetzen soll. Bitte, bitte helft mir!!!


----------

