【发布时间】:2017-04-04 05:37:25
【问题描述】:
我有一个将值插入一个表并更新另一个表的行的过程。该程序编译没有任何错误。如果我在 PL/SQL 代码中手动调用它,表就会更新。
CREATE OR REPLACE PROCEDURE payment_update
(bId IN number, pType IN varchar2, pAmt IN number )
AS
BEGIN
INSERT INTO payment
VALUES (PID_SEQ.NEXTVAL,
bId,
pType,
(SELECT CURRENT_DATE FROM DUAL),
pAmt);
UPDATE booking
SET payment_status = 'FP',
paid = pAmt
WHERE booking_id = bId;
END;
/
我试图通过单击按钮在 Java 类中调用此存储过程。用户在 GUI 框架的文本字段中输入值,这些值需要发送到存储过程。
这是我的 Java 代码 -
private void payButtonActionPerformed(java.awt.event.ActionEvent evt) {
int i = unpaidJTable.getSelectedRow();
int bookingId =Integer.parseInt(bIdText.getText());
String pType = pTypeText.getText();
double pAmt = Double.parseDouble(pAmtText.getText());
CallableStatement callableStatement = null;
String paymentUpdateRecord = "{call payment_update(?, ?, ?)}";
try{
callableStatement = conn.prepareCall(paymentUpdateRecord);
callableStatement.setInt(1, bookingId);
callableStatement.setString(2, pType);
callableStatement.setDouble(3, pAmt);
callableStatement.executeUpdate();
conn.commit();
System.out.println("Successfully updated!");
}
catch(SQLException e){
System.out.println(e.getMessage());
}
单击此按钮时,我收到一个错误粘贴在上面作为问题。 有人可以帮我吗?我不知道我需要声明什么。
【问题讨论】:
-
你连接到正确的架构了吗?
-
是的,它已更正为正确的架构。
-
我认为您的问题出在您的 DBMS 中,而不是 Java,请查看此链接 experts-exchange.com/questions/21851939/…
-
如果您连接到的用户帐户不是 proc 的所有者,您必须为该项目的登录用户帐户创建授权和同义词。这意味着您的 Java 应用程序正在登录的用户帐户不“知道”存储过程。
-
您是否检查过运行代码的用户对该过程具有执行权限?将
授予执行到
标签: oracle stored-procedures jdbc runtime-error