在java中调用oracle PL / SQL函数 – 无效的列类型错误
我想从java类调用plsql函数,但该函数(isValidPeriod)返回一个布尔数据类型,JDBC不支持它
由于OCI层的限制,JDBC驱动程序不支持将BOOLEAN参数传递给PL / SQL存储过程。 java布尔类型与PL / SQl布尔类型不匹配。 Oracle文档表明BOOLEAN仅是PL / SQL类型,“java.lang.Boolean”类和PL / SQL BOOLEAN数据类型之间没有映射。
因此,我担心您可能必须更改数据库PL / SQL函数以返回整数
要么
只需创建一个包装器: function isValidPeriodInt(
这个限制有一个简单的解决方法,它不需要包装器函数,只需将布尔函数本身包装在CASE
语句中并使用Integer进行绑定:
stmt = conn.prepareCall( "BEGIN" + " ? := CASE WHEN (myBooleanFuncInOracle()) " + " THEN 1 " + " ELSE 0" + " END;" + "END;"); stmt.registerOutParameter(1, Types.INTEGER); // exec stmt.execute(); // get boolean from Integer boolean myBool = (stmt.getInt(1) == 1);
如果您不能或不想更改function甚至无法创建包装函数(例如在旧版DB中),则非常有用。