간단 한 저장 프로시저 및 확장

4777 단어 sql
저장 프로시저
1. 창설
drop PROCEDURE if EXISTS test; create procedure test(in inputParam VARCHAR(32), OUT outParam VARCHAR(32))
begin 
if inputParam=1  then
SET outParam = '2';
  ELSE 
SET outParam = '4';
  END IF;
end ;
2. calltest ('1', @ new) 를 호출 하고 표시 합 니 다.
select @new;
저장 함수
1. 저장 함수 만 들 기 
drop function if EXISTS f1;
create function f1(inputParam VARCHAR(32)) RETURNS varchar(255)
begin 
DECLARE x VARCHAR(255) DEFAULT '';
if  EXISTS(select userId from web_user where userId = inputParam)  then
set x = 1;
  ELSE 
set x = 2;
  END IF;
RETURN x;
end ; 
2. 메모리 함수 호출
select  f1('00304490ec2f48959f98dc2e06783403');
저장 프로 세 스 는 저장 함 수 를 호출 할 수 있 고 저장 함 수 는 저장 프로 세 스 를 호출 할 수 없습니다.
프로젝트 수요 에 따라 쓰 는 저장 과정
1. 수요, 로봇, 실물, 모두 구 매 기록 이 있 습 니 다. 로봇 과 실물 은 두 개의 시계 이 고 각자 의 사용자 정 보 를 저장 합 니 다. 구 매 기록 은 하나의 시계 이 고 로봇 과 실물 은 모두 userId 가 있 으 며 중복 되 지 않 습 니 다.
요구 에 따라 구 매 기록 을 찾 아 구 매 사용자 의 관련 정 보 를 찾 아 냈 다.
2. 저장 프로시저 구현:
drop PROCEDURE if EXISTS test0; create procedure test0(in time varchar(64), timeMin varchar(64), mill INT)   BEGIN   /**변수, 변수 이름 이 커서 에 대응 하 는 필드 이름과 이름 을 바 꿀 수 없 음 을 주의 하 십시오!그렇지 않 으 면 변수 이름 에 값 을 부여 하 는 데 실패 합 니 다! * /DECLARE userId1 varchar(32); DECLARE userName1 varchar(32);    DECLARE userCode1 varchar(32);    DECLARE headImg1 varchar(32);   DECLARE IP1 varchar(32);  DECLARE location1 varchar(255);      DECLARE payTime1 varchar(64);      DECLARE millisecond1 INT;      DECLARE detailId1 INT;  DECLARE done INT DEFAULT FALSE;                                                                                                                           /**커서 에 대응 하 는 sql * / DECLARE mycur CURSOR FOR SELECT userId, IP, location, payTime, millisecond, detail IdFROM webpay_log where UNIX_TIMESTAMP(payTime)*1000+millisecond <= UNIX_TIMESTAMP(time)*1000+mill and payTime > timeMin   order by payTime desc, millisecond desc limit 0 , 50;  
/ * 끝 표 지 를 커서 에 연결 합 니 다. * / DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; / * *임시 표 * / DROP TABLE IF EXISTS temp; create temporary table if not exists temp           (              userId varchar(32) primary key,              userName varchar(32),              userCode varchar(32),              headImg varchar(32),             IP varchar(32) ,            location varchar(255),            payTime varchar(64),            millisecond INT,            detailId INT          );    truncate TABLE temp; / * * 커서 열기 * / OPEN mycur;    /**옮 겨 다 니 며 변수 에 값 을 부여 하고 임시 표 * / emp loop: LOOP 에 저장 합 니 다.                FETCH  NEXT from mycur INTO userId1,IP1,location1,payTime1,millisecond1,detailId1;          if done THEN                 leave emp_loop;         end if;                    IF EXISTS(select robot.userId from web_robot robot where robot.userId = userId1) THEN                                 select robot.userName, robot.userCode, robot.headImg  into userName1, userCode1, headImg1 from web_robot robot where robot.userId = userId1;                 ELSE                         select us.userName, us.userCode, us.headImg  into userName1, userCode1, headImg1 from web_user us where us.userId = userId1;                 END IF;                         insert into temp values(userId1 ,userName1 ,userCode1 ,headImg1 ,IP1 ,location1 ,payTime1 ,millisecond1 ,detailId1 );           end loop;
/ * * 커서 닫 기 * / CLOSE mycur;  
/ * * 출력 * / select * from temp;
/ * * 임시 테이블 삭제 * / DROP TABLE IF EXISTS temp; END 
저장 프로시저 호출 test 0 ("2016 - 12 - 12 11: 45: 57", "2016 - 12 - 08 17: 22: 36", 966)
4. 자바 코드 호출 저장 프로시저 (mybatis, 주해 방식 호출)
저장 과정 에서 데 이 터 를 조회 하지 않 더 라 도 HashMap (키 값 이 맞 는 형식) 으로 돌아 가 야 합 니 다. void 를 쓰 면 오류 가 발생 합 니 다.
이 예 는 여러 개의 데 이 터 를 되 돌려 주기 때문에 List 를 사용 합 니 다.
@SuppressWarnings("rawtypes") @Select("call test0(#{endTime},#{startTime},#{mill})") @Options(statementType= StatementType.CALLABLE ) public List callTest(@Param("endTime")String endTime, @Param("startTime")String startTime, @Param("mill")int mill);
5. 업무 추가, 이상 처리. (계속)
-----------------------------------------------------------------------------------
/ / OUT 가 져 온  CREATE PROCEDURE SP_SEARCH2(IN p_name CHAR(20),OUT p_int INT)   BEGIN  IF p_name is null or p_name='' THEN  SELECT * FROM t_user;   ELSE  SELECT * FROM t_user WHERE USER_NAME LIKE p_name;   END IF;  SELECT FOUND_ROWS() INTO p_int;   END //   CALL SP_SEARCH2( ' %' ,@p_num);  SELECT @p_num;
글:
http://www.jb51.net/article/70677.htm

좋은 웹페이지 즐겨찾기