日期:2014-05-16  浏览次数:20433 次

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

一同学习,一同进步!
1 楼 cectsky 2011-01-17  
就是一个DBMS_RANDOM包的学习
2 楼 nininia 2011-01-19  
怎么说呢 要是学习的话,是不错的例子。推荐你一个函数吧 sys_guid()
3 楼 ironsabre 2011-02-01  
这是要干什么?
4 楼 winie 2011-02-06  
何必呢?直接用sys_guid() 自动生成一个不就可以?更何况seq 也能解决!
5 楼 skzr.org 2011-02-14  
<p>
</p>
<pre name="code" class="sql">-- 存储序列的表
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>
也贴个,项目中获取唯一ID的一种办法
6 楼 ironsabre 2011-02-14  
<div class="quote_title">skzr.org 写道</div>
<div class="quote_div">
<p>?</p>
<pre name="code" class="sql">-- 存储序列的表
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>
也贴个,项目中获取唯一ID的一种办法</div>
<p>?</p>
<p>请直接使用sequence.</p>
7 楼 javazeke 2011-02-14  
sequence
8 楼 ironsabre 2011-02-14  
nininia 写道
怎么说呢 要是学习的话,是不错的例子。推荐你一个函数吧 sys_guid()


这怎么能算是不错的例子呢?
9 楼 skzr.