限制嵌套条件

时间:2017-10-16 10:32:27

标签: sql oracle

Oracle中where子句条件中的嵌套级别是否有任何限制?例如:

select * from sample where ((((a or b) or c) or d) or e)

2 个答案:

答案 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级。

至少这是我理解的方式:

  

来自Oracle数据库SQL参考10g第1版(10.1)当嵌套子查询引用a时,Oracle执行相关子查询   表中的列引用父语句的任意数量   子查询之上的级别

     

从Oracle9i SQL Reference Release 2(9.2)Oracle执行   子查询引用表中的列时的相关子查询   在父母陈述中提到。

     

SELECT语句的WHERE子句中的子查询也称为a   嵌套子查询。您可以在a中嵌套最多255个子查询级别   嵌套子查询。

编辑:我明白了。你正在做的事情不是嵌套WHERE子句,而是嵌套逻辑条件。我不认为这些限制,但如果你不断添加更多,你可能会遇到太长时间的查询。

这取决于多于1个因素,有些是:

  • db version
  • 操作系统和操作系统版本
  • architecture(64/32)

您可以在此处找到更多信息: database limitations