我有以下代码,似乎它无效。
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
,其中一个帐户为{{1} }(为简单起见,我们将仅使用一个),为了知道要更新哪个Assembly_Acc,我们使用Assembly_Acc (acc_no, assembly_id, cost)
{Manufacturing (job_no, assembly_id, etc..)
查找assembly_id
的表job_no
{1}}在查询中)这是一个主键,我们已经从头开始计算。找到jobno
后,它将用于识别所有assembly_id
(恰好具有唯一Assembly_Acc
)
我希望听起来并不复杂,但你能帮助我做得更好吗?我真的很紧迫,我不确定该怎么做。
答案 0 :(得分:1)
您的PL / SQL代码应放入存储过程,然后java CallableStatement将调用传递transno,jobno和supcost作为参数的过程。