关于oracle删除记录的问题!大家看看这是why ?在线等... ...

swollow_1980 2005-03-07 03:53:46
我删除记录时报这样的错误:“ORA-02292:违法完整约束条件(PMIS.FK_12157)-已找到子记录日志”我根据这个信息找到外键PMIS.FK_12157对应的表,发现这张表里已经没有相应的记录了!我想知道为什么子表没有了相应的记录(不是没有记录,是没有对应的记录了)父表中的记录还不能删除呢?
这几张表的关系是这样的:
A:pm_insts 主键:inst_id
B:PM_PD_EMPEE 主键:inst_id 外键:lsparent
c:out_record 主键:inst_id
pm_insts被定义成系统表 在表PM_PD_EMPEE或out_record 中每插入一条记录在pm_insts中就插入一条记录(有点象日志)而且pm_insts中的inst_id和PM_PD_EMPEE或out_record中记录的inst_id相同;out_record表的inst_id和PM_PD_EMPEE 中的lsparent关联 形成主从表关系;
假设有数据:
inst_id lsparent
pm_insts: 1 /
2 /
3 /
4 /

PM_PD_EMPEE 1 4
2 3

out_record 3 /
4 /
现在把记录out_record 3 /
pm_insts: 3 /
PM_PD_EMPEE 2 3

删除了!然后去删除
pm_insts: 3 /
时他就报文章开头出现的错(ORA-02292:违法完整约束条件(PMIS.FK_12157)-已找到子记录日志)!这是why????... ...
...全文
566 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nebulaly 2005-03-09
  • 打赏
  • 举报
回复
先确定一下FK_12157引用的主键是不是
pm_insts 主键:inst_id把
swollow_1980 2005-03-09
  • 打赏
  • 举报
回复
to:lcg412我不确定是否关联到2张表了:(
为了弄清这个问题我想再详细的说明一下表直接的关系以及我删除操作遇到的问题
有4张表:
pm_om_insts(inst_id,createdate,modifydate)---是系统表
员工(inst_id,name)
年份(inst_id,year,lsparent)
月份(inst_id,month,lsparent)
出差记录(inst_id,out_record,lsparent)
关联关系是这样的:
出差记录的lsparent字段和员工、月份的主键inst_id关联
月份的lsparent字段和年份的主键inst_id关联
年份的lsparent字段和员工的主键inst_id关联
员工、年份、月份、出差记录的每条记录在pm_om_insts表里都有一个对应的记录且inst_id相同;
现在的问题是:我删除用户A在pm_om_insts表里对应的记录时报错:“ORA-02292:违法完整约束条件(PMIS.FK_12157)-已找到子记录日志”我查找到外键PMIS.FK_12157所属的表是“年份”这张表
并且我确定用户A下的所以“出差记录”、“年份”、“月份”记录都已经删除;
请问lcg412和各位大侠可以帮我找到原因并解决这个问题吗
PS:写了一堆也不知道表达清楚了没有!
小妹在此先谢过了!
swollow_1980 2005-03-09
  • 打赏
  • 举报
回复
笔误
我子表里的记录不能全部删除啊
还有别的员工的记录呢
swollow_1980 2005-03-09
  • 打赏
  • 举报
回复
可是我主表里的记录不可能都删除啊
我不能把别的用户的数据也删除啊
怎么办呢
nebulaly 2005-03-09
  • 打赏
  • 举报
回复
明显是子表里有记录阿,楼主再查查吧
swollow_1980 2005-03-09
  • 打赏
  • 举报
回复
to nebulaly:
查到一条记录
owner constraint_name table_name column_name
PMIS PK_PM_OM_INSTS PM_OM_INSTS INST_ID
这就说明FK_12157引用的主键是pm_insts的主键:inst_id吧?!
ps:表dba_cons_columns和dba_constraints各字段的含义是什么啊 我查他们的属性 全是English 看不懂 5555:(
然后我该怎么操作?
您的qq有吗?方便给我吗
Me:271184843
nebulaly 2005-03-09
  • 打赏
  • 举报
回复
select t.* from dba_cons_columns t,dba_constraints c where
t.constraint_name =c.r_constraint_name and c.constraint_name ='FK_12157'
swollow_1980 2005-03-09
  • 打赏
  • 举报
回复
to up:我该怎么确定呢?怎么查看呢?
lcg412 2005-03-08
  • 打赏
  • 举报
回复
用級聯方式刪除也可以
如果你一定要找出原因的話
首先你得確定該表的外鍵是不是只關鍵到一個表,找到PMIS.FK_23257對應的表
rolandzhang 2005-03-08
  • 打赏
  • 举报
回复
采用级联方式删除:
delete from out_record where inst_id=3 cascade constraint

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