比如我现在有个表,字段为:
id, name,father_id
1 a 0
2 a1 1
3 a2 2
怎样删除 id = 1 的记录时,将关联的另两条记录也删除掉啊?
id, name,father_id
1 a 0
2 a1 1
3 a2 2
怎样删除 id = 1 的记录时,将关联的另两条记录也删除掉啊?
解决方案 »
- SQL语句查询,同表group by 提取有两个相同字段的数据
- Oracle时间函数
- asp 对 oracle 10中的number类型操作。width=33 dec=4
- 如何实现程序后台数据库既可使用SQL SERVER又可能实用Oracle,请指教!!!!
- 几乎送分。。
- pl/sql连接oracle,使用UpdateSet命令时,招行到一半时取消,会不会有可能只执行了一部分修改操作?
- 请教一个SQL语句
- 在linux下安装ORACLE中的一个问题
- 一个很简单的问题.
- 谁知道深圳或广州最近哪里有oracle 9i原厂培训,谢谢!
- 不管是用pl/sql developer链接还是在cmd下链接Oracle数据库,提示的错误基本上都是一样的。
- 大家一定帮我看看这个语句是什么写法哦
首先,写一个函数 查询父id 不存在的记录条数。出于这样的考虑,当根据id 删除一条记录后,子节点将找不到父id 。
create or replace function F_GET_WJJ_COUNT(wjj_id NUMBER) return number is
Result number;
begin
select count(*) into Result from k_wjj where fwjj_id not in (select distinct id from k_wjj) and fwjj_id<>0 ;
return(Result);
end F_GET_WJJ_COUNT;
我数据库中的表跟上面的表不太一样,但结构和内容相同。id 表示主键id ,fwjj_id 代表父id。
然后,用存储过程:
create or replace procedure K_P_DEL_WJJ(ID NUMBER) is
wj_id number;
begin
wj_id := id ;
delete from k_wjj where id = wj_id;
commit;
if(F_GET_WJJ_COUNT(wj_id)>0) then
loop
delete from k_wjj where fwjj_id not in (select distinct id from k_wjj) and fwjj_id<>0 ;
commit;
exit when(F_GET_WJJ_COUNT(wj_id)=0);
end loop;
end if;
end K_P_DEL_WJJ;
功能是实现了,大家看有没有什么好的方法或者改进意见?
累不累? 用得着那么复杂吗?
delete from xxx where id in (select id from xxx start with id=xxx connect by fid=prior id)