PROCEDURE f_main ( v_subjectcode IN VARCHAR2, --科目编码 v_baim IN VARCHAR2, --业务目的 v_accperiod IN VARCHAR2, --会计区间 v_orient IN VARCHAR2, --方向 v_accbook IN VARCHAR2, --帐套号 v_year IN CHAR, --年 v_con IN VARCHAR2, --是否包含未计帐 v_curdate IN VARCHAR2, --当前日期 v_ret_p OUT DECIMAL ) AS BEGIN v_ret_p := f_main (v_subjectcode, --科目编码 v_baim, --业务目的 v_accperiod, --会计区间 v_orient, --方向 v_accbook, --帐套号 v_year, --年 v_con, --是否包含未计帐 v_curdate ); --DBMS_OUTPUT.put_line ('RetVal = ' || TO_CHAR (v_ret_p)); --当前日期 IF v_ret_p IS NULL THEN v_ret_p := 0; END IF; END;java:sessionbean 部署在weblogic上 Connection con = null; Statement sm = null; ResultSet rs = null; java.math.BigDecimal dQC = null; try { DataSource dataSource = ServiceLocator.getInstance().getDatasource( "jndi/OracleSea", DataSource.class); con = dataSource.getConnection(); if (con == null) { log.error("无法获取数据源!"); } try { log.error("调用getNumber计算值"); log.info(s_subjectcode+s_baim+s_accperiod+s_orient+s_accbook+s_year+s_con+s_curdate); String strSQL = "{call zb_main.f_main(?,?,?,?,?,?,?,?,?)}"; CallableStatement callQC = con.prepareCall(strSQL); callQC.setString(1, s_subjectcode); callQC.setString(2, s_baim); callQC.setString(3, s_accperiod); callQC.setString(4, s_orient); callQC.setString(5, s_accbook); callQC.setString(6, s_year); callQC.setString(7, s_con); callQC.setString(8, s_curdate); callQC.registerOutParameter(9, java.sql.Types.DECIMAL, 7); callQC.execute(); dQC = callQC.getBigDecimal(9); log.error("调用getNumber计算值,完成;dQC="+dQC.toString()); con.close(); } catch (java.sql.SQLException sqlE) { log.error("调用存储过程计算错误!"); System.out.println(sqlE.getMessage()); } } catch (Exception ex) { log.error("method计算公式的值:获取数据源出错!"); ex.printStackTrace(); } return dQC; }
刚又试了一下: PROCEDURE f_main_t ( v_subjectcode IN VARCHAR2, --科目编码 v_baim IN VARCHAR2, --业务目的 v_accperiod IN VARCHAR2, --会计区间 v_orient IN VARCHAR2, --方向 v_accbook IN VARCHAR2, --帐套号 v_year IN CHAR, --年 v_con IN VARCHAR2, --是否包含未计帐 v_curdate IN VARCHAR2, --当前日期 v_ret_p4 OUT DECIMAL ) AS v_ret_p1 DECIMAL; BEGIN --v_ret_p1 := 10000000; v_ret_p1 := f_main_f('4220001','发生','年','借','422','2005','是','2005-11-11'); v_ret_p4 := v_ret_p1; END; 如果在存储过程中直接给变量赋值则可以返回;如果通过函数给变量赋值则不能返回。
v_subjectcode IN VARCHAR2, --科目编码
v_baim IN VARCHAR2, --业务目的
v_accperiod IN VARCHAR2, --会计区间
v_orient IN VARCHAR2, --方向
v_accbook IN VARCHAR2, --帐套号
v_year IN CHAR, --年
v_con IN VARCHAR2, --是否包含未计帐
v_curdate IN VARCHAR2, --当前日期
v_ret_p OUT DECIMAL
)
AS
BEGIN
v_ret_p :=
f_main (v_subjectcode, --科目编码
v_baim, --业务目的
v_accperiod, --会计区间
v_orient, --方向
v_accbook, --帐套号
v_year, --年
v_con, --是否包含未计帐
v_curdate
);
--DBMS_OUTPUT.put_line ('RetVal = ' || TO_CHAR (v_ret_p)); --当前日期
IF v_ret_p IS NULL THEN
v_ret_p := 0;
END IF;
END;java:sessionbean 部署在weblogic上 Connection con = null;
Statement sm = null;
ResultSet rs = null;
java.math.BigDecimal dQC = null; try {
DataSource dataSource = ServiceLocator.getInstance().getDatasource(
"jndi/OracleSea", DataSource.class);
con = dataSource.getConnection();
if (con == null) {
log.error("无法获取数据源!");
} try {
log.error("调用getNumber计算值");
log.info(s_subjectcode+s_baim+s_accperiod+s_orient+s_accbook+s_year+s_con+s_curdate); String strSQL = "{call zb_main.f_main(?,?,?,?,?,?,?,?,?)}";
CallableStatement callQC = con.prepareCall(strSQL); callQC.setString(1, s_subjectcode);
callQC.setString(2, s_baim);
callQC.setString(3, s_accperiod);
callQC.setString(4, s_orient);
callQC.setString(5, s_accbook);
callQC.setString(6, s_year);
callQC.setString(7, s_con);
callQC.setString(8, s_curdate); callQC.registerOutParameter(9, java.sql.Types.DECIMAL, 7); callQC.execute(); dQC = callQC.getBigDecimal(9);
log.error("调用getNumber计算值,完成;dQC="+dQC.toString());
con.close();
}
catch (java.sql.SQLException sqlE) {
log.error("调用存储过程计算错误!");
System.out.println(sqlE.getMessage());
} }
catch (Exception ex) {
log.error("method计算公式的值:获取数据源出错!");
ex.printStackTrace(); }
return dQC; }
PROCEDURE f_main_t (
v_subjectcode IN VARCHAR2, --科目编码
v_baim IN VARCHAR2, --业务目的
v_accperiod IN VARCHAR2, --会计区间
v_orient IN VARCHAR2, --方向
v_accbook IN VARCHAR2, --帐套号
v_year IN CHAR, --年
v_con IN VARCHAR2, --是否包含未计帐
v_curdate IN VARCHAR2, --当前日期
v_ret_p4 OUT DECIMAL
) AS
v_ret_p1 DECIMAL;
BEGIN
--v_ret_p1 := 10000000;
v_ret_p1 := f_main_f('4220001','发生','年','借','422','2005','是','2005-11-11');
v_ret_p4 := v_ret_p1;
END; 如果在存储过程中直接给变量赋值则可以返回;如果通过函数给变量赋值则不能返回。