hsqldb过程与日期输入参数

时间:2018-03-21 10:10:25

标签: mysql sql sql-server hsqldb procedure

我需要为某些下载操作编写测试。这个操作从MSSQL数据库调用程序,取结果集和java做一些stuf。对于测试,我使用hsqldb。

My procedure:
CREATE PROCEDURE map.Get1(IN packageName varchar(100), 
IN downloadDate DATE) 
READS SQL DATA DYNAMIC RESULT SETS 1 BEGIN ATOMIC
DECLARE result CURSOR WITH RETURN FOR SELECT * FROM map.tvschedule FOR READ ONLY; 
OPEN result; 
END

此程序无效,我有例外

致电map.GET1('流派',' 2018-03-10');

[42561][-5561] incompatible data type in conversion
java.lang.RuntimeException: org.hsqldb.HsqlException: incompatible data type 
in conversion

但是这个(没有日期参数)效果很好:

CREATE PROCEDURE map.Get1(IN packageName varchar(100)) 
READS SQL DATA DYNAMIC RESULT SETS 1 BEGIN ATOMIC
DECLARE result CURSOR WITH RETURN FOR SELECT * FROM map.tvschedule FOR READ ONLY; 
OPEN result; 
END

致电map.GET1('流派');

首先需要排

第二行

我不打算使用输入参数,但我需要这个程序来查看我要去的。

我的问题是如何在hsqldb程序中使用日期输入参数?

UPDATE1: 我使用了TO_DATE,现在效果很好,但我的结果集中没有数据,我的java代码是:

try (CallableStatement callableStatement = connection.prepareCall("{ call 
map.GetGenreProtocol( ?, ? ) }")) {
        callableStatement.setString(1, packageName);
        callableStatement.setDate(2, date);
        callableStatement.execute();
        ResultSet resultSet = callableStatement.getResultSet();


        while (resultSet.next()) {

           Interval Interval = new Interval();
            Interval.setDuration(resultSet.getInt("duration"));
           Interval.setMappingTargetId(resultSet.getInt("mappingTargetId"));
            Interval.setGenreId(resultSet.getInt("genreId"));
            Interval.setStart(resultSet.getLong("start"));
            Interval.setCategoryId(resultSet.getInt("categoryId"));
            Interval.setCategoryName(resultSet.getString("categoryName"));
            Interval.setGenreName(resultSet.getString("genreName"));
            Interval.setDescription(resultSet.getString("description"));

            Intervals.add(Interval);
        }
    }

1 个答案:

答案 0 :(得分:0)

使用TO_DATE功能。

例如:

call map.GET1('Genre', TO_DATE('2018-03-10', 'YYYY-MM-DD'));

我猜你需要创建一个返回表而不是过程的函数:

CREATE FUNCTION map.Get1(IN packageName  VARCHAR(100),
                         IN downloadDate DATE)
  RETURNS TABLE(.....)
  READS SQL DATA
BEGIN ATOMIC
  ....
END;