Java 如何从oracle过程到SimpleJDBCall获取价值
我已经使用spring和procedure成功地使用Simplejdbccall保存了详细信息,但是我需要从procedure返回一个值,并在java代码中获取它Java 如何从oracle过程到SimpleJDBCall获取价值,java,oracle,stored-procedures,spring-jdbc,Java,Oracle,Stored Procedures,Spring Jdbc,我已经使用spring和procedure成功地使用Simplejdbccall保存了详细信息,但是我需要从procedure返回一个值,并在java代码中获取它 public void saveNamedDrivers(QuotationDO quotationDO) { // TODO Auto-generated method stub try { System.out.println(" 11111"); SimpleJdbcCal
public void saveNamedDrivers(QuotationDO quotationDO) {
// TODO Auto-generated method stub
try {
System.out.println(" 11111");
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource);
simpleJdbcCall.withCatalogName("NAMED_DRIVER_SAVE").withProcedureName("PR_NAMED_DRIVER_SAVE")
.withoutProcedureColumnMetaDataAccess()
.declareParameters(new SqlParameter("P_VCH_NAME", OracleTypes.VARCHAR),
new SqlParameter("P_NUM_NEW_IC_NO", OracleTypes.VARCHAR),
new SqlParameter("P_NUM_OLD_IC_NO", OracleTypes.VARCHAR),
new SqlParameter("P_VCH_GENDER", OracleTypes.VARCHAR),
new SqlParameter("P_VCH_RELATIONSHIP", OracleTypes.VARCHAR),
new SqlParameter("P_NUM_AGE", OracleTypes.NUMBER),
new SqlParameter("P_VCH_DRIVER_EXPERIENCE", OracleTypes.VARCHAR));
SqlParameterSource inputParams = new MapSqlParameterSource()
.addValue("P_VCH_NAME", quotationDO.getNameddrivername())
.addValue("P_NUM_NEW_IC_NO", quotationDO.getNamednewicno())
.addValue("P_NUM_OLD_IC_NO", quotationDO.getNamedoldicno())
.addValue("P_VCH_GENDER", quotationDO.getNamedgender())
.addValue("P_VCH_RELATIONSHIP", quotationDO.getNameddriverrelationship())
.addValue("P_NUM_AGE", quotationDO.getNamedage())
.addValue("P_VCH_DRIVER_EXPERIENCE", quotationDO.getNameddriverexperience());
Map<String, Object> transactionStatus = simpleJdbcCall.execute(inputParams);
System.out.println( transactionStatus);
} catch (Exception e) {
System.out.println(e);
}
}
public void saveNamedDrivers(QuotationDO quotationDO) {
// TODO Auto-generated method stub
try {
System.out.println(" 11111");
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource);
simpleJdbcCall.withCatalogName("NAMED_DRIVER_SAVE").withProcedureName("PR_NAMED_DRIVER_SAVE")
.withoutProcedureColumnMetaDataAccess()
.declareParameters(new SqlParameter("P_VCH_NAME", OracleTypes.VARCHAR),
new SqlParameter("P_NUM_NEW_IC_NO", OracleTypes.VARCHAR),
new SqlParameter("P_NUM_OLD_IC_NO", OracleTypes.VARCHAR),
new SqlParameter("P_VCH_GENDER", OracleTypes.VARCHAR),
new SqlParameter("P_VCH_RELATIONSHIP", OracleTypes.VARCHAR),
new SqlParameter("P_NUM_AGE", OracleTypes.NUMBER),
new SqlParameter("P_VCH_DRIVER_EXPERIENCE", OracleTypes.VARCHAR));
SqlParameterSource inputParams = new MapSqlParameterSource()
.addValue("P_VCH_NAME", quotationDO.getNameddrivername())
.addValue("P_NUM_NEW_IC_NO", quotationDO.getNamednewicno())
.addValue("P_NUM_OLD_IC_NO", quotationDO.getNamedoldicno())
.addValue("P_VCH_GENDER", quotationDO.getNamedgender())
.addValue("P_VCH_RELATIONSHIP", quotationDO.getNameddriverrelationship())
.addValue("P_NUM_AGE", quotationDO.getNamedage())
.addValue("P_VCH_DRIVER_EXPERIENCE", quotationDO.getNameddriverexperience());
Map<String, Object> transactionStatus = simpleJdbcCall.execute(inputParams);
System.out.println( transactionStatus);
} catch (Exception e) {
System.out.println(e);
}
}
[我使用DBMS_output.put_line(p_NAMED_ID);
在debbuging sql过程中获得了输出,但是如何在上面的java代码中获得它呢
public void saveNamedDrivers(QuotationDO quotationDO) {
// TODO Auto-generated method stub
try {
System.out.println(" 11111");
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource);
simpleJdbcCall.withCatalogName("NAMED_DRIVER_SAVE").withProcedureName("PR_NAMED_DRIVER_SAVE")
.withoutProcedureColumnMetaDataAccess()
.declareParameters(new SqlParameter("P_VCH_NAME", OracleTypes.VARCHAR),
new SqlParameter("P_NUM_NEW_IC_NO", OracleTypes.VARCHAR),
new SqlParameter("P_NUM_OLD_IC_NO", OracleTypes.VARCHAR),
new SqlParameter("P_VCH_GENDER", OracleTypes.VARCHAR),
new SqlParameter("P_VCH_RELATIONSHIP", OracleTypes.VARCHAR),
new SqlParameter("P_NUM_AGE", OracleTypes.NUMBER),
new SqlParameter("P_VCH_DRIVER_EXPERIENCE", OracleTypes.VARCHAR));
SqlParameterSource inputParams = new MapSqlParameterSource()
.addValue("P_VCH_NAME", quotationDO.getNameddrivername())
.addValue("P_NUM_NEW_IC_NO", quotationDO.getNamednewicno())
.addValue("P_NUM_OLD_IC_NO", quotationDO.getNamedoldicno())
.addValue("P_VCH_GENDER", quotationDO.getNamedgender())
.addValue("P_VCH_RELATIONSHIP", quotationDO.getNameddriverrelationship())
.addValue("P_NUM_AGE", quotationDO.getNamedage())
.addValue("P_VCH_DRIVER_EXPERIENCE", quotationDO.getNameddriverexperience());
Map<String, Object> transactionStatus = simpleJdbcCall.execute(inputParams);
System.out.println( transactionStatus);
} catch (Exception e) {
System.out.println(e);
}
}
]RETURN在过程中不起任何作用。您需要为要返回的内容指定一个OUT参数代码>我收到了这个错误[错误]PLS-00372(59:4):PLS-00372:在一个过程中,返回语句不能包含表达式否,不是返回语句,而是。是的,我已将其更改为
P_NUM_AGE In OUT NUMBER,
但是案例1:我需要返回输入输出参数
案例2:我需要返回序列值1)PL/SQ中有两种“子程序”:“过程”和“函数”。根据定义,“过程”不会“返回*任何东西!”。这就是“函数”的作用。2)听起来这里的解决方案是使用OUT或IN-OUT参数。问:你尝试过吗?问:发生了什么事?请查看此处了解更多信息: