Java上的PL SQL似乎陷入困境

时间:2013-11-26 09:24:53

标签: java sql jdbc plsql

我有以下代码,似乎它无效。

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

我希望听起来并不复杂,但你能帮助我做得更好吗?我真的很紧迫,我不确定该怎么做。

1 个答案:

答案 0 :(得分:1)

您的PL / SQL代码应放入存储过程,然后java CallableStatement将调用传递transno,jobno和supcost作为参数的过程。

看到这个问题: PreparedStatements or callableStatements