Oracle中where
子句条件中的嵌套级别是否有任何限制?例如:
select * from sample where ((((a or b) or c) or d) or e)
答案 0 :(得分:3)
在oracle中嵌套where condition子句的级别是否有限制?
select * from sample where ((((a or b) or c) or d) or e)
理论上,没有。
实际上,你会受到maximum size of an SQL statement系统的物理限制的限制(或者,也可能受到下一位开发人员的愤怒的限制,并且无法解决哪些问题。数千个开始和结束括号在您的陈述中匹配。)
如果你真的想要,你可以这样做:
DECLARE
v_sql CLOB;
BEGIN
v_sql := 'SELECT * FROM DUAL WHERE ';
FOR i IN 1 .. 100000 LOOP
v_sql := v_sql || '(';
END LOOP;
v_sql := v_sql || '1=1';
FOR i IN 1 .. 100000 LOOP
v_sql := v_sql || ')';
END LOOP;
EXECUTE IMMEDIATE v_sql;
END;
/
答案 1 :(得分:0)
我假设在哪里嵌套你的意思是在Oracledb中相关的子查询嵌套?
从版本10开始,这是1级深度,从版本10开始是255级。
至少这是我理解的方式:
编辑:我明白了。你正在做的事情不是嵌套WHERE子句,而是嵌套逻辑条件。我不认为这些限制,但如果你不断添加更多,你可能会遇到太长时间的查询。来自Oracle数据库SQL参考10g第1版(10.1)当嵌套子查询引用a时,Oracle执行相关子查询 表中的列引用父语句的任意数量 子查询之上的级别
从Oracle9i SQL Reference Release 2(9.2)Oracle执行 子查询引用表中的列时的相关子查询 在父母陈述中提到。
SELECT语句的WHERE子句中的子查询也称为a 嵌套子查询。您可以在a中嵌套最多255个子查询级别 嵌套子查询。
这取决于多于1个因素,有些是:
您可以在此处找到更多信息: database limitations