사용자 도구

사이트 도구


mariadb설명
  아래 Maria DB의 C.R.U.D 예시를 참고하기 바랍니다.
  구체적인 MariaDB 사용 방법은 별도 공부 하시길...
  참고로 MySQL과 거의 같습니다.

1. Select Procedure

# 프로시져명 'PKG_SYS$GET_WH_LIST' 에 PKG_SYS$ 은 오라클과의 호환성을 위해유지 해야함
CREATE DEFINER=`dev`@`%` PROCEDURE `sec_dev`.`PKG_SYS$GET_WH_LIST`(	
   # =================== 사용자 파라미터
   IN A_ITEM_KIND VARCHAR(20),
   # =================== 이하 모든 프로시져에 필수포함
   OUT N_RETURN INT,           
   OUT V_RETURN VARCHAR(4000)
  )
  begin
      
      DECLARE A_WH_KIND VARCHAR(20); # 내부에 필요한 변수

      DECLARE EXIT HANDLER FOR SQLEXCEPTION 
        CALL USP_SYS_GET_ERRORINFO_ALL(V_RETURN, N_RETURN);  # 예기치않은 오류가 발생했을때 처리

      # ======================  조회하는 sql
      SELECT
         A.PLANT,
         A.WH_ID,
         A.WH_CD,
         A.WH_NM, ...
         A.MODI_KEY        # ========== 화면에서 update나 delete가 수반된다면 필수 포함
      FROM WH_MST A
         INNER JOIN sys_data b ON a.WH_KIND = b.data_id
      WHERE  b.FULL_PATH LIKE concat('%',A_ITEM_KIND, '%')
        AND A.USE_YN = 'Y';

      # 조회 결과를 호출한 Client에 돌려주는 out 변수
      SET N_RETURN = 0;
      SET V_RETURN = '조회 되었습니다.';
  end

2. Insert Procedure

  CREATE DEFINER=`app`@`%` PROCEDURE `sec_dev`.`PKG_SYS$SET_PROG_INSERT`(
      INOUT A_PROG_ID   BIGINT # ========== 채번값을 돌려주기 위한 INOUT 파라미터
      IN    A_CODE      VARCHAR(100),
      IN    A_NAME      VARCHAR(100),
      IN    A_KIND      DECIMAL,
      IN    A_A_ADD     INT,
      IN    A_A_DELETE  INT,
      IN    A_A_SAVE    INT,
      IN    A_A_PRINT   INT,
      IN    A_USE_YN    CHAR(1),
      IN    A_USER_ID   DECIMAL, #======== 로그인한 사용자의 ID 필수
      # ================================== 아래 필수
      OUT   N_RETURN    INT,
      OUT   V_RETURN    VARCHAR(4000)
  )
  PROC:BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION 
  BEGIN 
  	SET N_RETURN = -1;
  	CALL USP_SYS_GET_ERRORINFO(V_RETURN); 
  END;
 
  SET N_RETURN = -1;
  SET V_RETURN = '저장에 실패 하였습니다.';
  
  SET A_PROG_ID = NEXTVAL(sq_com); 필수키에 대한 채번
  
  INSERT INTO SYS_PROG
  (PROG_ID,
     CODE,
     NAME,
     KIND,
     A_ADD,
     A_DELETE,
     A_SAVE,
     A_PRINT,
     USE_YN,
     INSERT_ID,
     UPDATE_ID,
     MODI_KEY)
    SELECT A_PROG_ID,
           A_CODE,
           A_NAME,
           A_KIND,
           A_A_ADD,
           A_A_DELETE,
           A_A_SAVE,
           A_A_PRINT,
           A_USE_YN,
           A_USER_ID,
           A_USER_ID,
           0;
  # ===================================== 저장에 성고한 행의 갯수를 파악하여 0 이면 오류(Rollback)처리
  if ROW_COUNT () > 0 then 
  	SET N_RETURN = 0;
  	SET V_RETURN = '저장 성공';
  else
  	LEAVE PROC;  # ==================== N_RETURN의 값이 0 이 아닌상태에서 프로시져를 종료하게 되면 RollBack됨.
  end if;
  
END

