精华内容
下载资源
问答
  • cx_Oracle如何获取存储过程返回值

    千次阅读 2016-06-01 11:17:01
    示意如何获取存储过程返回值

    关于如何通过cx_oracle调用存储过程,oracle, IBM官网上已有好几篇文章做了说明,但是无一例外,都没有提到如何获取存储过程的返回值,下例示意如何获取存储过程的返回值

    假设有一个存储过程(代码略),有唯一一个output值,即为存储过程返回值,返回-1为执行失败,1为成功


    声明python类型的存储过程返回值

    result= cursor.var(cx_Oracle.STRING)

    调用存储过程

    x =cursor.callproc("proc_test",[result])

    #print result

    不可直接使用result得到存储过程返回值,要调用getvalue()

    if result.getvalue()== '1':

        print u'成功!'

    else:

        print u'失败'



    参考:

    结合使用 Oracle Database 11g 和 Python

    精通 Oracle+Python 系列


    展开全文
  •   A存储过程里,如何取回B存储过程返回值?   例如: alter Proc [Proc_]     在存储过程中使用存储过程返回值

     

     

    A存储过程里,如何取回B存储过程的返回值?

     

    例如:

    alter Proc [Proc_]

     

     

    在存储过程中使用存储过程的返回值

    展开全文
  • ASP.NET 里接收存储过程返回值,需要定义参数. 而不是 ExecuteNoQuery的结果. using (SqlConnection cn = new SqlConnection(this.ConnectionString)) ...

    http://dev.mjxy.cn/a-How-to-receive-the-return-value-stored-procedure.aspx

    ASP.NET 里接收存储过程的返回值,需要定义参数. 而不是 ExecuteNoQuery的结果.

    using (SqlConnection cn = new SqlConnection(this.ConnectionString))

                {

                    SqlCommand cmd = new SqlCommand("Get4LayerIsA", cn);

                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add("@LeftID", SqlDbType.NVarChar).Value = leftId;

                    cmd.Parameters.Add("@RightID", SqlDbType.NVarChar).Value = rightId;

                    cmd.Parameters.Add("@returnvalue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;

                    cn.Open();

                     ExecuteNonQuery(cmd);

                     int retVal = (int)cmd.Parameters["@returnvalue"].Value;

                    return (retVal == 1);

                }

    转载于:https://www.cnblogs.com/xingquan/archive/2011/07/14/2105969.html

    展开全文
  • 本文介绍JdbcTemplate调用数据库存储过程的几种常见用法及一个自定义封装函数:execProc,通过调用execProc可实现只... 一、数据库中创建存储过程(函数) 1、proc_jdbc_student_add,新增一条学生记录,无返回值C...

        本文介绍JdbcTemplate调用数据库存储过程的几种常见用法及一个自定义封装函数:execProc,通过调用execProc可实现只需要少量代码即可完成JdbcTemplate对存储过程的调用。

        环境:mysql5.6,jdk1.8,spring3.2.5。

        一、数据库中创建存储过程(函数)

        1、proc_jdbc_student_add,新增一条学生记录,无返回值

    CREATE DEFINER=`user`@`%` PROCEDURE `proc_jdbc_student_add`(IN `name` varchar(30), IN age int)
    begin
    insert into jdbc_student (name, age) values(name, age);
    end

        2、proc_jdbc_student_outpara,通过out para返回name,age

    CREATE DEFINER=`user`@`%` PROCEDURE `proc_jdbc_student_outpara`(IN in_id int, OUT out_name varchar(30), OUT out_age int)
    begin
    select name, age into out_name, out_age from jdbc_student where id = in_id;
    end

        3、proc_jdbc_student_resultset,返回结果集

    CREATE DEFINER=`user`@`%` PROCEDURE `proc_jdbc_student_resultset`(IN in_age_min int, IN in_age_max int)
    BEGIN
    select * from jdbc_student where age between in_age_min and in_age_max;
    end

    二、jdbcTemplage调用存储过程常见3种情形

    1、无返回值

    public static void main(String[] args) {
    	AbstractApplicationContext context = new ClassPathXmlApplicationContext("jdbc.xml");
    	JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
    		
    	proc_no_return(jdbcTemplate);
    		
    	context.close();
    }
    public static void proc_no_return(JdbcTemplate jdbcTemplate) {
    	String sql = "call proc_jdbc_student_add('user2',28)";
    	jdbcTemplate.execute(sql);
    	//
    	Map<String, Object> map = 
    		jdbcTemplate.queryForMap("select * from jdbc_student where name = 'user2'");
    	System.out.println(map);	//{id=11, name=user2, age=28}
    }

    2、有返回值,out类型参数值

    public static void main(String[] args) {
    	AbstractApplicationContext context = new ClassPathXmlApplicationContext("jdbc.xml");
    	JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
    		
    	proc_with_outparas(jdbcTemplate);
    		
    	context.close();
    }
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static void proc_with_outparas(JdbcTemplate jdbcTemplate) {   
            String result = (String) jdbcTemplate.execute(   
               new CallableStatementCreator() {   
                  public CallableStatement createCallableStatement(Connection con) throws SQLException {   
                     String storedProc = "{call proc_jdbc_student_outpara (?,?,?)}";
                     CallableStatement cs = con.prepareCall(storedProc);   
                     cs.setInt(1, 1);// 设置输入参数的值   
                     cs.registerOutParameter(2, Types.VARCHAR);	// 注册输出参数的类型
                     cs.registerOutParameter(3, Types.INTEGER);
                     return cs;
                  }   
               }, new CallableStatementCallback() {   
                   public Object doInCallableStatement(CallableStatement cs) 
                		   throws SQLException, DataAccessException {   
                     cs.execute();
                     return String.format("name = %s, age = %d", cs.getString(2), cs.getInt(3));   
               }   
            });
            System.out.println(result);	//name = lizhuo, age = 34
    } 

    备注:

        1)返回out参数,通常可以通过select 语句转化为返回结果集;

        2)个别数据库可以通过out参数返回结果集的,那么需要将out参数转换为ResultSet,然后遍历ResultSet得到记录集

    3、有返回值,返回结果集

    public static void main(String[] args) {
    	AbstractApplicationContext context = new ClassPathXmlApplicationContext("jdbc.xml");
    	JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
    		
    	proc_with_resultset(jdbcTemplate);
    		
    	context.close();
    }
    @SuppressWarnings({ "unchecked", "rawtypes" })
        public static void proc_with_resultset(JdbcTemplate jdbcTemplate) {   
            jdbcTemplate.execute(   
               new CallableStatementCreator() {   
                  public CallableStatement createCallableStatement(Connection con) throws SQLException {   
                     String storedProc = "{call proc_jdbc_student_resultset (?,?)}";   
                     CallableStatement cs = con.prepareCall(storedProc);   
                     cs.setInt(1, 30);	//设置输入参数的值
                     cs.setInt(2, 35);
                     return cs;
                  }   
               }, new CallableStatementCallback() {   
                   public Object doInCallableStatement(CallableStatement cs) 
                		   throws SQLException, DataAccessException {   
                     cs.execute();
                     ResultSet rs = cs.getResultSet();
                     if(rs!=null) {
                    	 while(rs.next()) {
                    	 	System.out.println(String.format("id = %d, name = %s, age = %d", 
                    	 		rs.getInt("id"), rs.getString("name"), rs.getInt("age")));
                    	 }
                     }
                     return null;
               }
            });
            // 执行结果:
            // id = 1, name = lizhuo, age = 34
            // id = 6, name = BB, age = 34
            // id = 8, name = DD, age = 32
    }

    三、自定义封装,实现存储过程统一调用

    1、ProcResult.java,存储过程调用返回结果

    package com.marcus.spring.jdbc;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class ProcResult<T> {
    	/* 首影响行数 */
    	private int updateCount = 0;
    	
    	/* 返回结果集 */
    	private List<T> resultSet;
    	
    	/* 返回单个对象 */
    	private T resultObj;
    	
    	/* 返回out参数 */
    	private Map<Integer, Object> outParas = new HashMap<Integer, Object>();
    
    	public int getUpdateCount() {
    		return this.updateCount;
    	}
    
    	public void setUpdateCount(int updateCount) {
    		this.updateCount = updateCount;
    	}
    	
    	public void setResultSet(List<T> list) {
    		this.resultSet = list;
    	}	
    	
    	public List<T> getResultSet() {
    		return this.resultSet;
    	}
    	
    	public void setResultObj(T obj) {
    		this.resultObj = obj;
    	}
    	
    	public T getResultObj() {
    		if (this.resultObj != null) {
    			return this.resultObj;
    		} else {
    			return this.resultSet != null && this.resultSet.size() > 0 ? this.resultSet.get(0) : null;
    		}
    	}
    	
    	public Map<Integer, Object> getOutParas() {
    		return outParas;
    	}
    
    	public void setOutParas(Map<Integer, Object> outParas) {
    		this.outParas = outParas;
    	}
    }

    2、BaseJdbcDao.java, 统一调用函数

    package com.marcus.spring.jdbc;
    
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.dao.DataAccessException;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.CallableStatementCallback;
    import org.springframework.jdbc.core.CallableStatementCreator;
    import org.springframework.jdbc.core.ColumnMapRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    import org.springframework.jdbc.core.SingleColumnRowMapper;
    
    public class BaseJdbcDao {
    	private JdbcTemplate jdbcTemplate;
    	
    	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    		this.jdbcTemplate = jdbcTemplate;
    	}
    	
    	@SuppressWarnings("unchecked")
    	public <T> List<T> queryForList(String sql, Class<T> tClass, Object... args) {
    		RowMapper<T> rowMapper = null;
    		if (Map.class.isAssignableFrom(tClass)) {
    			rowMapper = (RowMapper<T>) new ColumnMapRowMapper();
    		} else if (String.class.equals(tClass) || Integer.class.equals(tClass) || Long.class.equals(tClass)) {
    			rowMapper = new SingleColumnRowMapper<T>(tClass);
    		} else {
    			rowMapper = new BeanPropertyRowMapper<T>(tClass);
    		}
    		List<T> list = jdbcTemplate.query(sql, rowMapper, args);
    		return list;
    	}
    	
    	public <T> T queryForObject(String sql, Class<T> tClass, Object... args) {
    		List<T> list = queryForList(sql, tClass, args);
    		return list == null || list.isEmpty() ? null : list.get(0);
    	}
    	
    	/**
    	 * @see BaseJdbcDao#execProc(String, Class, Map, Object...)
    	 */
    	@SuppressWarnings("rawtypes")
    	public  ProcResult execProc(String sql, Map<Integer, Integer> outParas, Object... inParas) {
    		return execProc(sql, Object.class, outParas, inParas);
    	}
    	
    	/**
    	 * 调用存储过程.
    	 * @param sql 如:{call proc_jdbc_student_getname (?,?,?)}
    	 * @param tClass	返回结果集对象类型
    	 * @param outParas out参数类型, Map<参数索引位置, java.sql.Types>
    	 * @param inParas in类型参数值
    	 * @return ProcResult<T>
    	 */
    	@SuppressWarnings({ "unchecked", "rawtypes" })
    	public <T> ProcResult<T> execProc(String sql, Class<T> tClass, Map<Integer, Integer> outParas, Object... inParas) {
    		final ProcResult<T> procResult = new ProcResult<T>();
    		final String final_sql = sql;
    		final Object[] final_inparas = inParas;
    		final Map<Integer, Integer> final_outparas = outParas;
    		final Class<T> final_tClass = tClass;
    		jdbcTemplate.execute(new CallableStatementCreator() {
    			public CallableStatement createCallableStatement(Connection con) throws SQLException {
    				CallableStatement cs = con.prepareCall(final_sql);
    				if (final_inparas != null && final_inparas.length > 0) {
    					for (int i = 0; i < final_inparas.length; i++) {
    						cs.setObject(i + 1, final_inparas[i]);
    					}
    				}
    				if (final_outparas != null) {
    					for (Integer key : final_outparas.keySet()) {
    						cs.registerOutParameter(key, final_outparas.get(key));
    					}
    				}
    				return cs;
    			}
    		}, new CallableStatementCallback() {
    			public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
    				cs.execute();
    
    				if (final_outparas != null) {
    					Map<Integer, Object> outParaResult = new HashMap<Integer, Object>();
    					for (Integer key : final_outparas.keySet()) {
    						outParaResult.put(key, cs.getObject(key));
    					}
    					procResult.setOutParas(outParaResult);
    				}
    				procResult.setUpdateCount(cs.getUpdateCount());
    				ResultSet result = cs.getResultSet();
    				List<T>  list = new ArrayList<T>();
    				if(result!=null) {
    					RowMapper<T> rowMapper = null;
    					if (Map.class.isAssignableFrom(final_tClass)) {
    						rowMapper = (RowMapper<T>) new ColumnMapRowMapper();
    					} else if (String.class.equals(final_tClass) || Integer.class.equals(final_tClass) || Long.class.equals(final_tClass)) {
    						rowMapper = new SingleColumnRowMapper<T>(final_tClass);
    					} else {
    						rowMapper = new BeanPropertyRowMapper<T>(final_tClass);
    					}
    					int rowNum = 1;
    					while(result.next()) {
    						list.add(rowMapper.mapRow(result, rowNum++));
    					}
    					procResult.setResultSet(list);
    				}
    				return null;
    			}
    		});
    		return procResult;
    	}
    }

    3、存储过程统一调用示例

    public static void main(String[] args) {
    	AbstractApplicationContext context = new ClassPathXmlApplicationContext("jdbc.xml");
    	BaseJdbcDao jdbcDao = (BaseJdbcDao) context.getBean("jdbcDao");
    	
    	// 无返回值
    	System.out.println("无返回值,procResult.getUpdateCount获取受影响行数: ");
    	String sql = "{call proc_jdbc_student_add (?,?)}";
    	ProcResult procResult1 = jdbcDao.execProc(sql, null, "user3", 31);
    	System.out.println("updateCount: " + procResult1.getUpdateCount());
    	System.out.println();
    	
    	// 有返回值 out paras
    	System.out.println("有返回值,通过out参数体现,procResult.getOutParas获取:");
    	sql = "{call proc_jdbc_student_outpara (?,?,?)}";
    	Map<Integer, Integer> outParas = new HashMap<Integer, Integer>();
    	outParas.put(2, Types.VARCHAR);
    	outParas.put(3, Types.INTEGER);
    	ProcResult procResult2 = jdbcDao.execProc(sql, outParas, 1);
    	System.out.println(procResult2.getOutParas());
    	System.out.println();
    	
    	// 返回结果集List<Student>,procResult.getResultSet()获取
    	System.out.println("有返回值,返回结果集List<Student>,procResult.getResultSet()获取: ");
    	ProcResult<Student> procResult3 = jdbcDao.execProc("{call proc_jdbc_student_resultset (?,?)}", 
    			Student.class, null, 30, 35);
    	List<Student> list = procResult3.getResultSet();
    	System.out.println(list);
    	
    	// 取单个返回对象Student
    	System.out.println("取单个返回对象Student: ");
    	Student student = procResult3.getResultObj();
    	System.out.println(student);
    }

    控制台输出如下:

    无返回值,procResult.getUpdateCount获取受影响行数: 
    updateCount: 1
    
    有返回值,通过out参数体现,procResult.getOutParas获取:
    {2=lizhuo, 3=34}
    
    有返回值,返回结果集List<Student>,procResult.getResultSet()获取: 
    [Student [id=1, name=lizhuo, age=34], Student [id=6, name=BB, age=34], Student [id=8, name=DD, age=32], Student [id=13, name=user3, age=31], Student [id=14, name=user3, age=31]]
    取单个返回对象Student: 
    Student [id=1, name=lizhuo, age=34]

    四、jdbc.xml, spring bean配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context" 
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd">
        
       <!-- Initialization for data source -->
       <bean id="dataSource" 
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
          <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
          <property name="url" value="jdbc:mysql://47.*.*.*:3306/lmdgh_demo?useUnicode=true&characterEncoding=utf-8"/>
    	  <property name="username" value="user" />
    	  <property name="password" value="pwd" />
       </bean>
    
       <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
          <property name="dataSource" ref="dataSource"></property> 
       </bean>
       
       <bean id="jdbcDao" class="com.marcus.spring.jdbc.BaseJdbcDao">  
          <property name="jdbcTemplate" ref="jdbcTemplate"></property>
       </bean>
    </beans>

    展开全文
  • SqlServer如何获取存储过程返回值 - 法号阿兴 - 博客园.html(https://www.cnblogs.com/xuliangxing/p/7356713.html) 1、 1.Output参数返回值 1 CREATE PROCEDURE [dbo].[upInformation]( 2 @age int ,...
  • 定义如下存储过程: create PROCEDURE mytest ( @returnval decimal OUTPUT --定义一个输出变量 ) as DECLARE @amount DECIMAL DECLARE mycursor CURSOR FOR SELECT Amount FROM dbo.test --定义一个游标 OPEN ...
  • 1.Output参数返回值 1 CREATE PROCEDURE [dbo].[upInformation]( 2 @age int , 3 @id bigint OUTPUT 4 ) 5 AS 6 BEGIN 7 SET NOCOUNT ON; 8 BEGIN 9 INSERT INTO [Information](age ) 10 VALUE...
  • delimiter//#存储过程newTitlecreateprocedurenewTitle(inpostNamevarchar(50),inuserIdint(8),incontenttext,inwriteTimedatetime,indownvarchar(50),inpicturevarchar(50),inbnvarc...delimiter //#存储过程...
  • https://blog.csdn.net/tlammon/article/details/51010676本文拟以SYBASE ASE 10.X和11.X数据库为例,说明如何在PB脚本当中获取存储过程返回值。作为一个存储过程,其输出的结果数据可能包括三类:SELECT结果集、...
  • 现在的问题是如何获得存储过程本身设定的返回值存储过程如下:CREATE PROCEDURE test_stuff.get_lastpoll()BEGINDECLARE POLLTIME TIMESTAMP DEFAULT NULL;START TRANSACTION;SELECT poll_date_timeFROM test...
  • 本文拟以SYBASE ASE 10.X和11.X数据库为例,说明如何在PB脚本当中获取存储过程返回值。作为一个存储过程,其输出的结果数据可能包括三类:SELECT结果集、RETURN结果、OUTPUT参数。尽管输出方式众多,但PB脚本仅仅...
  • 在Delphi中如何获得SQL中存储过程返回值? 示例存储过程:create procedure proc_loginusername varchar(20),password varchar(20)asdeclare @result intselect @result=count(*) from loginuser ...
  • 变量赋值写在存储过程名称前面,不是exec前面。     declare @rst int exec @rst=[SP_iApplicationStat_ForSingle] '2012-02-14 00:00:00', '2012-02-14 23:59:59' select @rst        ...
  • 如何在asp.net中获取存储过程返回值。 收藏 在做用户注册的时候,往往需要返回用户注册的ID,并把ID保存在COOKIE中,下面的例子就是如何获取注册用户ID的例子。 1、建立数据库test,新建一张表 users: CREATE ...
  • 使用ibatis调用存储过程,mysql里面测试能够正确返回一个id,但是在ibatis中调用存储过程之后,没有办法获取存储过程返回的那个id, 求助中....ing 相关代码如下: xml 代码 {call UP_...
  • 今天有位朋友问我如何在Data Access Application Block中得到存储的过程的返回值,我才发现自己以前写的文章中确实没提到这方面的问题,现在来补充一下,具体的解决方法如下:1、首先建立一个具有返回值存储过程,作为...
  • 除了输入和输出参数之外,存储过程还可以具有返回值。以下示例阐释 ADO.NET 如何发送和接收输入参数、输出参数和返回值,其中采用了这样一种常见方案:将新记录插入其中主键列是自动编号字段的表。该示例使用输出...
  • query.prepare("exec pro ?, ?, ?"); query.bindValue(0,temp1); query.bindValue(1,temp2); query.bindValue(2, "0", QSql::Out); QString strReturn; bool bFlag = query....我读出的返回值strReturn不对
  • 定义如下存储过程: create PROCEDURE mytest (@returnval decimal OUTPUT --定义一个输出变量)asDECLARE @amount DECIMALDECLARE mycursor CURSOR FOR SELECT Amount FROM dbo.test --定义一个游标OPEN mycursor ...
  • 存储过程: CREATE PROCEDURE [test](@Name nvarchar(50))ASbegin insert into testTable(Name) values(@Name ) return @@IDENTITY endGO 得到返回值用什么?____________________________________________________ ...
  • php与mssql存储过程返回值

    千次阅读 2011-01-12 10:37:00
    最近有个项目需要用php调用mssql的存储过程,使用中发现一个问题,无论如何取不到存储过程返回值。查了不少资料才找到原因。写一下找到的解决办法,给有需要的人看看。先写一个测试用的mssql存储过程TestALTER ...
  • 1.获取Return返回值 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnStr"].ToString()); conn.Open(); SqlCommand MyCommand = new SqlCommand("nb_... //存储过程名字

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 566
精华内容 226
关键字:

存储过程如何返回值