Câu hỏi của tôi có thể hơi khó hiểu một chút. Tôi có vấn đề mà tôi đang kêu gọi một thủ tục với StoredProcedureCall
từ Java ví dụ:StoredProcedureCall 1x Đầu ra Varchar 1x Đầu ra con trỏ
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("test");
call.addNamedArgument("p_year");
call.addNamedArgument("p_rel");
call.useNamedCursorOutputAsResultSet("p_resset");
resset
là kết quả của tôi như là một con trỏ - như bạn có thể nhìn thấy - điều này hoạt động mà không bất kỳ vấn đề trong khi thủ tục trông giống như:
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;
Bây giờ tôi đã thêm một tham số đầu ra được đặt tên "p_data"
với một lựa chọn cuộc gọi riêng
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;
Và đó là nơi tôi có bị mắc kẹt.
Tôi không biết làm thế nào để gọi một chuỗi duy nhất mà là kết quả của báo cáo kết quả lựa chọn mới (tháng) Tôi cố gắng thêm
"call.addNamedOutputArgument("p_data");"
nhưng đó là hoàn toàn sai.
có lẽ cũng tốt để biết là cách tôi xử lý các kết quả tôi nhận được trở lại từ cuộc gọi đầu tiên:
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);
}
nhưng như tôi đã nói tôi không thể xử lý chuỗi duy nhất để có được nó như một tham số để tạo tệp html/excel sau đó và đó là vấn đề tôi phải xử lý.
Không biết Java vì vậy không đăng câu trả lời, một vài suy nghĩ mặc dù: bạn 'Chọn Into' truy vấn đã đưa trường 'tháng' vào một p_data bảng mới có tên gọi ; 'Chọn vào' sẽ không tạo ra kết quả/trả về và dữ liệu, chỉ thực hiện hành động này. Để lấy dữ liệu từ P_data, bạn sẽ cần một câu lệnh chọn riêng (chọn tháng từ p_data.) Bạn cũng đã nói rằng P_Data là một kiểu dữ liệu varchar2, khi nó thực sự là một bảng .. vì vậy tôi không nghĩ điều đó đúng. – JeffUK
[this] (http://dreamand.me/java/java-jee7-jpa-stored-procedure-example/) có thể trợ giúp –