3. Udate Procedure

  CREATE DEFINER=`app`@`%` PROCEDURE `sec_dev`.`PKG_SYS$SET_PROG_UPDATE`(
  	IN `A_PROG_ID` DECIMAL,
  	IN `A_CODE` VARCHAR(30),
  	IN `A_NAME` VARCHAR(200),
  	IN `A_KIND` DECIMAL,
  	IN `A_A_ADD` CHAR(1),
  	IN `A_A_DELETE` CHAR(1),
  	IN `A_A_SAVE` CHAR(1),
  	IN `A_A_PRINT` CHAR(1),
  	IN `A_USE_YN` CHAR(1),
      # ====================================== 아래 필수요소
  	IN `A_MODI_KEY` DECIMAL,
  	IN `A_USER_ID` DECIMAL,
  	OUT `N_RETURN` INT,
  	OUT `V_RETURN` VARCHAR(4000)
  )
  PROC:BEGIN
   DECLARE EXIT HANDLER FOR SQLEXCEPTION
   BEGIN
  	SET N_RETURN = -1;
   	CALL USP_SYS_GET_ERRORINFO(V_RETURN);
   END;
 
   SET N_RETURN = -1;
   SET V_RETURN = '저장에 실패 하였습니다.';
 
    UPDATE SYS_PROG
       SET NAME      = A_NAME,
           KIND      = A_KIND,
           CODE	   = A_CODE,
           A_ADD     = A_A_ADD,
           A_DELETE  = A_A_DELETE,
           A_SAVE    = A_A_SAVE,
           A_PRINT   = A_A_PRINT,
           USE_YN    = A_USE_YN,
           UPDATE_ID = A_USER_ID,      # ========== 업데이트하는 사용자를 명시한다.
           UPDATE_DT = NOW(),          # ========== 업데이트 시각
           MODI_KEY  = MODI_KEY + 1    # ========== 업데이트된 카운트
     WHERE PROG_ID = A_PROG_ID
       AND MODI_KEY = A_MODI_KEY;      # ========== 조회당시 테이블의 업데이트 횟수를 가져와 
                                       #   그 사이 다른 프로그램에 의해 업데이트된 이력이 있는지 확인하고 
                                       #   그렇다면 오류처리하기 위해
       
  	IF ROW_COUNT () = 0 THEN
  	   SET N_RETURN = -1;
  	   LEAVE PROC;
  	END IF;  
  
  	SET N_RETURN = 0;
  	SET V_RETURN = '저장 성공';
  END
  

4. Delete Procedure

 
  CREATE DEFINER=`root`@`%` PROCEDURE `sec_dev`.`PKG_EMPL018$SET_INSA_DAY_INOUT_DELETE`(	
  	IN A_COMP_ID varchar(10),
  	IN A_OID bigint(20),
      # =================================== 이하 필수 요소
  	IN A_USER_ID BIGINT,
  	IN A_MODI_KEY bigint(20),
  	OUT N_RETURN INT,
  	OUT V_RETURN VARCHAR(4000)
  	)
  begin
  	DECLARE EXIT HANDLER FOR SQLEXCEPTION 
  	CALL USP_SYS_GET_ERRORINFO_ALL(V_RETURN, N_RETURN); 
  
  	SET N_RETURN = 0;
    	SET V_RETURN = '삭제되었습니다.'; 
    	
    	UPDATE insa_day_inout
    	set DELETE_YN = 'Y',
  		UPDATE_ID = A_UPDATE_ID, # ====== 삭제한 사용자
  		UPDATE_DT = NOW(),       # ====== 삭제 일시
  		MODI_KEY = MODI_KEY + 1  # ====== 업데이트 카운트
  	where COMP_ID = A_COMP_ID
  	  and OID = A_OID   # =================== Table 키
  	  and MODI_KEY = A_MODI_KEY; # ========== 조회당시의 업데이트 카운트
  	
  	IF ROW_COUNT() = 0 THEN
        SET N_RETURN = -1;
        SET V_RETURN = '삭제에 실패하였습니다. \n\r\n\r 조회된 데이터가 변경되었습니다. 다시 조회후 삭제하세요'; 
    	END IF;
  END

↑ 상위로 가기

mariadb설명.txt · 마지막으로 수정됨: 저자 127.0.0.1