存储过程

存储过程的执行信息

不打扰是莪最后的温柔 提交于 2019-12-27 04:09:11
近来遇到一个比较困扰的优化问题,存储过程的主体逻辑如下: ALTER PROC [dbo].[DBA_TroubleShooting] AS BEGIN DECLARE @StartTime DATETIME DECLARE @EndTime DATETIME SELECT @StartTime=CONVERT(VARCHAR,GETDATE()-1,112),@EndTime=CONVERT(VARCHAR,GETDATE(),112) DECLARE @Spreader VARCHAR(32) DECLARE loop_cursor CURSOR FOR SELECT spreadAccount FROM dbo.SpreadStatisticsAccount ssa WITH(NOLOCK) --WHERE spreadAccount='LG0537' --分别用LG0537、LG0540测试 OPEN loop_cursor; FETCH NEXT FROM loop_cursor INTO @Spreader WHILE @@FETCH_STATUS = 0 BEGIN -- 日登录用户 DECLARE @DayLoginUserNum INT SELECT @DayLoginUserNum = COUNT(DISTINCT ais.UserId) FROM dbo

存储过程调用bat文件

喜你入骨 提交于 2019-12-27 03:06:48
创建java source CREATE OR REPLACE and COMPILE JAVA SOURCE NAMED exesyscommand as import java . io . * ; public class ExeSysCommand { public static String ExeCmd ( String cmd ) { Process proc = null ; int exitVlue ; try{ System . out . println ( cmd ) ; proc = Runtime . getRuntime ( ) . exec ( cmd ) ; exitVlue = proc . waitFor ( ) ; if ( exitVlue = = 0 ) { return "PASS" ; } else { return "FAIL" ; } } catch ( Exception e ) { return e . getMessage ( ) ; } } public static void main ( String [ ] args ) { System . out . println ( "--------------------------" ) ; System . out . println ( ExeCmd ( args

mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析

穿精又带淫゛_ 提交于 2019-12-26 19:28:21
首先根据这篇文章:http://www.cnblogs.com/coolzdp/p/7717332.html 我们知道存储过程中 SELECT * INTO 如果没有记录是不会往下执行的 ,直接抛出NO_DATA_FOUND异常, 这个在 plsql developer中直接测试执行没问题 ,会报ORA-1403异常。 但是在 mybatis中调用的话就不会抛出 NO_DATA_FOUND异常 , 而是在select * into语句为空时默默的终止执行该过程 。 在服务层采用事务处理的话就有问题了,服务层调用 select * into为空的存储过程处理逻辑肯定是有毛病的,本来应该抛出异常扔给控制器层, 现在只是终止了,后面的语句还会执行,这样就不对了。 我猜测是 mybatis针对 NO_DATA_FOUND异常 做了过滤,捕获后不再抛出了 。 我的处理方法就是如果有select into, 在plsql过程最后 手动捕获 NO_DATA_FOUND异常 ,抛出自定义异常 : EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error('-20000', 'select into没找到数据'); 如果是那种需要提示给用户指出select into必须有记录的原因那么就老老实实的用下面的语句吧: SELECT COUNT(*

MyBatis调用存储过程

泄露秘密 提交于 2019-12-26 19:27:48
  直接看例子:   1、声明接口: public interface CustomRankingRecordMapper { void saveRankCustomInfoProcedure(); }   2、在CustomRankingRecord.xml定义存储过程: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.migu.reading.dao.CustomRankingRecordMapper"> <!-- 调用存储过程更新自定义排行表 --> <update id="saveRankCustomInfoProcedure" statementType="CALLABLE"> {call PROC_CUSTOM_RECORD_UPDATE} </update> </mapper>   3、在Oracle中创建存储过程: CREATE OR REPLACE procedure VCODE.PROC_CUSTOM_RECORD_UPDATE is cursor ACTIVITY_CUR

MyBatis——调用存储过程

时光总嘲笑我的痴心妄想 提交于 2019-12-26 19:27:17
原文:http://www.cnblogs.com/xdp-gacl/p/4270352.html 一、提出需求    查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二、准备数据库表和存储过程 create table p_user( id int primary key auto_increment, name varchar(10), sex char(2) ); insert into p_user(name,sex) values('A',"男"); insert into p_user(name,sex) values('B',"女"); insert into p_user(name,sex) values('C',"男"); -- 创建存储过程(查询得到男性或女性的数量, 如果传入的是0就女性否则是男性) DELIMITER $ CREATE PROCEDURE mybatis.ges_user_count(IN sex_id INT, OUT user_count INT) BEGIN IF sex_id=0 THEN SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='女' INTO user_count; ELSE SELECT COUNT(*) FROM mybatis.p_user

oracle 存储过程

孤街醉人 提交于 2019-12-26 07:28:40
1,procedure 是一个可以用编程的方式来操作SQL的集合; 存储过程的优点? 执行效率很高,因为存储过程是预编译的,即创建时编译,而SQL语句是执行一次,编译一次。调用存储过程可以大大减少同数据库的交互次数。 降低网络通信量,因为存储过程执行的时候,只需要call存储过程名,不需要传递大量的SQL语句。 有利于复用。 存储过程的缺点? 移植性非常差,如果在oracle上写的存储过程,移植到mysql需要修改。 代码可读性差,实现一个简单的逻辑,代码会非常长。 存储过程的用途? 造测试数据:可以使用存储过程,往表里造几百万条数据。 数据同步:两个表之间按照一定的业务逻辑进行数据同步。 数据挖掘。 存储过程注意事项? 数据量大的时候(10万+),一定要做压力测试,有些存储过程在大数据量的情况下才会出现问题。 如果插入或者更新的次数比较多,为了提高效率,可以执行一万次,再commit一次。 如果先插入记录,没有commit,再对这条记录进行更新,会引起死锁。如果先后对同一笔记录进行更新,又没有commit,也会引起死锁。因为后一条语句会等待前一条语句提交。如果出现这种情况,则需要一条条commit。 不要忘记在存储过程里写commit。 2,Oracle什么时候需要commit? DML语言,比如update,delete,insert等 修改表中数据 的需要commit;

SQLServer 存储过程调用

若如初见. 提交于 2019-12-26 01:29:42
带有输入参数和输出的存储过程调用 在sql server中调用方式 简便执行方式 DECLARE @country char(2), @region nvarchar(255), @city nvarchar(255) exec p_dbip_city_sByIp N’103.10.10.10’, @country OUTPUT , @region OUTPUT , @city OUTPUT select @country,@region,@city 标准执行方式 USE [数据库名] GO DECLARE @return_value int, @country char(2), @region nvarchar(255), @city nvarchar(255) EXEC @return_value = [dbo].[存储过程名] @ip = N’103.10.10.0’, @country = @country , @region = @region OUTPUT, @city = @city OUTPUT SELECT @country as N’@country’, @region as N’@region’, @city as N’@city’ SELECT ‘Return Value’ = @return_value GO 来源: CSDN 作者: mango_54

什么是SQL注入式攻击

亡梦爱人 提交于 2019-12-26 00:32:34
什么是SQL注入式攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如: ⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。 ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子: System.Text.StringBuilder query = new System.Text.StringBuilder( "SELECT * from Users WHERE login = '") .Append(txtLogin.Text).Append("' AND password='") .Append(txtPassword.Text).Append("'"); ⑶ 攻击者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。 ⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT

Sqlserver存储过程生成日期维度

浪尽此生 提交于 2019-12-25 18:22:50
话不多说,之前已经有一篇日志是利用oracle的存储过程生成日期维度表,接下来我们就用sqlserver来实现这个操作,如下面的步骤所示 1:创建日期维度表(Dim_time) USE [DW] GO /****** Object: Table [dbo].[Dim_time] Script Date: 12/19/2015 15:29:26 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Dim_time]( [the_date] [int] NOT NULL, [date_name] [nvarchar](30) NULL, [the_year] [int] NULL, [year_name] [nvarchar](30) NULL, [the_quarter] [int] NULL, [quarter_name] [nvarchar](30) NULL, [the_month] [int] NULL, [month_name] [nvarchar](30) NULL, [the_week] [int] NULL, [week_name] [nvarchar](30) NULL, [week_day] [int] NULL, [week_day_name]

存储过程SET NOCOUNT ON的作用

若如初见. 提交于 2019-12-25 17:03:07
在存储过程中,经常用到SET NOCOUNT ON; 作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息。 当SET ONCOUNT ON时候,不返回计数,当SET NOCOUNT OFF时候,返回计数; 即使当SET NOCOUNT ON 时候,也更新@@RowCount; 当SET NOCOUNT on时候,将不向客户端发送存储过程每个语句的DONE_IN_proc消息,如果存储过程中包含一些并不返回实际数据的语句,网络通信流量便会大量减少,可以显著提高应用程序性能; SET NOCOUNT 指定的设置时在执行或运行时候生效,分析时候不生效。 USE Northwind GO SET NOCOUNT OFF; SELECT TOP 5 OrderDate FROM Orders GO SET NOCOUNT ON; SELECT TOP 5 OrderDate FROM Orders GO 来源: 51CTO 作者: binac_ok 链接: https://blog.51cto.com/3357617/2128310