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: