建表遇到个问题,关于id自动增长的!
一个表有三个字段:
ID、name、parentID。
其中,ID是自动增长的,parentID是ID的外键。
但是有的情况下,parentID就是当前正在插入的元组的ID,这样的情况下怎么处理?
比如我要插入一条数据,name是root,ID是自动增长的,parentID就是这个自动增长的ID。我想到的做法是新建序列seq,若当前插入的元组的parentID是本身的ID,那么插入(seq.nextval,root,seq.nextval)。但是这样做,结果肯定是错误的,结果是(n,root,n+1)。
大家集思广益,帮我看看!
谢谢!
一个表有三个字段:
ID、name、parentID。
其中,ID是自动增长的,parentID是ID的外键。
但是有的情况下,parentID就是当前正在插入的元组的ID,这样的情况下怎么处理?
比如我要插入一条数据,name是root,ID是自动增长的,parentID就是这个自动增长的ID。我想到的做法是新建序列seq,若当前插入的元组的parentID是本身的ID,那么插入(seq.nextval,root,seq.nextval)。但是这样做,结果肯定是错误的,结果是(n,root,n+1)。
大家集思广益,帮我看看!
谢谢!
这句是不是可以这么理解,插入的ID和parentID值是一样的。即DECLARE
v_id NUMBER;
BEGIN
SELECT seq.nextval INTO v_id FROM DUAL;
INSERT INTO tab1(id, name, parentID)
VALUES(v_id, name, v_id)
COMMIT;
END;
/
比如如下分类:
体育>足球
体育>篮球
汽车>跑车>法拉利
汽车>轿车>奔驰
地区>广东>深圳>罗湖区
......我把上面的分类存放在数据库中,于是新建一张表Table_Category,有三列:
ID、name、parentID.
当把“足球”存进表时,ID自动增长,name是足球,parentID是体育的ID。这个没有问题,存入name和parentID就可以了,因为ID是自动增长的。
但是如果之前存入“体育”时,parentID等于ID,这下怎么办呢?这下说清楚了吧!
对汽车和地区也是一样的
建议楼主自己试试,Oracle操作的实践性很强,多做测试对于提高能力是很必要的.
可以,select seq.nextval into 变量 from dual;