我正在尝试进行简单的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;
}
这可能是一个简单的修复,所以我到底做错了什么?
答案 0 :(得分:1)
您的第二个绑定变量(函数的参数)不应该用单引号括起来。您传递了文字值'?'
,没有定义绑定:
String sql = "{? = CALL GET_BOOKED_COUNT(?)}";
然后你引用这两个参数的方式似乎没问题。