由一个表a 表中有一个字段id varchar2(10)
字段值由数字0到9然后是a到z组成的
如何实现该字段自增
比如:字段值为10zz 加1后变成1100
字段值由数字0到9然后是a到z组成的
如何实现该字段自增
比如:字段值为10zz 加1后变成1100
解决方案 »
- 求助:winxp下安装oracle9i (困扰已久 盼高手)
- 在线高分求解:PL SQL Procedure/Function
- 一个复杂的统计分问题
- ORACLE 连接的问题
- 问:如何向oracle9i中插入日期???
- 请问这样的语句该怎么写?
- 请教:存储过程要返回的一个参数数据的问题。
- 向老大们请教一个从数据库中返回多行结果级的问题,难点使用的游标存在于动态SQL语句
- 关于MySQL 于ORACLE数据库导入问题
- orcale登录问题,菜鸟一个,请大神指点
- 请问如何查出树形结构的某个节点的所有子孙节点?
- 通过Network Address Translation对网络地址修改后,外网访问ORACEL是否受限
我不会,等高手
--不好意思,我只能实现0——z的循环,对于满位再进位,还没想到:
--再想想。 DROP TABLE test;
CREATE TABLE test(id VARCHAR2(100),NAME VARCHAR2(100));
DROP SEQUENCE test_seq;
CREATE SEQUENCE test_seq START WITH 1 INCREMENT BY 1 MAXVALUE 36 CYCLE;
DROP TRIGGER trg_test;
CREATE OR REPLACE TRIGGER trg_test
BEFORE INSERT ON test
FOR EACH ROW
DECLARE
num NUMBER;
id VARCHAR2(100);
BEGIN
SELECT test_seq.NEXTVAL-1 INTO num FROM dual;
IF num>=10 THEN
SELECT chr(num-10+97) INTO :NEW.id FROM dual;
ELSE
:NEW.id:=num;
END IF;
END; BEGIN
FOR i IN 1..40 LOOP
INSERT INTO test VALUES('test'||i,'name||'||i);
END LOOP;
END;
2 as
3 v_i number;
4 v_str varchar2(32767);
5 begin
6 v_i:=trunc(i_num);
7 v_str:=null;
8 loop
9 v_str:=case when mod(v_i,36)<10 then mod(v_i,36)||'' else chr(mod(v_i,36)+87) end||v_str;
10 v_i:=trunc(v_i/36);
11 exit when v_i=0;
12 end loop;
13 return v_str;
14 end;
15 /
Function created
SQL>
SQL> create sequence SEQ_trans_36
2 minvalue 1
3 maxvalue 999999999999999999999999999
4 start with 1
5 increment by 1
6 nocache;
Sequence created
SQL>
SQL> create table tbl_36
2 (id varchar2(100),
3 name varchar2(100));
Table created
SQL> insert into tbl_36
2 select f_trans_36(SEQ_trans_36.nextval),rownum from dual connect by rownum<=40;
41 rows inserted
SQL> select * from tbl_36;
ID NAME
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
a 10
b 11
c 12
d 13
e 14
f 15
g 16
h 17
i 18
j 19
k 20
ID NAME
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
l 21
m 22
n 23
o 24
p 25
q 26
r 27
s 28
t 29
u 30
v 31
w 32
x 33
y 34
z 35
10 36
11 37
12 38
13 39
14 40
15 41
41 rows selected
SQL>
2 before insert on tbl_36
3 for each row
4 declare
5 -- local variables here
6 v_num number;
7 begin
8 select SEQ_trans_36.nextval into v_num from dual;
9 :new.id:= f_trans_36(v_num);
10 end tri_36;
11 /
Trigger created
SQL> insert into tbl_36(name)values(42);
1 row inserted
SQL> select * from tbl_36 where name='42';
ID NAME
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
16 42
SQL>
使用连除进行数制转换