这是存储过程:
PROCEDURE SELECT_TEST(P_TIME IN VARCHAR2, P_CAMERAID OUT VARCHAR2) IS
  BEGIN
    SELECT T.CAMERAID
      INTO P_CAMERAID
      FROM TB_DENSITY T
     WHERE TO_CHAR(T.TIMEAT, 'YYYY-MM-DD HH24:Mi:SS') = P_TIME;
  EXCEPTION
    WHEN OTHERS THEN
      P_CAMERAID := NULL;
    
  END SELECT_TEST;
这是我后台测试的方法,返回的是空值。
public static boolean selectFlag(String time) throws Exception {
String[] str = new String[1]; boolean flag = false; Connection con = null;
CallableStatement cstmt = null;
con = DbManager.getConnection();
cstmt = con.prepareCall("{ call countpkg.SELECT_TEST(?,?)}");
cstmt.setString(1, time);
cstmt.registerOutParameter(2, OracleTypes.VARCHAR);
cstmt.execute();
str[0] = cstmt.getString(2);
System.out.println(str[0]); if (str[0] !=null && !str[0].equals(null))
flag = true; return flag; }
返回的是空值,我这个表里肯定有这个值。就是根据时间查到一个值。

解决方案 »

  1.   

    测试sql有问题没  没有应该就是参数这里  再没有就是程序问题了
      

  2.   

    你在PL/SQL下直接测试存储过程看看
    如果相同一个时间查询出多条记录,那也会返回空值。
    你可以在异常处理中返回输入参数和错误信息:
    EXCEPTION
      WHEN OTHERS THEN
      P_CAMERAID := P_TIME||','||SQLERRM;
      

  3.   

    你应该先测试下这个select语句返回的东西,还有你的
    WHERE TO_CHAR(T.TIMEAT, 'YYYY-MM-DD HH24:Mi:SS') = P_TIME
    条件不一定正确。 SELECT T.CAMERAID
      INTO P_CAMERAID
      FROM TB_DENSITY T
      WHERE TO_CHAR(T.TIMEAT, 'YYYY-MM-DD HH24:Mi:SS') = P_TIME;