Hiho liebe Community,
Ich habe vor kurzem bereits ein Problem mit CallableStatements gehabt(klick mich).
Nun habe ich das ja hinbekommen, stehe nun aber vor einem neuen Problem:
Das Statement wird auf der Datenbank nicht ausgeführt, hierzu hab ich nun 2 Fragen:
1. Gibt es eine Möglichkeit sich das Statement nach dem setzen der Parameter ausgeben zu lassen?
Wenn ich also eine Prozedur habe:
Möchte ich mir sowas ausgeben lassen:
Das letzte Fragezeichen steht dabei für den Ausgangsparameter der aus der DB kommt (die Prozedur legt einen neuen Eintrag an und gibt die steuerId zurück falls die steuerId vorher 0 ist, ansonsten wird die alte steuerId zurückgegeben).
2. Woran könnte es liegen, dass das Statement nicht ausgeführt wird, hier nochmal nen bissl Code:
Die Methode getCallableStatement
[JAVA=367]
private void getCallableStatement(final String sql) {
cs = connection.prepareCall(sql);
}
[/code]
Der Aufruf (java)
[JAVA=252]
String sql = getSqlBefehl("UPDATE_STEUER");
this.getCallableStatement(sql);
cs.setInt(1, steuer.getProfile().getId());
cs.setInt(2, steuer.getBefehlId());
cs.setInt(3, steuer.getReihenfolge());
cs.setInt(4, steuer.getStplZustandIdBefor().getId());
cs.setInt(5, steuer.getStplZustandIdNach().getId());
cs.setInt(6, steuer.getId());
cs.registerOutParameter(7, Types.NUMERIC);
cs.executeUpdate();
connection.commit();
steuer.setId(cs.getInt(7));
cs.close();
[/code]
Der Prozedurenaufruf (in Java: getSqlBefehl("UPDATE_STEUER"))
Die Prozedur:
Hoffe das sind nun nicht zuviele Fragen und ich freue mich schon auf die (hoffentlich) hilfreichen Antworten.
MfG
Gossi
Ich habe vor kurzem bereits ein Problem mit CallableStatements gehabt(klick mich).
Nun habe ich das ja hinbekommen, stehe nun aber vor einem neuen Problem:
Das Statement wird auf der Datenbank nicht ausgeführt, hierzu hab ich nun 2 Fragen:
1. Gibt es eine Möglichkeit sich das Statement nach dem setzen der Parameter ausgeben zu lassen?
Wenn ich also eine Prozedur habe:
SQL:
DECLARE
steuerID NUMBER := ?;
BEGIN
WFLPROD.DS_PKG.set_steuer(?,?,?,?,?,steuerID);
? := steuerID;
END;
Möchte ich mir sowas ausgeben lassen:
Code:
DECLARE
steuerID NUMBER := 0;
BEGIN
WFLPROD.DS_PKG.set_steuer(8,1,10,2,-1,steuerID);
? := steuerID;
END;
2. Woran könnte es liegen, dass das Statement nicht ausgeführt wird, hier nochmal nen bissl Code:
Die Methode getCallableStatement
[JAVA=367]
private void getCallableStatement(final String sql) {
cs = connection.prepareCall(sql);
}
[/code]
Der Aufruf (java)
[JAVA=252]
String sql = getSqlBefehl("UPDATE_STEUER");
this.getCallableStatement(sql);
cs.setInt(1, steuer.getProfile().getId());
cs.setInt(2, steuer.getBefehlId());
cs.setInt(3, steuer.getReihenfolge());
cs.setInt(4, steuer.getStplZustandIdBefor().getId());
cs.setInt(5, steuer.getStplZustandIdNach().getId());
cs.setInt(6, steuer.getId());
cs.registerOutParameter(7, Types.NUMERIC);
cs.executeUpdate();
connection.commit();
steuer.setId(cs.getInt(7));
cs.close();
[/code]
Der Prozedurenaufruf (in Java: getSqlBefehl("UPDATE_STEUER"))
SQL:
DECLARE
steuerID NUMBER := ?;
BEGIN
WFLPROD.DS_PKG.set_steuer(?,?,?,?,?,steuerID);
? := steuerID;
END;
Die Prozedur:
SQL:
PROCEDURE SET_STEUER
(
profileID IN number,
befehlID IN number,
nummer IN number,
stplZustandVor IN number,
stplZustandNach IN number,
steuerID IN OUT number
) AS
counter number;
BEGIN
IF steuerID = 0 THEN
select ds_steuer_seq.nextval into steuerid from dual;
INSERT
INTO ds_steuer VALUES
(
profileid,
befehlid,
(SELECT max(r)+1
FROM
(
SELECT 0 r FROM dual UNION
SELECT nvl(reihenfolge,0) r FROM ds_steuer WHERE profile_id = profileid
)
),
stplzustandvor,
stplzustandnach,
steuerID
);
ELSE
select steuerid into steuerid from dual;
UPDATE ds_steuer
set profile_id = profileid,
befehl_id = befehlid,
reihenfolge = nummer,
stpl_zustand_id_bevor = stplzustandvor,
stpl_zustand_id_nach = stplzustandnach
WHERE steuer_id = steuerid;
END IF;
END SET_STEUER;
Hoffe das sind nun nicht zuviele Fragen und ich freue mich schon auf die (hoffentlich) hilfreichen Antworten.
MfG
Gossi
Zuletzt bearbeitet: