存储过程

jdbc,hibernate,mybatis调用存储过程

眉间皱痕 提交于 2019-12-11 16:34:01
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 创建存储过程: **CREATE PROCEDURE productpricing(P_ID IN VARCHAR2,P_COUNT OUT NUMBER) BEGIN SELECT Count(prod_num) AS P_COUNT WHERE prod_id =P_ID FROM products; END;** ============================ jdbc调用: /* * 括号中的问号和存储过程参数进行匹配 */ String sql = "{call productpricing(?,?)}"; // 加载驱动程序 Class.forName("oracle.jdbc.driver.OracleDriver"); // 获取连接对象 Connection con = DriverManager.getConnection(url, uid, pwd); // 获取执行对象 CallableStatement cs = con.prepareCall(sql); cs.setString(1, "1a2b"); // out 注册的index 和取值时要对应 cs.registerOutParameter(2, Types.INTEGER); // 执行SQL命令 cs

mybatis项目中如何调用oracle存储过程(procedure)

送分小仙女□ 提交于 2019-12-11 16:20:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 如题。这篇博客讲诉你如何在在spring+springmvc+mybatis项目中调用oracle的存储过程(procedure),其实主要是mybatis下如何调用存储过程,不带参数的就不说了,就说说带参数的存储过程如传参,获取参数。 1、先在oralce写一个存储过程 create or replace procedure p_test( v_val1 in varchar2, v_val2 out varchar2 ) is v_val3 varchar2(10) :='word'; begin v_val2 := v_val1||v_val3; end; 这个过程什么意思呢?很简单输入一个v_val1,过程定义了一个参数v_val3, v_val2 = v_val1+ v_val3,输出v_val2。顺便说下怎么在oralce里调用存储过程: declare v_test1 varchar2(10); begin p_test('hello ',v_test1); dbms_output.put_line(v_test1); end; 很明显,输出的是hello word 现在进入正题,怎么在mybatis中调用呢? 先建立个xml文件

mybatis调用视图和存储过程

こ雲淡風輕ζ 提交于 2019-12-11 16:13:04
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 现在的项目是以Mybatis作为O/R映射框架,确实好用,也非常方便项目的开发。MyBatis支持普通sql的查询、视图的查询、存储过程调用,是一种非常优秀的持久层框架。它可利用简单的XML或注解用语配置和原始映射,将接口和java中的POJO映射成数据库中的纪录。 一.调用视图 如下就是调用视图来查询收益明细,sql部分如下: <!-- 获取明细 --> <select id ="getContactEarnsDetail" resultType= "java.util.Map" parameterType ="java.lang.Integer"> select title,trade_time,trade_amount from v_contacts_earn where user_id = #{userId} </select > 该视图返回的数据类型为map。 mapper部分如下: 1 List<Map<String, Object>> getContactEarnsDetail(Integer userId); 接口部分如下: List<Map<String, Object>> getContactEarnsDetail(Integer userId); 实现如下: @Override

让Mybatis查询存储过程不那么另类

不问归期 提交于 2019-12-11 16:01:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Mybatis默认查询存储过程的返回值是使用参数传来传去的,从参数里获取返回值总让我感觉怪怪的,特别是在使用接口做Dao的时候,破坏了Dao接口方法的统一性。 然后就有了 mybatis-callable ,获得方式如下: <dependencies> ... <dependency> <groupId>com.github.miemiedev</groupId> <artifactId>mybatis-callable</artifactId> <version>1.0</version> </dependency> ... </dependencies> 配置是这样的: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> <configuration> <plugins> <plugin interceptor="com.github.miemiedev.mybatis.callable

何谓SQLSERVER参数嗅探(转载)

流过昼夜 提交于 2019-12-11 13:51:28
大家听到“ 嗅探 ”这个词应该会觉得跟黑客肯定有关系吧,使用工具嗅探一下参数,然后截获,脱裤o(∩_∩)o 。 事实上,我觉得大家太敏感了,其实这篇文章跟数据库安全没有什么关系,实际上跟数据库性能调优有关 相信大家有泡SQLSERVER论坛的话不多不少应该都会见过“ 参数嗅探 ”这几个字 这里有三篇帖子都是讲述参数嗅探的: SQL写法导致的SQL2008性能问题 Under the Table - How Data Access Code Affects Database Performance 困扰多时的查询语句超时问题 下面我给出一个测试数据库的备份文件,里面有一些表和一些测试数据 ,大家可以去下载,因为我下面用的测试表都是这个数据库里的 只需要还原数据库就可以了,这个数据库是SQL2005版本的,数据库名:AdventureWorks 下面只需要用到三张表,表里面有索引: [Production].[Product] [SalesOrderHeader_test] [SalesOrderDetail_test] 其实简单来讲,参数嗅探我的很通俗的解释就是:SQLSERVER用鼻子嗅不到具体参数是多少 所以他不能选择最合适的执行计划去执行你的查询,所以参数嗅探是一个不好的现象。 想真正了解参数嗅探,大家可以先创建下面两个存储过程 存储过程一: USE

MySQL存储过程

和自甴很熟 提交于 2019-12-11 06:27:57
注:name是存储过程的名字 //TODO:存储过程 //传参 // $aid1 = ‘report_aid’; // m a i n 2 = " c a l l s a m p l e n u m ( ′ " . main2 = "call sample_num('". m a i n 2 = " c a l l s a m p l e n ​ u m ( ′ " . aid1."’)"; // r e s u l t 2 = D b : : q u e r y ( result2 = Db::query( r e s u l t 2 = D b : : q u e r y ( main2); // $res = Db::query(‘call name(:in_param1,in_param2,)’, // [ // ‘in_param1’ => $in_param1, // ‘in_param2’ => $in_param2, // ]); $res = Db::query(‘call name’); //如果存储过程不需要返回数据 Db::execute(‘call name’); 数据库-存储过程代码 传入的参数声明 注: 数据库函数过程(传入的是不同字段时) BEGIN #Routine body goes here... DECLARE curr_time date

在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数、存储过程内的参数)

蹲街弑〆低调 提交于 2019-12-11 00:17:56
原文: 在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数、存储过程内的参数) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。 1、SQL 数据库中的存储过程的参数问题 http://bbs.csdn.net/topics/390640511?page=1#post-396062228 怎么将SQL数据库中的存储过程中的参数既作为输出变量又作为输出变量? --drop proc proc_test--go create proc dbo.proc_test@in int,@out int out,@in_out int outputas select @out = @in + @in_out, --1 + 2 = 3 @in_out = @out + 1 --3 + 1 = 4go declare @in_p intdeclare @out_p intdeclare @in_out_p int set @in_p = 1;set @in_out_p = 2 exec dbo.proc_test @in_p, @out_p out, @in_out_p output select @in_p, --输入参数 @out_p,

数据仓库之抽取数据:通过openrowset执行存储过程

▼魔方 西西 提交于 2019-12-10 23:46:19
原文: 数据仓库之抽取数据:通过openrowset执行存储过程 在做数据仓库时,最重要的就是ETL的开发,而在ETL开发中的第一步,就是要从原OLTP系统中抽取数据到过渡区中,再对这个过渡区中的数据进行转换,最后把经过处理的干净的数据加载到数据仓库中。 目标数据库是sql server,通过openrowset函数调用存储过程,但是存储过程中不能带参数。 1、开启即席查询 --修改高级参数sp_configure 'show advanced options',1go--允许即席分布式查询sp_configure 'Ad Hoc Distributed Queries',1go--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖reconfigure with override go 2、调用存储过程 这种用法最大的好处时,能把存储过程执行的结果select 出来,如果前面写上insert ,就可以插入到表中,非常方便。 但是局限性也很明晰,就是存储过程不能带参数。 在用openrowset函数时,注意参数格式,以及参数之间的字符的格式。 SELECT * FROM OPENROWSET('SQLOLEDB', 'Server=PC0627JVC\MSSQLSERVER2008;Trusted_Connection=yes;database=master',

数据库怎么优化查询的效率

一笑奈何 提交于 2019-12-10 19:39:48
1)数据库设计方面 : a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 c. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。 d. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。 e. 应尽可能的避免更新索引数据列,因为索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新索引数据列

sql_获取存储过程返回数据

一世执手 提交于 2019-12-10 17:39:18
就是在执行存储后,获取存储过程执行的数据并作为其他应的二次使用, 其实在代码中可以说是调用类似,具体操作如下: 创建一个存储过程: use [库名] go set ansi_null on GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE DBO.P_TEST ( @RBACK VARCHAR(20) OUT --这里out就是代表需要返回的 ) AS BEGIN TRY SET @RBACK= (SELECT 2+2) END TRY 以上脚本,就是返回一个2+2等于4的结果 在外部怎么调用,或者其他存储过程脚本里面,如下: declare @RBACK VARCHAR(20) EXEC 库名.dbo.P_TEST @REBACK OUT SELECT @REBACK 执行就是返回4 了,这样就可以比较灵活的使用,调用 在后面的工作中就方便的多 来源: https://www.cnblogs.com/cdm023/p/12017951.html