问题描述: 我想通过java代码调用存储在我的数据库中的过程。我想调用的过程有一个类型为'MAP_VARCHAR'的参数(我已经将它定义为下面的包中的类型)。java.sql.SQLException:从jdbc执行程序包级别类型时无效的列类型
现在,我试图从我的java代码执行此过程,但传递参数是给java.sql.SQLException。
SQL包来告诉你怎么创建我的SQL程序,并输入
--------------------------------------------------------
-- Package Body TEST_PACKAGET
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE PACKAGE BODY "TEST_PACKAGE" AS
PROCEDURE PerformersRole(P_Performer_Map MAP_VARCHAR) AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello ' || P_Performer_Map('Engineer'));
END PerformersRole;
END TEST_PACKAGE;
/
--------------------------------------------------------
-- Package TEST_PACKAGE
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE PACKAGE "TEST_PACKAGE" AS
/* TODO enter package declarations (types, exceptions, methods etc) here */
TYPE MAP_VARCHAR IS TABLE OF VARCHAR(100) INDEX BY VARCHAR(100);
PROCEDURE PerformersRole(P_Performer_Map MAP_VARCHAR);
END TEST_PACKAGE;
/
我的Java代码
public void executeProcedure(){
CallableStatement statement = null;
try {
/// Oracle Connection code should be here
Connection connection = connectionManager.createConnection();
Hashtable newMap = new Hashtable();
newMap.put("Engineer", "Hanson");
newMap.put("Assistant", "Alice Kim");
newMap.put("Supervisor", "James MaCoy");
StringBuffer procedure = new StringBuffer("{call TEST_PACKAGE.PerformersRole(?) }");
statement = connection.prepareCall(procedure.toString());
statement.setInt(1, newMap);
statement.execute();
} catch (Exception ex) {
}
}
当我执行我收到错误我的java代码是
java.sql.SQLException: Invalid column type
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8761)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8259)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:9012)
at oracle.jdbc.driver.OracleCallableStatement.setObject(OracleCallableStatement.java:4983)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:230)
我缺少什么?!
感谢您的帮助,提前
SQL包类型麻烦你的程序似乎并没有接受一个整数作为输入值,必须有一些比'setInt'更相关的方法。 – Berger
什么是MAP_VARCHAR类型? – user7294900
MAP_VARCHAR是自定义类型,它将保存VARCHAR表并由VARCHAR建立索引。即项目('马德里'):='皇家马德里' – Hanson