您的位置:首页 > 数据库 > Oracle

Oracle-mapper文件 And PL/SQL中的-批量-增 删 改 查

2017-11-29 15:05 351 查看

增:Add

 

PL/SQL客户端:

//批量添加

--字段一样多,命名可以不一样

--PA_TEMP_MATERIAL_DEAL表是PA_MATERIAL_DEAL表的临时表

insert intoPA_TEMP_MATERIAL_DEAL select * from PA_MATERIAL_DEAL;

 

--字段不一样多

insert intoPA_TEMP_MATERIAL_DEAL

(material_number,provider_code,provider_name,promise_date,num_segpoints,unit_price,currency_code,work_code)

selectimlitm,provider_code,provider_name,promise_date,num_segpoints,unit_price,currency_code,''from PA_MATERIAL_DEAL;

 

mapper文件:

//批量添加

//Mapper文件中的code

<insertid="addEstPriceInfo" parameterType="java.util.List">

insert intoPA_NOCALAPPLYORDER_ESTPRICE

(

order_number,

order_type,

order_company,

order_line,

provider_code,

provider_name,

work_code,

expected_date,

estimate_price,

create_estimate_time

)

<foreachcollection="noCalApplyOrderPOList" item="item"index="index" separator="union" open="("close=")">

(

select

#{item.order_number},

#{item.order_type},

#{item.order_company},

#{item.order_line},

#{item.provider_code},

#{item.provider_name},

#{item.work_code},

#{item.expected_date},

#{item.estimate_price},

to_char(sysdate,'yyyy-MM-ddHH24:mi:ss')

from dual

)

</foreach>

</insert>

 

//mapper代码转化为PL/SQL代码

insertintoPA_TEMP_MATERIAL_DEAL

( material_number,provider_code, currency_code,work_code )

(

 ( select 'SPCL','900000','USD','222' fromdual)

 union

 ( select 'SPCL','900000','CNY','222' fromdual)

)

 

 

删:Delete

 

PL/SQL客户端:

//批量删除

(同mapper代码转化为PL/SQL代码)

deletefromPA_MATERIAL_DEAL A

where(trim(A.imlitm),trim(A.provider_code),trim(A.currency_code))

in

(

(select'11100','201','CNY'from dual)

 union

(select'11100','201','JPY'from dual)

)

 

mapper文件:

//批量删除

/* 批量删除List<对象>*/

//Mapper文件中的code

【不推荐这种Code方式】

<deleteid="deleteEstPriceInfo"parameterType="com.harmontronics.erp.vo.PortalApplyOrderVO">

        delete from PA_NOCALAPPLYORDER_ESTPRICE

        where(order_number,order_type,order_company,order_line)

        in

        <foreachcollection="portalApplyOrderVOList" item="item"index="index" separator="union" open="("close=")">

            (

            select

            #{item.order_number},

            #{item.order_type},

            #{item.order_company},

            #{item.order_line}

            from dual

            )

        </foreach>

</delete>

 

【推荐这种Code方式】

<!--清空当前审核节点表的对应节点记录-->

    <deleteid="delAuditCurrentN"parameterType="java.util.List">

        delete from PA_AUDIT_CURRENT_NODEIDAwhere exists (

        select * from (

        <foreachcollection="list"item="item" index="index"separator="union"open="(" close=")">

            select

            #{item.order_number} order_number,

            #{item.order_type} order_type,

            #{item.order_company} order_company

            from dual

        </foreach>

        )t where A.order_number =t.order_numberand A.order_type = t.order_type and A.order_company =t.order_company )

    </delete>

 

/* 批量删除List<String> */

//Mapper文件中的code

【不推荐这种Code方式】

    <delete id="delete"parameterType="java.util.List">

        delete from PA_AUDITSYS_CONFIG

        where audit_uuid

        in

        <foreach collection="list"item="item" index="index" separator="union"open="(" close=")">

            (

             select

             #{item}

             from dual

            )

        </foreach>

    </delete>

 

OR:

   

【推荐这种Code方式】

    <delete id="delete"parameterType="java.util.List">

        delete from PA_AUDITSYS_CONFIG

        where audit_uuid

        in

        <foreach collection="list"item="item" index="index" separator=","open="(" close=")">

             #{item}

        </foreach>

    </delete>

 

//mapper代码转化为PL/SQL代码

deletefromPA_MATERIAL_DEAL A

where(trim(A.imlitm),trim(A.provider_code),trim(A.currency_code))

in

(

(select'11100','201','CNY'from dual)

 union

(select'11100','201','JPY'from dual)

)

 

 

改:Update

 

PL/SQL客户端:

--只更新一条字段

        update PA_MATERIAL_DEAL

        set

        (

          PA_MATERIAL_DEAL.provider_name,

          PA_MATERIAL_DEAL.promise_date,

          PA_MATERIAL_DEAL.num_Segpoints,

          PA_MATERIAL_DEAL.unit_price

        )

        =

          (

            select

             '苏州公司',

             '20170909',

             22,

             30.33

            from dual

       

          )

          where PA_MATERIAL_DEAL.imlitm ='SPCL'and PA_MATERIAL_DEAL.provider_code = '11111'

          and PA_MATERIAL_DEAL.currency_code='CNY';

 

