本帖最后由 spiral 于 2013-4-28 09:55 编辑
Q:怎么调用存储过程并返回值
A:具体参考如下例子:
- /**
- *函数库名称 call_Product
- *getConnection(application)//获取数据库连接的函数
- *callMax(p_id) //调用存储过程的函数
- */
- function getConnection(application){
- var approcess= createProcess("cn.myapps.core.deploy.application.ejb.ApplicationProcess");//实例化应用业务处理类
- var dtprocess= new Packages.cn.myapps.core.dynaform.dts.datasource.ejb.DataSourceProcessBean();//实例化数据源业务处理类
- var appvo = approcess.doView(application);//获取应用VO对象
- var sourceid =appvo.getDatasourceid();//获取应用数据源ID
- var dtvo=dtprocess.doView(sourceid);
- if (dtvo != null) {
- var username = dtvo.getUsername();
- var password = dtvo.getPassword();
- var driver = dtvo.getDriverClass();
- var url = dtvo.getUrl();
- var poolsize = dtvo.getPoolsize();
- poolsize = poolsize!=null && poolsize.length()>0? dtvo.getPoolsize() : "10";
- var timeout = dtvo.getTimeout();
- timeout = timeout!=null && timeout.length()>0? dtvo.getTimeout() : "5000";
- var dataSource = new Packages.cn.myapps.base.dao.PersistenceUtils.getDBCPDataSource(username, password, driver, url, poolsize,timeout);
- return dataSource.getConnection();
- }
- return null;
- }
- /**
- * 调用存储过程
- */
- function callMax(p_id){
- //获取连接
- var max = "";
- var conn = getConnection(getApplication());
- var cs = null;
- try {
- cs = conn.prepareCall("{call p_test(?,?)}");
- cs.setString(1,p_id);
- //设置第一个输入参数的值为110
- cs.registerOutParameter(2, Packages.java.sql.Types.CHAR);
- cs.execute();
- max = cs.getString(2);
- $PRINTER.println("***************************max"+max);
- } catch (e) {
- } finally {
- try {
- if(cs != null){
- cs.close();
- }
- if(conn != null){
- conn.close();
- }
- } catch (ex) {
- }
- }
- return max;
- }
复制代码 调用语法:- #include "call_Product";
- callMax(p_id); //调用存储过程的函数
复制代码 |