1. select threadid, subject from thread
得到很多数据如何写一个function把threadid, subject插入 keyword表中,
insert into keyword values(keyword_id,threadid, subject),
keyword_id是原来表中最大的keyword_id值, 之后插入keyword_id要加一
得到keyword_id,
并接着插入keyword表
insert into theadkeyword values(thread_id, keyword_id )
请帮忙写一个function实现这个功能
解决方案 »
- --求高人相助:几个SQL Server 2005的存储过程转换为Oracle的,想了半天:写不出来!----
- 请教关于例程的问题
- utl_file_dir参数应该怎么设置?
- 各位大哥:关于fetch游标取值问题,急!!!
- 在Oracle Form Builder中如何调用动态库?
- 能解决的,就是大虾,数据库批处理问题,走过路过进来看看!~
- 新手求助IMP导入数据的问题
- 开发oracle数据库程序,安装Oracle9i服务器(专家版优化工具)行吗?
- 上海的兄弟看过来
- 关于ora-01704错误,文本字符串过长 的问题请教!多谢!急!
- OraclePL/SQL实例精解 书上示例的代码??
- Oracle 8.1.6 如何查找字符串中是否含有小写字母?
is
v_keyword_id number := 0;
begin
select nvl(max(keyword_id),0) into v_keyword_id from keyword;
for i in (select threadid, subject from thread) loop
v_keyword_id := v_keyword_id + 1;
insert into keyword values(v_keyword_id,i.threadid, i.subject);
insert into theadkeyword values(i.threadid, v_keyword_id );
end loop;
end pro;这个方案虽然给你实现了,但是系统资源消耗不小,为什么不建一个sequence和一个trigger解决呢
is
a_keywordid number := 0;
begin
begin
select nvl(max(keyword_id),0) + 1 into a_keywordid from keyword;
insert into keyword values(a_keywordid,threadid, subject);
insert into theadkeyword values(threadid, a_keywordid );
exception
when others then
return 0;
end;
return a_keywordid;
end DemoFun;
insert into keyword values(v_keyword_id,i.threadid, i.subject);
from thread t1
where not exists (select rowid
from keyword t2
where t2.subject = t1.subject)) loop
在并发状态下可能存在问题,多个用户取到同一keyword_id会只有一个插入语句成功,
其它都会失败,如果没有主键或唯一约束的话,表中keyword_id会重复。如果是主键,最好用序列,并发没问题
(select (select nvl(max(keyword_id),0) from key_word)+rownum,
,threadid, subject from thread)