Meine Frage ist vielleicht ein wenig verwirrend. Ich habe das Problem, dass ich ein Verfahren mit StoredProcedureCall
von Java Aufruf zB:StoredProcedureCall 1x Varchar Ausgabe 1x Cursor Ausgabe
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("test");
call.addNamedArgument("p_year");
call.addNamedArgument("p_rel");
call.useNamedCursorOutputAsResultSet("p_resset");
resset
ist mein Ergebnis als Cursor - wie man sieht - das funktioniert ohne Probleme, während das Verfahren wie folgt aussieht:
create or replace PROCEDURE TEST (p_year IN NUMBER,
p_rel IN VARCHAR2,
p_resset OUT SYS_REFCURSOR) AS
BEGIN
OPEN p_resset FOR
SELECT NVL (s.KA, 'Summe') ka,
COUNT (s.AZ) az
FROM table1 s,
table2 w
WHERE s.year= w.year
AND w.relevant = p_rel
AND s.year = p_year
END;
Jetzt habe ich einen Ausgabeparameter "p_data"
mit einem eigenen wählen Anruf
create or replace PROCEDURE TEST (p_year IN NUMBER,
p_rel IN VARCHAR2,
p_data OUT VARCHAR2,
p_resset OUT SYS_REFCURSOR) AS
BEGIN
SELECT month
INTO p_data
FROM month_table b
WHERE month_nr = (SELECT MAX (month)
FROM instruction
WHERE year= b.year)
AND year= p_year;
OPEN p_resset FOR
SELECT NVL (s.KA, 'Summe') ka,
COUNT (s.AZ) az
FROM table1 s,
table2 w
WHERE s.year= w.year
AND w.relevant = p_rel
AND s.year = p_year
END;
Und das ist der Namen hinzugefügt, wo ich stecken.
Ich weiß nicht, wie die eine einzige Saite nennen, die das Ergebnis der neuen Select-Anweisung ist (Monat) I
"call.addNamedOutputArgument("p_data");"
hinzuzufügen versucht, aber das war völlig falsch.
vielleicht auch gut zu wissen, wie ich das Ergebnis, das ich wieder vom ersten Anruf handhaben:
DataReadQuery query = new DataReadQuery();
query.setCall(call);
query.addArgument("p_year");
query.addArgument("p_rel");
@SuppressWarnings("rawtypes")
List args = new ArrayList();
args.add(dbyear);
args.add(relevation);
@SuppressWarnings("rawtypes")
List result= (List) s.executeQuery(query, args);
for (int i = 0; i < ergebnis.size(); i++){
testDto record = new testDto();
ArrayRecord ar=(ArrayRecord) ergebnis.get(i);
record.setKa((ar.get("ka")).toString());
record.setAz((ar.get("az")).toString());
System.out.println("cursor : " + ergebnis.get(i));
result.add(ergebnis);
}
aber wie gesagt, ich nicht in der Lage bin die einzige Zeichenfolge zu behandeln es als Parameter zu erhalten um eine html/excel-datei zu erstellen, und das ist das Problem, das ich behandeln muss.
Wissen Java nicht so keine Antwort veröffentlichen, einige Gedanken aber: Ihr ‚Wählen Sie in‘ Abfrage hat setzen Sie das Feld ‚Monat‘ in eine neue Tabelle namens p_data ; 'Select Into' erzeugt keine Ergebnismenge/Rückgabe und Daten, führen Sie diese Aktion nur aus. Um die Daten von P_data zu erhalten, benötigen Sie eine separate Select-Anweisung (wählen Sie einen Monat aus p_data.) Sie haben auch gesagt, dass P_Data ein varchar2-Datentyp ist, wenn es tatsächlich eine Tabelle ist .. also ich denke nicht, dass das richtig ist. – JeffUK
[this] (http://dreamand.me/java/java-jee7-jpa-stored-procedure-example/) kann helfen –