sql递归删除
⑴ oracle删除表的时候时候出现递归sql级别2出现错误表或视图不存在,在sysiao中删除用户也是是这个错,求解
这是典型的语法错误。
表名不存在。
或,把你的SQL复制出来。
⑵ oracle 表删除出错 ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01426: 数字溢出
解决办法:
在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下:
1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计算机名字或者ip,端口号还是1521,然后保存让宴。
2.重启监听服务。
3.启动Database configuration Assistant “配置数据库选件”就可以重新配置em了,而不用枯贺删除数据库。再次创建数据库坦败银时也不会报如上的错误。
⑶ 递归SQL语句、索引的HEIGHT和BLEVEL以及SELECT FOR UPDATE相关问题
1,所谓的递归sql就是在运行当前的sql时调用另外一个sql,如果另外一个sql又调用了另一个sql,那么递归深度就是1(从0开始)。
2,unique scan一般出现在扫描具有unique约束的索引列上:
scott@ORCL>select * from emp where empno=7788;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7788 TEST ANALYST 7566 09-12月-83 10000 20
执行计划
----------------------------------------------------------
Plan hash value: 1181765974
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 37 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 37 | 1 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | EMP_EMPNO_IDX | 1 | | 0 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
因为CBO知道这个索引是唯一的,所以确裤瞎定在扫描时只会返回一个rowid。
而range scan一般是扫描非唯一索引时,原理同上含旦,不再赘述。
3,scott@ORCL>analyze index emp_empno_idx validate structure;
索引已分析
scott@ORCL>select HEIGHT from index_stats;
HEIGHT
----------
1
scott@ORCL>select blevel from user_indexes where index_name='EMP_EMPNO_IDX'谈纯扰;
BLEVEL
----------
0
另外平衡树的索引结构如下:
1
/\
/ \
2 3
/ \
4 5
height也就是索引的高度,这里是3。
而blevel指的是从根遍历到当前块要走的路径长度,比如:2,3的blevel为1;4,5的为2,根本身的blevel为0
而在user_indexes中的blevel字段值正是上面值的最大值,通常等于树的高度,即height值:
下面是实例说明:
scott@ORCL>create table test as select * from sys.SOURCE$;
表已创建。
scott@ORCL>desc test
名称
-----------------------------------------------------------------------------------------------------
OBJ#
LINE
SOURCE
scott@ORCL>create index test_idx on test(obj#);
索引已创建。
scott@ORCL>analyze index test_idx validate structure;
索引已分析
scott@ORCL>select blevel from all_indexes where lower(index_name)='test_idx';
BLEVEL
----------
2
4,当然可行,因为这时其它行是没有被锁定的。
scott@ORCL>select * from emp where deptno=10 for update;
sys@ORCL>delete from scott.emp where deptno!=10;
已删除11行。
其实有的问题只要自己动手实践一下就行了,另外树高度为三级的索引是非常罕见的,除非你的表是非常的巨大。
⑷ sql触发器 递归 问题
触发器有两种不同的递归方式,直接递归和间接递归。
1.直接递归
当触发器被激活并执行一个操作时,该操衡销作又使用同一个触发器再次执行操作,被称为直接递归。
例利用触发器的直接递归,当在表中删除一条记录时,通过触发器删除表中所有编号相同的记录。
2.间接递归
更改表1中的数据时,触发器被激活并执行一个操作,而该操作又使另一个表2中的某个触发器被激活。表2中的这个触发器使表1得到更新,从而再次激活表1中的触发器,被称为间接递归。
例如,一应用程序更新了氏滚表TA,并引发触发器Trigger_A。Trigger_A更新表TB,从而使触发器Trigger_B被引发。Trigger_B转而更新表TA,从而使Trigger_A再次被引发间接递归。
可以利用系统存储过程sp_dboption关闭直接递归,但这又会开启间接递归。若要把这两种类型的递归都禁止,需要使用系统存储过程sp_configure。
参考资料:明日系列编程词典--SQL Server 编程咐核游词典体验版
⑸ sql2005 根据子ID递归查询所有父ID,如下,问:dbo怎么才能否去掉
因为你的with后面的名启者闭称和悄裂表的名称一样了,冲突了嫌隐。
WITH XI_news_Class 改成with 其他名称
⑹ sql无限递归如何删除
CREATE PROCEDURE up_delete
@delid int
AS
declare @cnt int
select count(1)=@cnt from table where parentid=@delid
if (@cnt >0)
begin
exec up_delete @delid
end
delete from table where id=@delid
go
调用方法 exec up_delete @id,会删除某个id以及此id的所有子早猛兆类知扒。陆租
⑺ sql如何利用递归批量删除数据
在设计数据库是 考虑 外键的添加,然后 项目中 利用 级联删除 实现你想要的效果。。。
⑻ SQL递归或级联删除操作,无限极,无限量
设置外键,在数据库中启用级联删除和级联更新选项
⑼ 在oracle数据库中,想要删除一个用户,但是报递归SQL级别1出现错误,表或视图不存在,请问有办法解决吗
drop user 用户名 cascade;
删除用户的同时会把该用户模式下的对象也删除。
⑽ oracle 10g 删除用户时提示ORA-00604 :递归SQL级别 1
用sys用户登录 删除。