gpt4 book ai didi

java - 从 Java 调用的 Oracle 存储过程中的日期格式

转载 作者:行者123 更新时间:2023-12-02 04:23:48 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com