zoukankan      html  css  js  c++  java
  • mysql 自己定义存储过程和触发器

    mysql 自己定义存储过程和触发器
    
    --存储过程示范
    	DROP PROCEDURE IF EXISTS PRO_TEST;
    	CREATE PROCEDURE PRO_TEST(IN NUM_IN INT,OUT NUM_OUT INT,INOUT NUM_INOUT)
    	BEGIN
    		//DO ANYTHING YOU WANT
    	END;
    	
    	參数解释:
    		in : 就是输入參数。输入參数是会被传入到存储过程作为參数使用。改变它的值将不会改变其原本值,相当于是值传递
    		out: 此为输出參数,在存储过程中为给其值时,哪怕之前传入值,其值也仅仅是NULL,相当于是在存储过程中新建一个值并付给out參数并输出
    		inout:此为输入输出參数。能够理解为前两者之和。最为简单的就是理解为依照对象传递
    		
    	在命令行中怎样调用:
    		SET @NM_IN=1,@NM_OUT=2,@NM_INOUT=3;
    		call PROC_TEST(@NM_IN,@NM_OUT,@NM_INOUT);
    	
    	在java中怎样调用:
    		想办法得到connection,在hibernate中为getSession().connection();
    		使用Java.Sql.CallableStatemet call=connection().prepareStatement("call PROC_TEST(1,2,3)");
    		call.executeQuery()将返回ResultSet对象,call.executeUpdate()将会返回受影响的行数。
    		
    		
    --触发器演示样例
    	触发器依照触发类型可分为:INSERT,UPDATE,DELETE触发器,
    	依照触发时间可分为:BEFORE,AFTER,
    	依照内容新旧可分为:OLD,NEW,当中删除操作仅仅有OLD,新增操作仅仅有NEW,改动操作两者皆有
    	
    	eg:没改动user表一次,就往user_back表插入改动之前和改动之后的数据:
    	CREATE TRIGGER TRI_UPGRADE_USER BEFORE UPDATE ON USER FOR EACH ROW
    	BEGIN
    		INSERT INTO USER_BACK(USERNAME,USERPWD) VALUES(OLD.USERNAME,OLD.USERPWD);
    		INSERT INTO USER_BACK(USERNAME,USERPWD) VALUES(NEW.USERNAME,NEW.USERPWD);
    	END;
    	
    	这样就搞定了

  • 相关阅读:
    informatica 学习日记整理
    informatica 学习日记整理
    执行异步任务,并记录时间
    Calling a Web API From a .NET Client (C#)
    PIVOT运算符使用(动态行转列)
    Replication--如何使用快照来初始化化请求订阅
    Replication--备份初始化需要还原备份么?
    疑难杂症--SQL SERVER 18056的错误
    TSQL--如何突破PRINT的8000大限
    执行计划--在存储过程中使用SET对执行计划的影响
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5247199.html
Copyright © 2011-2022 走看看