--批量更新--->使用临时表 (同mapper代码转化为PL/SQL代码)

updatePA_NOCALAPPLYORDER_ESTPRICE A

set(provider_code,provider_name,work_code,expected_date,estimate_price,estimate_time)

=

(selectB.provider_code,B.provider_name,B.work_code,

B.expected_date,B.estimate_price,

(case whenA.estimate_price = B.estimate_price then A.estimate_timeelseto_char(sysdate,'yyyy-MM-ddHH24:mi:ss') end)

 from PA_TEMPNOCAL_ESTPRICE B

 where trim(B.order_number)=trim(A.order_number)

 and trim(B.order_type) = trim(A.order_type)

 and trim(B.order_company)=trim(A.order_company)

 and trim(B.order_line) = trim(A.order_line)

 )

 where exists

 (select 1 from PA_TEMPNOCAL_ESTPRICE B

 where trim(B.order_number)=trim(A.order_number)

 and trim(B.order_type) = trim(A.order_type)

 and trim(B.order_company)=trim(A.order_company)

 and trim(B.order_line) = trim(A.order_line)

 );

 

mapper文件:

//批量更新

//借助临时表

//Dao层接口中的code(java注解编写)

@Update("updatePA_NOCALAPPLYORDER_ESTPRICE A "

+"set(provider_code,provider_name,work_code,expected_date,estimate_price,update_estimate_time)"

+"="

+"(selectB.provider_code,B.provider_name,B.work_code, "

+"B.expected_date,B.estimate_price,to_char(sysdate,'yyyy-MM-ddHH24:mi:ss')"

+"from PA_TEMPNOCAL_ESTPRICE B "

+"wheretrim(B.order_number) = trim(A.order_number) "

+"andtrim(B.order_type) = trim(A.order_type) "

+"andtrim(B.order_company) = trim(A.order_company) "

+"andtrim(B.order_line) = trim(A.order_line) ) "

+"whereexists "

+"(select1 from PA_TEMPNOCAL_ESTPRICE B "

+"wheretrim(B.order_number) = trim(A.order_number) "

+"andtrim(B.order_type) = trim(A.order_type) "

+"andtrim(B.order_company) = trim(A.order_company) "

+"andtrim(B.order_line) = trim(A.order_line) ) ")

 

//不需要临时表

//Mapper文件中的code

    <!-- 推到审核中 -->

    <update id="auditCurrent"parameterType="java.util.List">

 

        update f4301 set phpohc12 = '2' wheretrim(phpohc12) < '2' and (phdoco, phdcto, phkcoo) in

        (

        <foreach collection="list"item="item" index="index" separator="union">

            select

            #{item.order_number},

            #{item.order_type},

            #{item.order_company}

            from dual

        </foreach>

        )

    </update>

 

//mapper代码转化为PL/SQL代码

updatePA_NOCALAPPLYORDER_ESTPRICE A

set(provider_code,provider_name,work_code,expected_date,estimate_price,estimate_time)

=

(selectB.provider_code,B.provider_name,B.work_code,

B.expected_date,B.estimate_price,

(case whenA.estimate_price = B.estimate_price then A.estimate_timeelseto_char(sysdate,'yyyy-MM-ddHH24:mi:ss') end)

 from PA_TEMPNOCAL_ESTPRICE B

 where trim(B.order_number)=trim(A.order_number)

 and trim(B.order_type) = trim(A.order_type)

 and trim(B.order_company)=trim(A.order_company)

 and trim(B.order_line) = trim(A.order_line)

 )

 where exists

 (select 1 from PA_TEMPNOCAL_ESTPRICE B

 where trim(B.order_number)=trim(A.order_number)

 and trim(B.order_type) = trim(A.order_type)

 and trim(B.order_company)=trim(A.order_company)

 and trim(B.order_line) = trim(A.order_line)

 );

 

 

查:Select

 

PL/SQL客户端:

//查询List

--in 子查询

select * fromPA_MATERIAL_DEAL

where (imlitm,provider_code,currency_code)

in(('M00238101010210101','201','CNY'),('SPCL' ,'11111' ,'CNY'));

 

 

mapper文件:

//查询List

//Mapper文件中的code

<selectid="getEstPriceInfo" parameterType="java.util.List"resultType="com.harmontronics.erp.vo.BackApplyOrderVO">

       selectorder_line,provider_code,provider_name,expected_date,estimate_price

        from PA_NOCALAPPLYORDER_ESTPRICE

       where(order_line,order_number,order_type,order_company)

        in

       <foreachcollection="portalApplyOrderVOList"item="item"index="index" separator="union"open="("close=")">

            (

            select

            #{item.order_line},

            #{item.order_number},

            #{item.order_type},

            #{item.order_company}

            from dual

            )

        </foreach>

</select>

 

//mapper代码转化为PL/SQL代码

      --in 子查询

        select count(1)

        from PA_MATERIAL_DEAL

        where (trim(imlitm),trim(provider_code),trim(currency_code))

        in

        (

          (select 'SPCL','011011','CNY' fromdual) union (select 'L002','11121','EUR' from dual)

        )



阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: