我有以下代碼,它似乎不工作。Java上的PL SQL似乎被卡住
CallableStatement cs = dbc.prepareCall("" +
"DECLARE " +
"transno numeric (9,0); " +
"jobno numeric (9,0); " +
"supcost numeric (9,0); " +
"message varchar (20) := 'All good'; " +
"BEGIN " +
"transno := ?; " +
"jobno := ?; " +
"supcost := ?; " +
"INSERT INTO JOB_TRANSACTION" +
" VALUES (transno, jobno); " +
"INSERT INTO TRANSACTION " +
" VALUES (transno, supcost); " +
"UPDATE ASSEMBLY_ACC ac" +
" SET cost = cost + supcost " +
" WHERE EXISTS(SELECT * FROM Manufacturing m WHERE m.job_no = jobno and m.assembly_id = ac.assembly_id); " +
"? := message; " +
"END;");
cs.setInt(1, Integer.parseInt(trans_no));
cs.setInt(2, Integer.parseInt(job_no));
cs.setInt(3, Integer.parseInt(sup_cost));
cs.registerOutParameter(4, Types.VARCHAR);
cs.execute();
System.out.println(cs.getString(4));
其中,trans_no,job_no和sup_cost都是已包含值的字符串。
我認爲它在UPDATE語句中卡住了,但是我想不出用另一種方式來表達條件。
我打算做的是,每一個與它相應的電源成本sup_cost
交易是由時間,它會同時更新cost
三個賬戶,其中之一是Assembly_Acc (acc_no, assembly_id, cost)
(爲簡單起見,我們將與一個工作),並且爲了知道哪個Assembly_Acc要更新,我們查找表Manufacturing (job_no, assembly_id, etc..)
的assembly_id
與job_no
(查詢中的jobno
),這是一個主鍵,我們已經從頭開始計算。一旦assembly_id
被發現,它會被用來之間辨別所有Assembly_Acc
(這恰好有一個獨特的assembly_id
)
我希望這不會聽起來複雜,但你能不能幫我做的更好?我真的很緊迫,我不知道如何遵循。
你檢查你的SQL語句seperatly,以確保它們是正確的,你想要做什麼? – Armunin
我沒有單獨檢查更新語句,但其他兩個工作正常。數據庫中有很多關鍵參考,所以也有點困難。 – Yokhen
如果你說,沒有更新聲明,所有工作正常,我會建議確保你的更新聲明正在工作。不確定'cost = cost + supcost'是否有效。可能是像'成本=(選擇XY的成本)+ supcost' – Armunin