mariadb설명
문서의 이전 판입니다!
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 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;
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설명.1751804856.txt.gz · 마지막으로 수정됨: (바깥 편집)
