带有PL / SQL函数的列索引无效

时间:2014-05-03 11:53:44

标签: java oracle plsql sql-function

我正在尝试进行简单的PL / SQL到Java设置,我在PL / SQL中创建一个函数并从Java调用它,期望返回值。

我是PL / SQL的新手并用Java调用它所以我的方法可能只是缺乏对SQL的返回值实际工作方式的理解。

我的SQL函数如下所示:

CREATE OR REPLACE FUNCTION GET_BOOKED_COUNT(P_NO VARCHAR2)
  RETURN NUMBER AS
  RESULTS NUMBER := 0;
BEGIN
  SELECT COUNT(*) INTO RESULTS FROM SEAT WHERE PLANE_NO=P_NO AND BOOKED IS NULL;
  RETURN RESULTS;
END GET_BOOKED_COUNT;

回复一个数字。它需要检查一个座位表,看看有多少座位尚未预订。

在尝试关注其他各种Stackoverflow帖子之后,我尝试复制他们所做的事情,但它一直告诉我索引列无效。

public static boolean isAllBooked(String plane_no) {
    String sql = "{? = CALL GET_BOOKED_COUNT('?')}";
    boolean res = false;
    try {
        Connection conn = getConnection("db_010", "db2014");
        CallableStatement cs = conn.prepareCall(sql);
        cs.setString(2, plane_no);
        cs.registerOutParameter(1, Types.NUMERIC);
        cs.executeUpdate();
        int i = cs.getInt(1);
        if(i == 0) {
            res = true;
        }
        conn.close();
    } catch (SQLException ex) {
        Logger.getLogger(HelperClass.class.getName()).log(Level.SEVERE, null, ex);
    }
    return res;
}

这可能是一个简单的修复,所以我到底做错了什么?

1 个答案:

答案 0 :(得分:1)

您的第二个绑定变量(函数的参数)不应该用单引号括起来。您传递了文字值'?',没有定义绑定:

String sql = "{? = CALL GET_BOOKED_COUNT(?)}";

然后你引用这两个参数的方式似乎没问题。