前提:使用oracle10g
现在有两个表:dept 和 student
dept包括 id length=2(专业编号),name(专业名称)
student包括 id length=6(学生编号), name(学生名称), sex(性别)
要求:
student 的 id 由数据库自动生成。规则是:入学年份 + 专业编号 + 学号(学号不能大于99)
例:有一个学生,是09年入学的,专业的编号是01,学号是20,那么他的id=090120
问题就是这样,有知道如何解决的朋友请帮忙。如果没明白问题的要求,可以提出,我再追加说明。
[b]问题补充:[/b]
对 蔡华江 (架构师) 2009-12-02 提问的追加:
您所说的问题,我也不清楚如何解决,这个是我面试的一道题。
所以不清楚具体的需求,可能他们不需要做这样的关联吧。
另外,如果有知道如何做的朋友,希望你们在解答的时候把具体的代码帖上来。
因为我对oracle也是知之甚少,所以麻烦各位帮忙实现。
[b]问题补充:[/b]
hearken01 兄弟:
你好!很感谢你的回答,我按照你的代码,执行了一边。发现结果的确是按照
我的要求生成的。不过,虽然stu_id按要求生成了,可生成的值还有点问题!希
望你能继续帮我解决下,谢谢个先!
我出现的问题是这样的:
我的dept_h表里有了两条记录
dept_id:10, dept_name:物理;dept_id:20,dept_name:化学
student_h表里有两条记录
stu_id:091001,stu_name:aa; stu_id:091002,stu_name:bb
我执行select f_h('物理') from dual;得到的结果却始终是091002
这是为什么啊,我不时很理解,呵呵。还有,如果你有时间,能把你写的代
码多少加点注释好么,我很少接触oracle,所以不时很懂啊 !!
[b]问题补充:[/b]
hearken01 (中级程序员) :
谢谢你的回答!可是我把你的代码考到了我的机器上运行,结果生成的函数
有错误!然后我大概看了一下,你两次的代码差异,发现了一些不同,而我又看
不太懂,所以帖出来,向你请教:
if stu_id<>0 then
if stu_id<10 then
stu_v := '0' || stu_id;
else
stu_v := stu_id;
end if;
else
stu_v := '01';
end if;
这里是不是有些重复阿。。。。。。,还有就是两个select语句出错!
我觉得会不会是咱们的表结构不一样啊,所以咱俩统一一下表结构,然后,
麻烦你再帮我调试一次好不?谢谢啦!
我定义的表结构如下(或者你吧你的表结构帖出来也行啊):
/* 专业表 */
CREATE TABLE MYDEPT(
MYID NUMBER(2,0) NOT NULL,
MYNAME VARCHAR2(40),
PRIMARY KEY ("MYID")
);
/* 学生表 */
CREATE TABLE MYSTUDENT(
MYID NUMBER(6,0) NOT NULL,
MYNAME VARCHAR2(40),
PRIMARY KEY ("MYID")
);