Files
wace_plm/src/com/pms/mapper/productmgmt.xml
chpark da06c4684c Initial commit: WACE PLM with database initialization features
- Add Docker Compose configurations for dev, prod, and standalone environments
- Add database initialization scripts (init-db.sh, init-db-docker.sh)
- Add enhanced start-docker-linux.sh with DB init support
- Add comprehensive database initialization guide
- Support for automatic dbexport.pgsql import on first run
- Include safety checks for production environment
2025-08-29 15:46:08 +09:00

688 lines
19 KiB
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="product">
<!-- 제품마스터 목록 조회 -->
<select id="productMgmtList" parameterType="map" resultType="map">
SELECT
*
FROM(
SELECT
ROW_NUMBER() OVER (ORDER BY product_code) AS RNUM
,OBJID::varchar
,PRODUCT_CATEGORY
,CODE_NAME(PRODUCT_CATEGORY) AS PRODUCT_CATEGORY_NAME
,PRODUCT_TYPE
,CODE_NAME(PRODUCT_TYPE) AS PRODUCT_TYPE_NAME
,PRODUCT_GRADE
,CODE_NAME(PRODUCT_GRADE) AS PRODUCT_GRADE_NAME
,PRODUCT_TON
,CODE_NAME(PRODUCT_TON) AS PRODUCT_TON_NAME
,PRODUCT_BOOM
,CODE_NAME(PRODUCT_BOOM) AS PRODUCT_BOOM_NAME
,PRODUCT_VEHICLE
,CODE_NAME(PRODUCT_VEHICLE) AS PRODUCT_VEHICLE_NAME
,PRODUCT_CODE
,PRODUCTION_FLAG
,CODE_NAME(PRODUCTION_FLAG) AS PRODUCTION_FLAG_NAME
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REGDATE
,WRITER
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS WRITER_NAME
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = T.OBJID AND DOC_TYPE='PRODUCT_FILE' AND UPPER(STATUS) = 'ACTIVE') AS FILE_CNT
,(SELECT COUNT(1) FROM PRODUCT_SPEC WHERE TARGET_OBJID = T.OBJID) AS FILE_CNT1
,PRICE
,PRODUCT_NAME
,PRODUCT_NAME_CODE
FROM PRODUCT_MGMT T
WHERE 1=1
<if test="Year !=null and Year != '' ">
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
</if>
<if test="product_category != null and product_category != '' ">
AND product_category = #{product_category}
</if>
) AS T
WHERE 1=1
<if test="PAGE_END != null and PAGE_END != ''">
<![CDATA[ AND RNUM <= #{PAGE_END}::integer ]]>
</if>
<if test="PAGE_START != null and PAGE_START != ''">
<![CDATA[ AND RNUM >= #{PAGE_START}::integer ]]>
</if>
</select>
<select id="productMgmtListCnt" parameterType="map" resultType="map">
SELECT
CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE,
TOTAL_CNT::integer
FROM (
SELECT
COUNT(1)::float TOTAL_CNT
FROM (SELECT
OBJID::varchar
,PRODUCT_CATEGORY
,PRODUCT_TYPE
,PRODUCT_GRADE
,PRODUCT_TON
,PRODUCT_BOOM
,PRODUCT_VEHICLE
,PRODUCT_CODE
,PRODUCTION_FLAG
,REGDATE
,WRITER
FROM PRODUCT_MGMT T
) AS PMS_PART_MGMT
WHERE 1=1
<if test="Year !=null and Year != '' ">
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
</if>
<if test="product_category != null and product_category != '' ">
AND product_category = #{product_category}
</if>
<!-- <if test="search_fromDate != null and !''.equals(search_fromDate)">
AND TO_DATE(REGDATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
</if>
<if test="search_toDate != null and !''.equals(search_toDate)">
AND TO_DATE(REGDATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
</if> -->
) AS T
</select>
<!-- //제품마스터 상세조회-->
<select id="getproductMgmtInfo" parameterType="map" resultType="map">
SELECT
OBJID::varchar
,PRODUCT_CATEGORY
,PRODUCT_TYPE
,PRODUCT_GRADE
,PRODUCT_TON
,PRODUCT_BOOM
,PRODUCT_VEHICLE
,PRODUCT_CODE
,PRODUCTION_FLAG
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REGDATE
,WRITER
,CONTENTS
,PRICE
,NOTE
,PRODUCT_NAME
,PRODUCT_NAME_CODE
FROM PRODUCT_MGMT T
WHERE 1=1
AND T.OBJID = #{objId}::integer
</select>
<!-- //제품마스터 저장 -->
<update id="mergeproductMgmtInfo" parameterType="map">
INSERT INTO PRODUCT_MGMT
(
OBJID
,PRODUCT_CATEGORY
,PRODUCT_TYPE
,PRODUCT_GRADE
,PRODUCT_TON
,PRODUCT_BOOM
,PRODUCT_VEHICLE
,PRODUCT_CODE
,PRODUCTION_FLAG
,REGDATE
,WRITER
,CONTENTS
,PRICE
,NOTE
,PRODUCT_NAME
,PRODUCT_NAME_CODE
)
VALUES
(
#{objId}::numeric
,#{product_category}
,#{product_type}
,#{product_grade}
,#{product_ton}
,#{product_boom}
,#{product_vehicle}
,#{product_code}
,#{production_flag}
,now()
,#{writer}
,(select o.contents from template_mng o where (SELECT o2.code_name FROM comm_code AS o2 WHERE o2.code_id = o.template_code_detail) = (SELECT code_name FROM comm_code WHERE code_id =#{product_category}))
,#{price}
,#{note}
,#{product_name}
,#{product_name_code}
) ON CONFLICT (OBJID) DO
UPDATE
SET
PRODUCT_CATEGORY = #{product_category}
,PRODUCT_TYPE = #{product_type}
,PRODUCT_GRADE = #{product_grade}
,PRODUCT_TON = #{product_ton}
,PRODUCT_BOOM = #{product_boom}
,PRODUCT_VEHICLE = #{product_vehicle}
,PRODUCT_CODE = #{product_code}
,PRODUCTION_FLAG = #{production_flag}
,PRICE = #{price}
,NOTE = #{note}
,PRODUCT_NAME = #{product_name}
,PRODUCT_NAME_CODE = #{product_name_code}
</update>
<update id="productDelete" parameterType="map">
DELETE FROM PRODUCT_MGMT
WHERE OBJID=#{objId}::numeric
</update>
<!-- BOM REPORT 삭제-->
<delete id="productPartBomDelete" parameterType="map">
DELETE FROM PART_BOM_REPORT
WHERE PRODUCT_MGMT_UPG IN(SELECT O.OBJID FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE TARGET_OBJID=#{objId}::numeric)
</delete>
<!-- 제품마스터 BOM REPORT 삭제-->
<delete id="productMasterPartBomDelete" parameterType="map">
DELETE FROM PART_BOM_REPORT
WHERE PRODUCT_MGMT_UPG IN(SELECT O.OBJID FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE TARGET_OBJID IN(
SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID IN(SELECT O.OBJID FROM PRODUCT_MGMT AS O
WHERE O.OBJID=#{objId}::numeric)
)
)
</delete>
<!--PART 삭제-->
<delete id="productPartDelete" parameterType="map">
DELETE FROM PART_MNG
WHERE UPG_OBJID IN(SELECT O.OBJID::varchar FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE TARGET_OBJID=#{objId}::numeric)
</delete>
<!--제품마스터 PART 삭제-->
<delete id="productMasterPartDelete" parameterType="map">
DELETE FROM PART_MNG
WHERE UPG_OBJID IN(SELECT O.OBJID::varchar FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE TARGET_OBJID IN(
SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID IN(SELECT O.OBJID FROM PRODUCT_MGMT AS O
WHERE O.OBJID=#{objId}::numeric)
)
)
</delete>
<!--UPG DETAIL 삭제-->
<delete id="productUpgdetailDelete" parameterType="map">
DELETE FROM PRODUCT_MGMT_UPG_DETAIL
WHERE TARGET_OBJID=#{objId}::numeric
</delete>
<!--제품마스터 UPG DETAIL 삭제-->
<delete id="productMasterUpgdetailDelete" parameterType="map">
DELETE FROM PRODUCT_MGMT_UPG_DETAIL
WHERE TARGET_OBJID IN(
SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID IN(SELECT O.OBJID FROM PRODUCT_MGMT AS O
WHERE O.OBJID=#{objId}::numeric)
)
</delete>
<!--UPG MASTER 삭제-->
<delete id="productUpgmasterDelete" parameterType="map">
DELETE FROM PRODUCT_MGMT_UPG_MASTER
WHERE OBJID=#{objId}::numeric
</delete>
<!--제품마스터 UPG MASTER 삭제-->
<delete id="productMasterUpgmasterDelete" parameterType="map">
DELETE FROM PRODUCT_MGMT_UPG_MASTER
WHERE TARGET_OBJID IN(SELECT O.OBJID FROM PRODUCT_MGMT AS O
WHERE O.OBJID=#{objId}::numeric)
</delete>
<!--UPG VC 업데이트-->
<update id="productUpgVcupdate" parameterType="map">
UPDATE PRODUCT_MGMT_UPG_DETAIL
SET VC=''
WHERE TARGET_OBJID IN(SELECT O.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS O
WHERE O.TARGET_OBJID=#{rootobjid}::numeric)
AND UPG_NAME=(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID=#{upg_name})
</update>
<!-- 제품마스터 활성화-->
<update id="changeMultiPartStatus" parameterType="map">
UPDATE PRODUCT_MGMT
SET STATUS_CD = 'STS_CD1'
WHERE PRODUCT_OBJID=#{objId}
</update>
<select id="checkDuplicateProductMgmt" parameterType="map" resultType="map">
SELECT
COUNT(1) AS CNT
FROM
PRODUCT_MGMT
WHERE PRODUCT_OBJID != ${OBJID}
AND DHISPRODUCT_NO = #{DHISPRODUCT_NO}
</select>
<select id="productMgmtUpgListCnt" parameterType="map" resultType="map">
SELECT CEIL(CAST(TOTAL_CNT AS FLOAT)/#{COUNT_PER_PAGE})::numeric::integer as MAX_PAGE_SIZE,
TOTAL_CNT
FROM (
SELECT COUNT(1) AS TOTAL_CNT FROM (
SELECT
t.objid
,t.upg_code
,t.upg_name
,t.upg_no
,t.vc
,t.note
FROM product_mgmt_upg t
) PMS_PART_MGMT_upg
WHERE 1=1
) T
</select>
<!-- 제품 사양 목록 조회 -->
<select id="productMgmtUpgList" parameterType="map" resultType="map">
SELECT *
FROM
(SELECT
(ROW_NUMBER() OVER(ORDER BY upg_code DESC)) AS rnum
,t.objid
,t.upg_code
,t.upg_name
,t.upg_no
,t.vc
,t.note
FROM product_mgmt_upg t
WHERE 1=1
) AS T
WHERE 1=1
<if test="PAGE_END != null and PAGE_END != ''">
<![CDATA[ AND T.rnum <= #{PAGE_END}::integer ]]>
</if>
<if test="PAGE_START != null and PAGE_START != ''">
<![CDATA[ AND T.rnum >= #{PAGE_START}::integer ]]>
</if>
</select>
<select id="productMgmtUpgInfo" parameterType="map" resultType="map">
SELECT
t.objid::varchar
,t.target_objid::varchar
,t.spec_name
FROM product_mgmt_upg_master t
WHERE 1=1
and t.objid = #{product_code}::integer
</select>
<!-- //유저인포 업뎃 -->
<update id="saveproductMgmtUpgInfo" parameterType="map">
INSERT INTO
product_mgmt_upg
( objid
,upg_code
,upg_name
,upg_no
,vc
,note)
VALUES (
#{objId}::integer
,#{upg_code}
,#{upg_name}
,#{upg_no}
,#{vc}
,#{note}
) ON
CONFLICT (OBJID) DO
UPDATE
SET upg_code=#{upg_code}
,upg_name=#{upg_name}
,upg_no=#{upg_no}
,vc=#{vc}
,note=#{note}
</update>
<select id="specificationList" parameterType="map" resultType="map">
SELECT
OBJID::varchar
,TARGET_OBJID::varchar
,SPEC_TEXT
,SPEC_VALUE
,REGDATE
,WRITER
,ORDER_NO
FROM PRODUCT_SPEC
WHERE TARGET_OBJID = #{targetObjId}::numeric
order by order_no::integer
</select>
<delete id="DeleteSpecification" parameterType="map">
DELETE FROM PRODUCT_SPEC
WHERE TARGET_OBJID = #{targetObjId}::numeric
</delete>
<insert id="insertSpecification" parameterType="map">
INSERT INTO
PRODUCT_SPEC
( OBJID
,TARGET_OBJID
,SPEC_TEXT
,SPEC_VALUE
,REGDATE
,WRITER
,ORDER_NO
)
VALUES (
#{objId}::numeric
,#{targetObjId}::numeric
,#{spec_text}
,#{spec_value}
,now()
,#{writer}
,#{order_no}
)
</insert>
<select id="getProductUpgCodeList" parameterType="map" resultType="map">
SELECT t.objid::VARCHAR
,t1.objid::VARCHAR AS master_objid ,t.product_code,t1.spec_name FROM product_mgmt AS t
,product_mgmt_upg_master AS t1
WHERE t.objid = t1.target_objid
and t.objid = #{product_code}::numeric
ORDER BY t1.regdate
</select>
<select id="getProductUpgDetailList" parameterType="map" resultType="map">
<!-- SELECT
t1.objid::varchar
,t1.upg_name AS upg_name
,t1.upg_code AS upg_code
,t1.vc
,t1.note
,t1.product_objid::varchar
,case when t1.vc = '' THEN ''
ELSE t1.upg_code ||'-'||(SELECT o.product_code from product_mgmt o WHERE o.objid = t1.product_objid)||'-'||t1.vc
END AS upg_no
FROM product_mgmt_upg_detail AS t1 ,comm_code AS t
where t1.upg_name = t.code_name
and t1.target_objid=#{targetObjId}::numeric
order by t.code_id -->
SELECT
COALESCE(t1.objid::varchar,'') as objid
,COALESCE(t1.upg_name,t2.code_name) AS upg_name
,COALESCE(t1.upg_code,t2.ext_val) AS upg_code
,COALESCE(t1.vc,'') AS vc
,COALESCE(t1.note,'') AS note
,COALESCE(t1.product_objid::VARCHAR,'') AS product_objid
,case WHEN (t1.vc = '' OR t1.vc IS NULL) THEN ''
ELSE t1.upg_code ||'-'||(SELECT o.product_code from product_mgmt o WHERE o.objid = t1.product_objid)||'-'||t1.vc
END AS upg_no
FROM (SELECT * from product_mgmt_upg_detail AS pm
WHERE pm.target_objid=#{targetObjId}::numeric) AS t1
RIGHT OUTER JOIN (SELECT * FROM comm_code AS cc WHERE cc.parent_code_id='0000042') as t2
ON t1.upg_name = t2.code_name
order BY t2.code_id
</select>
<select id="getUpgCodeList" parameterType="map" resultType="map">
SELECT
'' AS objid
,t.code_name AS upg_name
,t.ext_val AS upg_code
,'' AS vc
,'' AS note
FROM comm_code t
WHERE t.parent_code_id='0000042'
ORDER BY t.code_id
</select>
<!-- //upg master 저장 -->
<update id="insertUpgMaster" parameterType="map">
INSERT INTO
product_mgmt_upg_master
( objid
,target_objid
,spec_name
,writer
,regdate
)
VALUES (
#{objId}::integer
,#{targetobjId}::integer
,#{specname}
,#{writer}
,now()::TIMESTAMP
) ON
CONFLICT (OBJID,TARGET_OBJID) DO
UPDATE
SET spec_name=#{specname}
</update>
<!-- //upg detail 저장 -->
<update id="insertUpgDetail" parameterType="map">
INSERT INTO
product_mgmt_upg_detail
( objid
,target_objid
,upg_name
,upg_code
,vc
,note
,product_objid
)
VALUES (
#{objId}::integer
,#{targetobjId}::integer
,#{upgname}
,#{upgcode}
,UPPER(#{vc})
,#{note}
,#{product_objid}::integer
) ON
CONFLICT (OBJID) DO
UPDATE
SET vc=UPPER(#{vc})
,note=#{note}
<if test="product_objid !=null and product_objid != '' ">
,product_objid=#{product_objid}::integer
</if>
</update>
<select id="getUpgNoList" parameterType="map" resultType="map">
SELECT
distinct
case when t.vc = '' THEN ''
else upg_code||'-'||(SELECT o.product_code from product_mgmt AS o WHERE o.objid = t.product_objid)||'-'||t.vc
end AS upg_no
,t.vc
,t.product_objid::varchar
FROM product_mgmt_upg_detail AS t
where t.upg_code = #{upgCode}
and t.vc !=''
</select>
<select id="getUpgMatrixList" parameterType="map" resultType="map">
SELECT t.upg_name,upg_code,upg_no,rn FROM (SELECT t.objid,t.spec_name,t1.upg_name,t1.upg_code,t1.upg_code||'-'||(SELECT o.product_code from product_mgmt AS o WHERE o.objid = t1.product_objid)||'-'||t1.vc AS upg_no,
ROW_NUMBER() OVER (PARTITION BY t.spec_name ORDER BY t.regdate,t2.code_id) rn
FROM product_mgmt_upg_master AS t , product_mgmt_upg_detail as t1,comm_code as t2
WHERE t.objid = t1.target_objid
and t.target_objid = #{product_code}::integer
AND t1.upg_name = t2.code_name) AS t ,product_mgmt_upg_master as pmu
WHERE t.objid = pmu.objid
ORDER BY pmu.regdate,rn
</select>
<select id="getProductUpgcommcodeList" parameterType="map" resultType="map">
<!-- SELECT t.code_name as UPG_NAME ,t.ext_val as UPG_CODE,CODE_ID FROM (SELECT t2.code_name,t2.ext_val,t2.code_id
FROM product_mgmt_upg_master AS t ,product_mgmt_upg_detail as t1,comm_code as t2
WHERE t.objid = t1.target_objid
and t1.upg_name = t2.code_name
and t.target_objid = #{product_code}::integer
GROUP BY t2.code_name,t2.ext_val,t2.code_id) AS t
ORDER BY t.code_id -->
SELECT t.code_name as UPG_NAME ,t.ext_val as UPG_CODE,CODE_ID FROM (SELECT t2.code_name,t2.ext_val,t2.code_id
FROM (SELECT t1.upg_name from product_mgmt_upg_master AS t ,product_mgmt_upg_detail as t1
WHERE t.objid = t1.target_objid
AND t.target_objid = #{product_code}::integer) AS T
RIGHT OUTER JOIN (SELECT * FROM comm_code AS cc WHERE cc.parent_code_id='0000042') as t2
on t.upg_name = t2.code_name
GROUP BY t2.code_name,t2.ext_val,t2.code_id) AS t
ORDER BY t.code_id
</select>
<select id="getUpgOneMatrixList" parameterType="map" resultType="map">
SELECT t.upg_name,upg_code,upg_no,rn FROM (SELECT t.objid,t.spec_name,t1.upg_name,t1.upg_code,
case WHEN t1.vc = '' THEN ''
ELSE t1.upg_code||'-'||(SELECT o.product_code from product_mgmt AS o WHERE o.objid = t1.product_objid)||'-'||t1.vc
END AS upg_no,
ROW_NUMBER() OVER (PARTITION BY t.spec_name ORDER BY t.regdate,t2.code_id) rn
FROM product_mgmt_upg_master AS t , product_mgmt_upg_detail as t1,comm_code as t2
WHERE t.objid = t1.target_objid
and t.target_objid = #{product_code}::integer
AND t1.UPG_CODE = #{code}
AND t1.upg_name = t2.code_name) AS t ,product_mgmt_upg_master as pmu
WHERE t.objid = pmu.objid
ORDER BY pmu.regdate,rn
</select>
<select id="getproductspecList" parameterType="map" resultType="map">
SELECT *
FROM PRODUCT_SPEC T
WHERE T.TARGET_OBJID = #{objId}::numeric
LIMIT 1
</select>
<select id="standardSpecList" parameterType="map" resultType="map">
SELECT t.code_name
,ROW_NUMBER() OVER(ORDER BY code_id)::varchar AS rnum FROM comm_code t
WHERE t.parent_code_id='0000069'
</select>
<insert id="insertProductSpec" parameterType="map">
INSERT INTO
PRODUCT_SPEC
( OBJID
,TARGET_OBJID
,SPEC_TEXT
,SPEC_VALUE
,REGDATE
,WRITER
,ORDER_NO
)
VALUES (
#{objid}::numeric
,#{target_objid}::numeric
,#{spec_text}
,null
,now()
,#{writer}
,#{order_no}
)
</insert>
<!-- 제품마스터 활성화-->
<update id="updateSpecification" parameterType="map">
UPDATE PRODUCT_MGMT
SET CONTENTS = #{contents}
WHERE OBJID=#{targetObjId}::numeric
</update>
<insert id="insertProductPriceHistory" parameterType="map">
INSERT INTO product_mgmt_price_history
(
OBJID
,PRODUCT_OBJID
,REG_DATE
,PRICE
) VALUES (
#{priceobjid}
,#{objId}
,now()
,#{price}
)
</insert>
<select id="getproductPriceHistoryCnt" parameterType="map" resultType="map">
SELECT CEIL(CAST(TOTAL_CNT AS FLOAT)/#{COUNT_PER_PAGE})::numeric::integer as MAX_PAGE_SIZE
,TOTAL_CNT::integer
FROM (
SELECT COUNT(1)::FLOAT TOTAL_CNT
FROM (
SELECT OBJID FROM PRODUCT_MGMT_PRICE_HISTORY
WHERE PRODUCT_OBJID = #{objId}
) T
) TT
WHERE 1=1
</select>
<select id="getproductPriceHistory" parameterType="map" resultType="map">
SELECT * FROM (
SELECT T.*,ROW_NUMBER() OVER (ORDER BY REG_DATE DESC) AS RNUM
FROM (
SELECT OBJID
,TO_DATE(T.REG_DATE, 'YYYY-MM-DD') AS REGDATE
,REG_DATE
,PRICE
FROM PRODUCT_MGMT_PRICE_HISTORY AS T
WHERE PRODUCT_OBJID = #{objId}
) T
) TT
WHERE 1=1
<if test="PAGE_END != null and PAGE_END !='' and actionType != 'excel' ">
<![CDATA[ AND TT.RNUM <= #{PAGE_END} ]]>
</if>
<if test="PAGE_START != null and PAGE_STRART!='' and actionType != 'excel' ">
<![CDATA[ AND TT.RNUM >= #{PAGE_START} ]]>
</if>
</select>
<update id="deleteproductMngPriceInfo" parameterType="map">
DELETE FROM PRODUCT_MGMT_PRICE_HISTORY WHERE OBJID = #{objId}
</update>
<select id="getCodeExt_val" parameterType="map" resultType="map">
SELECT EXT_VAL FROM COMM_CODE WHERE code_id = #{code_id}
</select>
</mapper>