读书人

今日新学的oracle - function 做了个自

发布时间: 2012-07-16 15:44:59 作者: rapoo

今天新学的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>

读书人网 >其他数据库

热点推荐