我正在尝试使用 Oracle 存储过程来更新数据库表。我正在从 Java 程序调用该过程。我希望我的程序接受格式为“01-01-2015”的日期,但由于某种原因,我的程序仅接受格式为“01-JAN-2015”的日期。
我的存储过程:
DELIMITER //
CREATE OR REPLACE PROCEDURE updateAward
(
p_award_id IN awards.award_id%TYPE,
p_award_date IN awards.award_date%TYPE,
p_total_amount IN awards.total_amount%TYPE,
p_number_sales IN awards.number_sales%TYPE,
p_emp_id IN awards.emp_id%TYPE
)
AS
BEGIN
UPDATE awards
SET award_date = to_date(p_award_date, 'DD-MM-YYYY'),
total_amount = p_total_amount,
number_sales = p_number_sales,
emp_id = p_emp_id
WHERE award_id = p_award_id;
COMMIT;
END;
/
调用它的java代码:
public boolean updateByID(Connection conn, String strVar, int[] intVar, double doubleVar)
{
System.out.println(strVar);
System.out.println(doubleVar);
System.out.println(intVar[0]);
System.out.println(intVar[1]);
System.out.println(intVar[2]);
try
{
String query = "{call updateAward(?,?,?,?,?)}";
CallableStatement stmt = conn.prepareCall(query);
stmt.setInt(1,intVar[0]);
stmt.setString(2, strVar);
stmt.setDouble(3, doubleVar);
stmt.setInt(4, intVar[1]);
stmt.setInt(5, intVar[2]);
stmt.executeUpdate();
return true;
}
catch(SQLException e)
{
System.out.println(e.getMessage());
}
return false;
}
控制台打印出正在传递的变量:
12-12-2012
65165.2
21
22
3
错误本身:
KORA-01843: not a valid month
ORA-06512: at line 1
我发现的每个解决方案都是将日期格式放入过程中。我相信我已经做到了
award_date = to_date(p_award_date, 'DD-MM-YYYY'),
我写错了吗?有人可以帮忙吗?
最佳答案
当前您正在传递一个字符串:
stmt.setString(2, strVar);
你正在解析一个字符串:
award_date = to_date(p_award_date, 'DD-MM-YYYY')
但是您需要自定义类型中的日期,这就是转换失败的地方。将其更改为 VARCHAR(或 VARCHAR2),它将起作用。
关于java - 从 Java 调用的 Oracle 存储过程中的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32443622/