首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

今日新学的oracle - function 做了个自动生成ID, 出来晒晒

2012-07-16 
今天新学的oracle - function 做了个自动生成ID, 出来晒晒CREATE OR REPLACE FUNCTION FUNC_GET_ID RETURN

今天新学的oracle - function 做了个自动生成ID, 出来晒晒
CREATE OR REPLACE FUNCTION FUNC_GET_ID RETURN NUMBER IS
  O_ID NUMBER(16);

  V_RANDOM VARCHAR(10);
  V_TIME   VARCHAR(20);
BEGIN
  --取出2位随机数字
  SELECT TRUNC(DBMS_RANDOM.VALUE(0, 100)) INTO V_RANDOM FROM DUAL;
  --不够2位补齐
  IF LENGTH(V_RANDOM) = 1 THEN
    V_RANDOM := V_RANDOM || '0';
  END IF;
  --取出当前日期
  SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHHMISS') INTO V_TIME FROM DUAL;
  --生成id
  O_ID := V_TIME || V_RANDOM;
  RETURN O_ID;
END;

一同学习,一同进步!create table TSYS_SEQUENCE
(
  next_value NUMBER(16),
  table_name VARCHAR2(24) not null
);

-- 获取序列的函数
CREATE OR REPLACE FUNCTION getnextid(seq_key IN VARCHAR2) RETURN number IS
       id number(16);
       PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
       select next_value into id from tsys_sequence where table_name=seq_key for update;
--  序列+1
       update tsys_sequence set nextvalue=(id+1) where table_name=seq_key;
       commit;
       return id;
end;
</pre>
<span style="color: #ff0000; font-size: medium;">也贴个,项目中获取唯一ID的<strong>一种办法</strong></span> </div>
<p>?</p>
<p>请直接使用sequence.</p>
</div>
<p>架构的人为了要兼容mysql就这样弄了</p>
<p>?</p>
<p>我个人还是建议oracle直接用序列,mysql再用表;对外部使用统一接口</p>
</div>
<p>你知道你这个为了兼容Mysql让系统的Insert速度变慢了多少吗?真不知道这是什么系统,可以容忍这种设计的存在。</p>
</div>
<p><br>请教LS,除了这个牺牲速度的实现方法,还有哪些可以兼容的方法?学习了一种LZ的方法。</p>

热点排行