zoukankan      html  css  js  c++  java
  • 使用Oracle函数在创建表的时候自动加入生成的流水号 生成格式是:前缀+年月日+00000

    CREATE OR REPLACE FUNCTION fn_no_make(v_type VARCHAR2,
    v_number_col VARCHAR2,
    v_table_name VARCHAR2)
    /*
    * 参数说明:
    * v_type: 编码前缀
    * v_number_col:编码所在列名
    * v_table_name:编码所在表名
    */
    RETURN VARCHAR2 IS
    v_old_no VARCHAR2(50); --原编码
    v_old_num NUMBER; -- 原编码后五位编号
    v_new_num VARCHAR2(10); --新编码后五位编号
    v_maked_no VARCHAR2(50); --新编码
    v_date_no VARCHAR2(20); --当前日期编号
    v_sql VARCHAR2(4000);
    BEGIN
    -- 找出其中最大的
    v_sql := 'SELECT MAX(' || v_number_col || ') FROM ' || v_table_name;
    EXECUTE IMMEDIATE v_sql
    INTO v_old_no;
    -- 将当前日期取出
    v_sql := 'SELECT SUBSTR(TO_CHAR(SYSDATE,''YYYYMMDD''), 1, 8) AS DATE_NO FROM DUAL';
    EXECUTE IMMEDIATE v_sql
    INTO v_date_no;
    -- 截取日期和新的日期
    v_old_num := to_number(substr(v_old_no, 13, 5));
    -- 增加流水号数量
    v_new_num := to_char(v_old_num + 1);
    -- 填充流水号为五位数
    WHILE length(v_new_num) < 5
    LOOP
    v_new_num := '0' || v_new_num;
    END LOOP;
    /*
    * 如果日期相同或者当前表为空
    * 执行流水号为第一个00001
    * 否则将上面计算好的流水号加入到新的流水号里面
    */
    IF v_old_no IS NULL OR
    substr(v_old_no, 4, 8) <> v_date_no
    THEN
    v_maked_no := v_type || v_date_no || '00001';
    ELSE
    v_maked_no := v_type || v_date_no || v_new_num;
    END IF;
    -- 最后返回新的流水号
    RETURN(v_maked_no);
    EXCEPTION
    WHEN OTHERS THEN
    dbms_output.put_line(SQLERRM);
    END fn_no_make;



    INSERT INTO TEST_AA VALUES(sys_guid(),fn_no_make(901,'XSCM_ADDR2','TEST_AA'));

    select fn_no_make(901,'XSCM_ADDR2','TEST_AA') from dual

    select sys_guid() from dual
    select * from xscm_mstr


    -- Create table
    create table TEST_AA
    (
    XSCM_ADDR VARCHAR2(80) default ' ' not null,
    XSCM_ADDR2 VARCHAR2(80) default ' ' not null
    )
    tablespace USERS
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
    initial 128K
    next 1M
    minextents 1
    maxextents unlimited
    );
    select * from TEST_AA

  • 相关阅读:
    《命运赋》
    CSS3中的 transform (变形)+Transition(转换) = animation(动画)
    c#进阶之泛型
    正则表达式运用
    查询某时间段的统计数据
    很好用的request转换为实体方法还有判断实体所有参数不能为空的方法
    http 协议集合,超级简单
    今天无意发现jquery的一个以前的误导
    IFRAM随内部长宽高变化
    就最近学习MVC4.0的页面用法学到的东西
  • 原文地址:https://www.cnblogs.com/yangpeng-jingjing/p/6845663.html
Copyright © 2011-2022 走看看