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

标签 java oracle stored-procedures jdbc

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

相关文章:

java - 要打印的数组的非相邻元素的最大总和

java - 如何更改 Gradle 中的 jar 输出目录?

java - 如何解决JSP中Oracle缺少表达式的问题?

java - 调用存储过程传递表类型参数

SQL存储过程转换日期参数

sql - 在存储过程中,是简单地查询数据还是构造一个查询然后执行它更好?为什么?

java - 按下返回并选择另一个按钮后的休息 Activity Intent 值?

java - mybatis中如何调用oracle函数

oracle - 我可以使用 imp/exp 工具将数据库从 Oracle 9 迁移到 Oracle 10

Java:数据库连接代码问题