{"id":4390,"date":"2015-03-03T18:52:30","date_gmt":"2015-03-03T17:52:30","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/"},"modified":"2015-03-03T18:52:30","modified_gmt":"2015-03-03T17:52:30","slug":"generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/","title":{"rendered":"Generic query for multicriteria search &#8211; part II: BIND_AWARE (Adaptive Cursor Sharing)"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nIn the <a href=\"\/generic-query-for-multicriteria-search-part-i-useconcat-or-expansion\">previous post<\/a> I explained the performance issue encountered when using a generic query to deal with optional search criteria on multiple columns. The statement was shared by all executions, was marked as bind sensitive, but never became bind aware. Let&#8217;s use the BIND_AWARE hint.<\/p>\n<h3>All binds null<\/h3>\n<p>I assign null for all of them &#8211; meaning that I don&#8217;t want to filter anything:<\/p>\n<pre><code>SQL&gt; exec :job_id:=null; :department_id:=null; :manager_id:=null; :employee_id:=null;\nPL\/SQL procedure successfully completed.\n<\/code><\/pre>\n<p>and I run my generic query &#8211; but with the BIND_AWARE hint:<\/p>\n<pre><code>SQL&gt;\n     SELECT \/*+ BIND_AWARE *\/\n     COUNT(*)\n     FROM\n       (SELECT 1\n       FROM employees\n       WHERE (job_id = NVL(:job_id, job_id))\n       AND (department_id = NVL(:department_id, department_id))\n       AND (manager_id = NVL(:manager_id, manager_id))\n       AND (employee_id = NVL(:employee_id, employee_id))\n       )\nSQL&gt; \/\n\n  COUNT(*)\n----------\n       105\n<\/code><\/pre>\n<p>and here is the plan:<\/p>\n<pre><code>SQL&gt; select * from table(dbms_xplan.display_cursor(format=&gt;'allstats last +outline'));\n\nPLAN_TABLE_OUTPUT\n------------------------------------------------------------------------------------\nSQL_ID  fhpytfwk0y4r3, child number 0\n-------------------------------------\nSELECT \/*+ BIND_AWARE *\/ COUNT(*) FROM   (SELECT 1   FROM employees\nWHERE (job_id = NVL(:job_id, job_id))   AND (department_id =\nNVL(:department_id, department_id))   AND (manager_id =\nNVL(:manager_id, manager_id))   AND (employee_id = NVL(:employee_id,\nemployee_id))   )\n\nPlan hash value: 3424141370\n\n------------------------------------------------------------------------------------\n| Id  | Operation                       | Name          | Starts | E-Rows | A-Rows |\n------------------------------------------------------------------------------------\n|   0 | SELECT STATEMENT                |               |      1 |        |      1 |\n|   1 |  SORT AGGREGATE                 |               |      1 |      1 |      1 |\n|   2 |   CONCATENATION                 |               |      1 |        |    105 |\n|*  3 |    FILTER                       |               |      1 |        |    105 |\n|*  4 |     TABLE ACCESS BY INDEX ROWID | EMPLOYEES     |      1 |    105 |    105 |\n|*  5 |      INDEX FULL SCAN            | EMP_EMP_ID_PK |      1 |    107 |    107 |\n|*  6 |    FILTER                       |               |      1 |        |      0 |\n|*  7 |     TABLE ACCESS BY INDEX ROWID | EMPLOYEES     |      0 |      1 |      0 |\n|*  8 |      INDEX UNIQUE SCAN          | EMP_EMP_ID_PK |      0 |      1 |      0 |\n------------------------------------------------------------------------------------\n\nOutline Data\n-------------\n\n  \/*+\n      BEGIN_OUTLINE_DATA\n      IGNORE_OPTIM_EMBEDDED_HINTS\n      OPTIMIZER_FEATURES_ENABLE('12.1.0.2')\n      DB_VERSION('12.1.0.2')\n      ALL_ROWS\n      OUTLINE_LEAF(@\"SEL$F5BB74E1\")\n      MERGE(@\"SEL$2\")\n      OUTLINE_LEAF(@\"SEL$F5BB74E1_1\")\n      USE_CONCAT(@\"SEL$F5BB74E1\" 8 OR_PREDICATES(4))\n      OUTLINE_LEAF(@\"SEL$F5BB74E1_2\")\n      OUTLINE(@\"SEL$1\")\n      OUTLINE(@\"SEL$2\")\n      OUTLINE(@\"SEL$F5BB74E1\")\n      MERGE(@\"SEL$2\")\n      INDEX(@\"SEL$F5BB74E1_1\" \"EMPLOYEES\"@\"SEL$2\" (\"EMPLOYEES\".\"EMPLOYEE_ID\"))\n      BATCH_TABLE_ACCESS_BY_ROWID(@\"SEL$F5BB74E1_1\" \"EMPLOYEES\"@\"SEL$2\")\n      INDEX_RS_ASC(@\"SEL$F5BB74E1_2\" \"EMPLOYEES\"@\"SEL$F5BB74E1_2\" (\"EMPLOYEES\".\"EMPLOYEE_ID\"))\n      END_OUTLINE_DATA\n  *\/\n\nPredicate Information (identified by operation id):\n---------------------------------------------------\n\n   3 - filter(:EMPLOYEE_ID IS NULL)\n   4 - filter((\"DEPARTMENT_ID\"=NVL(:DEPARTMENT_ID,\"DEPARTMENT_ID\") AND\n              \"MANAGER_ID\"=NVL(:MANAGER_ID,\"MANAGER_ID\") AND \"JOB_ID\"=NVL(:JOB_ID,\"JOB_ID\")))\n   5 - filter(\"EMPLOYEE_ID\" IS NOT NULL)\n   6 - filter(:EMPLOYEE_ID IS NOT NULL)\n   7 - filter((\"DEPARTMENT_ID\"=NVL(:DEPARTMENT_ID,\"DEPARTMENT_ID\") AND\n              \"MANAGER_ID\"=NVL(:MANAGER_ID,\"MANAGER_ID\") AND \"JOB_ID\"=NVL(:JOB_ID,\"JOB_ID\")))\n   8 - access(\"EMPLOYEE_ID\"=:EMPLOYEE_ID)\n\n<\/code><\/pre>\n<p>It&#8217;s the same plan as before. FULL SCAN in the index on EMPLOYEE_ID because the CBO estimates it&#8217;s the fastest way to get non null EMPLOYEE_ID.<\/p>\n<h3>query for one EMPLOYEE_ID<\/h3>\n<p>And now running the same query, but for a specific EMPLOYEE_ID<\/p>\n<pre><code>SQL&gt; exec :job_id:=null; :department_id:=null; :manager_id:=null; :employee_id:=0;\nPL\/SQL procedure successfully completed.\n<\/code><\/pre>\n<pre><code>SQL&gt; \/\n\n  COUNT(*)\n----------\n         0<\/code><\/pre>\n<p>A new cursor has been created for it:<\/p>\n<pre><code>SQL&gt; select * from table(dbms_xplan.display_cursor(format=&gt;'allstats last +outline'));\n\nPLAN_TABLE_OUTPUT\n------------------------------------------------------------------------------------\nSQL_ID  fhpytfwk0y4r3, child number 1\n-------------------------------------\nSELECT \/*+ BIND_AWARE *\/ COUNT(*) FROM   (SELECT 1   FROM employees\nWHERE (job_id = NVL(:job_id, job_id))   AND (department_id =\nNVL(:department_id, department_id))   AND (manager_id =\nNVL(:manager_id, manager_id))   AND (employee_id = NVL(:employee_id,\nemployee_id))   )\n\nPlan hash value: 1540312732\n\n-------------------------------------------------------------------------------\n| Id  | Operation                 | Name           | Starts | E-Rows | A-Rows |\n-------------------------------------------------------------------------------\n|   0 | SELECT STATEMENT          |                |      1 |        |      1 |\n|   1 |  SORT AGGREGATE           |                |      1 |      1 |      1 |\n|   2 |   CONCATENATION           |                |      1 |        |      0 |\n|*  3 |    FILTER                 |                |      1 |        |      0 |\n|*  4 |     TABLE ACCESS BY INDEX | EMPLOYEES      |      1 |      1 |      0 |\n|*  5 |      INDEX FULL SCAN      | EMP_MANAGER_IX |      1 |      1 |    106 |\n|*  6 |    FILTER                 |                |      1 |        |      0 |\n|*  7 |     TABLE ACCESS BY INDEX | EMPLOYEES      |      0 |      1 |      0 |\n|*  8 |      INDEX RANGE SCAN     | EMP_MANAGER_IX |      0 |      1 |      0 |\n-------------------------------------------------------------------------------\nPredicate Information (identified by operation id):\n---------------------------------------------------\n\n   3 - filter(:MANAGER_ID IS NULL)\n   4 - filter((\"EMPLOYEE_ID\"=NVL(:EMPLOYEE_ID,\"EMPLOYEE_ID\") AND\n              \"DEPARTMENT_ID\"=NVL(:DEPARTMENT_ID,\"DEPARTMENT_ID\") AND \"JOB_ID\"=NVL(:JOB_ID,\"JOB_ID\")))\n   5 - filter(\"MANAGER_ID\" IS NOT NULL)\n   6 - filter(:MANAGER_ID IS NOT NULL)\n   7 - filter((\"EMPLOYEE_ID\"=NVL(:EMPLOYEE_ID,\"EMPLOYEE_ID\") AND\n              \"DEPARTMENT_ID\"=NVL(:DEPARTMENT_ID,\"DEPARTMENT_ID\") AND \"JOB_ID\"=NVL(:JOB_ID,\"JOB_ID\")))\n   8 - access(\"MANAGER_ID\"=:MANAGER_ID)\n<\/code><\/pre>\n<p>Now, the optimizer has chosen to full scan the index on MANAGER_ID. Once again the goal is not check if it is the right choice or not. But the important point is that thanks to BIND_AWARE a new cursor has been created and the OR Expansion occured for another predicate:<\/p>\n<pre><code>Outline Data\n-------------\n\n  \/*+\n      BEGIN_OUTLINE_DATA\n      IGNORE_OPTIM_EMBEDDED_HINTS\n      OPTIMIZER_FEATURES_ENABLE('12.1.0.2')\n      DB_VERSION('12.1.0.2')\n      ALL_ROWS\n      OUTLINE_LEAF(@\"SEL$F5BB74E1\")\n      MERGE(@\"SEL$2\")\n      OUTLINE_LEAF(@\"SEL$F5BB74E1_1\")\n      USE_CONCAT(@\"SEL$F5BB74E1\" 8 OR_PREDICATES(3))\n      OUTLINE_LEAF(@\"SEL$F5BB74E1_2\")\n      OUTLINE(@\"SEL$1\")\n      OUTLINE(@\"SEL$2\")\n      OUTLINE(@\"SEL$F5BB74E1\")\n      MERGE(@\"SEL$2\")\n      INDEX(@\"SEL$F5BB74E1_1\" \"EMPLOYEES\"@\"SEL$2\" (\"EMPLOYEES\".\"MANAGER_ID\"))\n      BATCH_TABLE_ACCESS_BY_ROWID(@\"SEL$F5BB74E1_1\" \"EMPLOYEES\"@\"SEL$2\")\n      INDEX_RS_ASC(@\"SEL$F5BB74E1_2\" \"EMPLOYEES\"@\"SEL$F5BB74E1_2\" (\"EMPLOYEES\".\"MANAGER_ID\"))\n      BATCH_TABLE_ACCESS_BY_ROWID(@\"SEL$F5BB74E1_2\" \"EMPLOYEES\"@\"SEL$F5BB74E1_2\")\n      END_OUTLINE_DATA\n  *\/\n<\/code><\/pre>\n<p>From the outline hints we can see that the 3rd predicate has been chosen, which is the one on MANAGER_ID. Note that the OR_PREDICATE part of the USE_CONCAT is not documented, and can become complex to control when other transformations change the order of predicates.<\/p>\n<h3>All combinations<\/h3>\n<p>I&#8217;ve run it with all combinations and it seems that the OR Expansion occured for the 4 predicate possibilities:<\/p>\n<pre><code>SQL&gt; select distinct plan_table_output from table(dbms_xplan.display_cursor(sql_id=&gt;'fhpytfwk0y4r3',cursor_child_no=&gt;null,format=&gt;'basic +outline +peeked_binds')) where plan_table_output like '%USE_CONCAT%';\n\nPLAN_TABLE_OUTPUT\n--------------------------------------------------------------------------------\n      USE_CONCAT(@\"SEL$F5BB74E1\" 8 OR_PREDICATES(4))\n      USE_CONCAT(@\"SEL$F5BB74E1\" 8 OR_PREDICATES(2))\n      USE_CONCAT(@\"SEL$F5BB74E1\" 8 OR_PREDICATES(3))\n      USE_CONCAT(@\"SEL$F5BB74E1\" 8 OR_PREDICATES(1))\n<\/code><\/pre>\n<p>And I&#8217;ve several cursors:<\/p>\n<pre><code>SQL&gt; select child_number,predicate,range_id,low,high from v$sql_cs_selectivity where sql_id in ('a9taz8xhfu2kc','fhpytfwk0y4r3') order by sql_id,child_number;\n\nCHILD_NUMBER PREDICATE                                  RANGE_ID LOW        HIGH\n------------ ---------------------------------------- ---------- ---------- ----------\n           0 =EMPLOYEE_I                                       0 0.000000   0.000000\n           1 =MANAGER_ID                                       0 0.000000   0.000000\n           2 =DEPARTMENT                                       0 0.000000   0.000000\n           3 =JOB_ID                                           0 0.000000   0.000000\n           4 =EMPLOYEE_I                                       0 0.000000   0.005140\n<\/code><\/pre>\n<p>Is that sufficient? probably not. A dynamic query will probably find a better plan for a specific combination. But at least we have the possibility have several cursors and get a plan that has an efficient index access.<\/p>\n<p>You want more plans without having to do dynamic sampling? You can do that by changing any session parameter that causes an &#8216;optimizer mismatch&#8217;. For example, have a different one for each combination of fields that are null or not. Which optimizer parameter? It would be nice to have a dummy one so that it does not have any side effects. If you have an idea, please post.<\/p>\n<p>Of course there is this &#8220;_optimizer_random_plan&#8221; but do you want to play with an undocumented that has such a name? Maybe that will be for part III&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . In the previous post I explained the performance issue encountered when using a generic query to deal with optional search criteria on multiple columns. The statement was shared by all executions, was marked as bind sensitive, but never became bind aware. Let&#8217;s use the BIND_AWARE hint. All binds null I assign&hellip;&nbsp;<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","neve_meta_reading_time":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[4133,59],"tags":[67],"class_list":["post-4390","post","type-post","status-publish","format-standard","hentry","category-database","category-oracle","tag-performance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Generic query for multicriteria search - part II: BIND_AWARE (Adaptive Cursor Sharing) - dbi services | Blog<\/title>\n<meta name=\"description\" content=\"Is BIND_AWARE a solution for generic multicriteria queries?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Generic query for multicriteria search - part II: BIND_AWARE (Adaptive Cursor Sharing)\" \/>\n<meta property=\"og:description\" content=\"Is BIND_AWARE a solution for generic multicriteria queries?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi services | Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dbiservices\/\" \/>\n<meta property=\"article:published_time\" content=\"2015-03-03T17:52:30+00:00\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:site\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\\\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/bf7c7eb0bec165183207237c9d0ee1d5\"},\"headline\":\"Generic query for multicriteria search &#8211; part II: BIND_AWARE (Adaptive Cursor Sharing)\",\"datePublished\":\"2015-03-03T17:52:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\\\/\"},\"wordCount\":418,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"keywords\":[\"Performance\"],\"articleSection\":[\"Database\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\\\/\",\"name\":\"Generic query for multicriteria search - part II: BIND_AWARE (Adaptive Cursor Sharing) - dbi services | Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2015-03-03T17:52:30+00:00\",\"description\":\"Is BIND_AWARE a solution for generic multicriteria queries?\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Generic query for multicriteria search &#8211; part II: BIND_AWARE (Adaptive Cursor Sharing)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi services Blog\",\"description\":\"#BeSharing\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"alternateName\":\"dbi Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\",\"name\":\"dbi services\",\"alternateName\":\"dbi\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"width\":512,\"height\":512,\"caption\":\"dbi services\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/dbiservices\\\/\",\"https:\\\/\\\/x.com\\\/dbiservices\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/dbi-services\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/dbiservices\"],\"description\":\"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.\",\"email\":\"info@dbi-services.com\",\"telephone\":\"+41 32 422 96 00\",\"legalName\":\"dbi services SA\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/bf7c7eb0bec165183207237c9d0ee1d5\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/oracle-square.png\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/oracle-square.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/oracle-square.png\",\"caption\":\"Oracle Team\"},\"description\":\"Posts published under the Oracle Team account are collective contributions by the dbi services Oracle consultants. The practice covers the full Oracle Database lifecycle: architecture, migration and upgrade, high availability with RAC and Data Guard, backup and recovery, performance tuning, and engineered systems such as Oracle Database Appliance and Exadata. The team holds Oracle certifications up to Certified Master level and operates customer platforms under service level agreements.\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/oracle-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Generic query for multicriteria search - part II: BIND_AWARE (Adaptive Cursor Sharing) - dbi services | Blog","description":"Is BIND_AWARE a solution for generic multicriteria queries?","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/","og_locale":"en_US","og_type":"article","og_title":"Generic query for multicriteria search - part II: BIND_AWARE (Adaptive Cursor Sharing)","og_description":"Is BIND_AWARE a solution for generic multicriteria queries?","og_url":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/","og_site_name":"dbi services | Blog","article_publisher":"https:\/\/www.facebook.com\/dbiservices\/","article_published_time":"2015-03-03T17:52:30+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_creator":"@dbiservices","twitter_site":"@dbiservices","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bf7c7eb0bec165183207237c9d0ee1d5"},"headline":"Generic query for multicriteria search &#8211; part II: BIND_AWARE (Adaptive Cursor Sharing)","datePublished":"2015-03-03T17:52:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/"},"wordCount":418,"commentCount":0,"publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"keywords":["Performance"],"articleSection":["Database","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/","url":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/","name":"Generic query for multicriteria search - part II: BIND_AWARE (Adaptive Cursor Sharing) - dbi services | Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2015-03-03T17:52:30+00:00","description":"Is BIND_AWARE a solution for generic multicriteria queries?","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/generic-query-for-multicriteria-search-part-ii-bindaware-adaptive-cursor-sharing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Generic query for multicriteria search &#8211; part II: BIND_AWARE (Adaptive Cursor Sharing)"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi services Blog","description":"#BeSharing","publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"alternateName":"dbi Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dbi-services.com\/blog\/#organization","name":"dbi services","alternateName":"dbi","url":"https:\/\/www.dbi-services.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","width":512,"height":512,"caption":"dbi services"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/dbiservices\/","https:\/\/x.com\/dbiservices","https:\/\/www.linkedin.com\/company\/dbi-services\/","https:\/\/www.youtube.com\/user\/dbiservices"],"description":"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.","email":"info@dbi-services.com","telephone":"+41 32 422 96 00","legalName":"dbi services SA"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bf7c7eb0bec165183207237c9d0ee1d5","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/12\/oracle-square.png","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/12\/oracle-square.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/12\/oracle-square.png","caption":"Oracle Team"},"description":"Posts published under the Oracle Team account are collective contributions by the dbi services Oracle consultants. The practice covers the full Oracle Database lifecycle: architecture, migration and upgrade, high availability with RAC and Data Guard, backup and recovery, performance tuning, and engineered systems such as Oracle Database Appliance and Exadata. The team holds Oracle certifications up to Certified Master level and operates customer platforms under service level agreements.","url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4390","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=4390"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4390\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=4390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=4390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=4390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}