代码之家  ›  专栏  ›  技术社区  ›  jsosnowski

Oracle WITH子句-强制执行未使用的语句(禁用优化)

  •  1
  • jsosnowski  · 技术社区  · 7 年前

    问题:Oracle DB使用了一些优化而没有执行 WITH

    问题:

    是否可以禁用Oracle的优化并在中执行所有查询 条款?有什么特别的提示吗?

    细节:

    Oracle Database Context 我从Java程序执行查询的内部机制。 Database session-based application context initialized locally 上下文类型。 因此,在一个数据库会话中,我可以设置一些上下文变量,只有在该会话中它才可见。

    我有一个想法,就是在真正的SQL查询之前执行函数(它设置必要的上下文变量)。所以最好的办法就是把这两件事结合起来。这对我来说是最好的选择。

    最小示例:

    如果我们执行(或查看explain plan)这个查询,我们会注意到 EXEC_CTX 子查询未执行。 real_table 实际上是由甲骨文执行的。 我们能不能强迫甲骨文执行这两个 询问)?

    WITH EXEC_CTX AS (
      select set_my_ctx(42) from dual
    )
    SELECT *
      FROM real_table rt
     WHERE rt.col_x = SYS_CONTEXT('CTX_NAME', 'PARAM_ID')
    ;
    

    0 回复  |  直到 7 年前