codecamp

plsql插入,并按规则生成单号

 <insert id="insertSelective" parameterType="com.tcl.srm.vendor.vo.TQiHeader" >
    <selectKey keyProperty="qiCode" resultType="java.lang.String" order="BEFORE">
        select 'QI' || to_char(sysdate,'yyyymmdd') || lpad(seq_qi_id.nextval,4,'0') as QI_CODE from dual
    </selectKey>
    insert into T_QI_HEADER
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="qiCode != null" >
        QI_CODE,
      </if>
      <if test="companyCode != null" >
        COMPANY_CODE,
      </if>
      <if test="sourceType != null" >
        SOURCE_TYPE,
      </if>
      <if test="sourceCode != null" >
        SOURCE_CODE,
      </if>
      <if test="vendorCode != null" >
        VENDOR_CODE,
      </if>
      <if test="vendorName != null" >
        VENDOR_NAME,
      </if>
      <if test="vendorTel != null" >
        VENDOR_TEL,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="qiCode != null" >
        #{qiCode,jdbcType=VARCHAR},
      </if>
      <if test="companyCode != null" >
        #{companyCode,jdbcType=VARCHAR},
      </if>
      <if test="sourceType != null" >
        #{sourceType,jdbcType=VARCHAR},
      </if>
      <if test="sourceCode != null" >
        #{sourceCode,jdbcType=VARCHAR},
      </if>
      <if test="vendorCode != null" >
        #{vendorCode,jdbcType=VARCHAR},
      </if>
      <if test="vendorName != null" >
        #{vendorName,jdbcType=VARCHAR},
      </if>
      <if test="vendorTel != null" >
        #{vendorTel,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>

其中:

<selectKey keyProperty="qiCode" resultType="java.lang.String" order="BEFORE"> select 'QI' || to_char(sysdate,'yyyymmdd') || lpad(seq_qi_id.nextval,4,'0') as QI_CODE from dual </selectKey>` 即为主键生成规则; 先创建一个序列seq_qi_id 写一个存储过程用于每天初始化序列从0开始:

create or replace procedure CLEARSEQ_QI as n_count number(8); begin select count(1) into n_count from user_sequences t where t.sequence_name = 'SEQ_QI_ID';


  if n_count > 0 then
    execute immediate 'drop sequence SEQ_QI_ID';
  end if;


  execute immediate 'create sequence SEQ_QI_ID
  minvalue 1
  maxvalue 99999999
  start with 1
  increment by 1
  NOCYCLE
  NOCACHE';
  commit;
end;

每天需要对该存储过程计数清零:

create or replace package body PG_CLEAR_ALL_SEQ is


  PROCEDURE mainproc aS
    procedure_name varchar2(40) := 'PG_CLEAR_ALL_SEQ.mainproc';


  BEGIN


    rlog.info(procedure_name, 0, '', 'Start,iv_id is PG_CLEAR_ALL_SEQ'  );
    COMMIT;
    clearseq_qi();
    COMMIT;
    rlog.info(procedure_name, 0, '', 'Finished,iv_id is PG_CLEAR_ALL_SEQ');
    COMMIT;


  EXCEPTION
    WHEN OTHERS THEN
      rlog.except(procedure_name,
                  '1',
                  SUBSTR(SQLERRM, 1, 512),
                  SUBSTR(DBMS_UTILITY.format_error_backtrace, 1, 512));
      COMMIT;
  END;


end PG_CLEAR_ALL_SEQ;

(附加)根据主表单号生成对应下一级明细条目号:

<selectKey keyProperty="modelItemCode" resultType="java.lang.String" order="BEFORE"> select #{modelCode} || '_' || lpad((decode(max(to_number(substr (m.MODEL_ITEM_CODE,18))), null, 0, max(to_number(substr(m.MODEL_ITEM_CODE,18)))) + 1),2,'0') from T_VD_INDICATORS_MODEL_DETAIL m where m.MODEL_CODE = #{modelCode} </selectKey>

sql根据某一个字段重复只取第一条数据
常见sql函数
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

服务器相关

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }