The New Home of Oracle-wiki.net

All things oracle...

A website for IT Professionals involved with Oracle database.

LinkLinkedIn

Using Query Blocks in Hints

Introduction

Some hints require you to specify the query block that the hint applies too. This example, taken from the Oracle manual explains how to find the query block and apply it to the hint.


Example

1. A view is defined as follows

CREATE OR REPLACE VIEW v_emp_job_history AS

  SELECT e1.first_name, e1.last_name, j.job_id, sum(e2.salary) total_sal

  FROM   employees e1, (SELECT * FROM employees e3) e2, job_history j

  WHERE  e1.employee_id = e2.manager_id

  AND    e1.employee_id = j.employee_id

  AND    e1.hire_date = j.start_date

  AND    e1.salary = ( SELECT max(e2.salary) 

                       FROM employees e2 

                       WHERE e2.department_id = e1.department_id ) 

  GROUP BY e1.first_name, e1.last_name, j.job_id

  ORDER BY total_sal;


2. Run an explain plan on a select from the view


3. View the plan_table


4. Find the full table scan operation in the plan output and use the line ID to discover the query block name

------------------------------------------------------------------------------

|Id| Operation                        |Name        |Rows|Bytes|Cost |Time

------------------------------------------------------------------------------

|0 | SELECT STATEMENT                 |            |1   |46   |9(34)|00:00:01|

.

.

.

|11|          TABLE ACCESS FULL       | EMPLOYEES  |107 |749  |3(0) |00:00:01|  <----Operation ID for the Full Table Scan is 11.

.

.

.

-------------------------------------------------------------------------------


Query Block Name / Object Alias (identified by operation id):

-------------------------------------------------------------


   1 - SEL$2980E977 / V_EMP_JOB_HISTORY@SEL$1

   2 - SEL$2980E977

   8 - SEL$8F9407EC / VW_SQ_1@SEL$32F848CB

   9 - SEL$8F9407EC

  11 - SEL$8F9407EC / E2@SEL$4. <--- Use the operation ID 11, to find the query block name, which is SEL$4


5. Use the NO_UNNEST hint with the Query Block SEL$4


Published on 

Published 1st January 2022