{"id":14295,"date":"2020-06-16T20:51:22","date_gmt":"2020-06-16T18:51:22","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/"},"modified":"2020-06-16T20:51:22","modified_gmt":"2020-06-16T18:51:22","slug":"column-level-collate","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/","title":{"rendered":"Oracle non-linguistic varchar2 columns to order by without sorting"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nSorting data is an expensive operation and many queries declare an ORDER BY. To avoid the sort operation you can build an index as it maintains a sorted structure. This helps with Top-N queries as you don&#8217;t have to read all rows but only those from a range of index entries. However, indexes are sorted by binary values. For NUMBER or DATE datatypes, the internal storage ensures that the order is preserved in the binary format. For character strings, the binary format is ASCII, which follows the English alphabet. That&#8217;s fine when your session language, NLS_LANGUAGE, defines an NLS_SORT that follows this BINARY order. But as soon as you set a language that has some specific alphabetical order, having an index on a VARCHAR2 or CHAR column does not help to avoid a SORT operation. However, in Oracle 12.2 we can define the sort order at column level with the SQL Standard COLLATE. One use case is for alpha-numeric columns that have nothing to do with any language. Like some natural keys combining letters and numbers. The user expects them to be listed in alphabetical order but, storing only 7-bits ASCII characters, you don&#8217;t care about linguistic collation.<\/p>\n<p>I am running this on the Oracle 20c preview in the Oracle Cloud.<\/p>\n<h3>VARCHAR2<\/h3>\n<p>It can happen that a primary key is not a NUMBER but a CHAR or VARCHAR2, like this:<\/p>\n<pre><code>\nSQL&gt; create table demo (ID constraint demp_pk primary key) as\n  2  select cast(dbms_random.string('U',1)||to_char(rownum,'FM0999') as varchar2(5)) ID\n  3  from xmltable('1 to 10');\n\nTable created.\n\nSQL&gt; select * from demo order by ID;\n\n      ID\n________\nK0003\nK0009\nL0007\nL0010\nM0008\nO0002\nS0001\nW0005\nY0006\nZ0004\n\n10 rows selected.\n<\/code><\/pre>\n<p>I query with ORDER BY because sorting can make sense on a natural key.<\/p>\n<h3>Index<\/h3>\n<p>I have an index on this column, which is sorted, and then the execution plan is optimized:<\/p>\n<pre><code>\nSQL&gt; select * from dbms_xplan.display_cursor(format=&gt;'basic');\n\n                      PLAN_TABLE_OUTPUT\n_______________________________________\nEXPLAINED SQL STATEMENT:\n------------------------\nselect * from demo order by ID\n\nPlan hash value: 1955576728\n\n------------------------------------\n| Id  | Operation        | Name    |\n------------------------------------\n|   0 | SELECT STATEMENT |         |\n|   1 |  INDEX FULL SCAN | DEMP_PK |\n------------------------------------\n\n13 rows selected.\n<\/code><\/pre>\n<p>There&#8217;s no SORT operation because the INDEX FULL SCAN follows the index entries in order.<\/p>\n<h3>NLS_LANGUAGE<\/h3>\n<p>However, there are many countries where we don&#8217;t speak English:<\/p>\n<pre><code>\nSQL&gt; alter session set nls_language='French';\n\nSession altered.\n<\/code><\/pre>\n<p>In French, like in many languages, we have accentuated characters and other specificities so that the language-alphabetical order does not always follow the ASCII order.<\/p>\n<p>I&#8217;m running exactly the same query:<\/p>\n<pre><code>\nSQL&gt; select * from demo order by ID;\n\n      ID\n________\nK0003\nK0009\nL0007\nL0010\nM0008\nO0002\nS0001\nW0005\nY0006\nZ0004\n\n10 rows selected.\n\nSQL&gt; select * from dbms_xplan.display_cursor(format=&gt;'basic');\n\n                      PLAN_TABLE_OUTPUT\n_______________________________________\nEXPLAINED SQL STATEMENT:\n------------------------\nselect * from demo order by ID\n\nPlan hash value: 2698718808\n\n------------------------------------\n| Id  | Operation        | Name    |\n------------------------------------\n|   0 | SELECT STATEMENT |         |\n|   1 |  SORT ORDER BY   |         |\n|   2 |   INDEX FULL SCAN| DEMP_PK |\n------------------------------------\n\n14 rows selected.\n<\/code><\/pre>\n<p>This time, there&#8217;s a SORT operation. even if I&#8217;m still reading with INDEX FULL SCAN.<\/p>\n<h3>NLS_SORT<\/h3>\n<p>The reason is that, by setting the &#8216;French&#8217; language, I&#8217;ve also set the French sort collating sequence.<\/p>\n<pre><code>\nSQL&gt; select * from nls_session_parameters;\n                 PARAMETER                           VALUE\n__________________________ _______________________________\nNLS_LANGUAGE               FRENCH\nNLS_SORT                   FRENCH\n<\/code><\/pre>\n<p>And this is different from the BINARY one that I had when my language was &#8216;American&#8217;. <\/p>\n<p>Actually, only a few languages follow the BINARY order of the ASCII table:<\/p>\n<pre><code>\nSQL&gt;\n  declare\n   val varchar2(64);\n  begin\n    for i in (select VALUE from V$NLS_VALID_VALUES where PARAMETER='LANGUAGE') loop\n    execute immediate 'alter session set nls_language='''||i.value||'''';\n    select value into val from NLS_SESSION_PARAMETERS where PARAMETER='NLS_SORT';\n    if val='BINARY' then dbms_output.put(i.value||' '); end if;\n    end loop;\n    dbms_output.put_line('');\n  end;\n\/\n\nAMERICAN JAPANESE KOREAN SIMPLIFIED CHINESE TRADITIONAL CHINESE ENGLISH HINDI TAMIL KANNADA TELUGU ORIYA MALAYALAM ASSAMESE GUJARATI MARATHI PUNJABI BANGLA MACEDONIAN LATIN SERBIAN IRISH\n\nPL\/SQL procedure successfully completed.\n<\/code><\/pre>\n<p>This is ok for real text but not for my primary key where ASCII order is ok. I can set the NLS_SORT=BINARY for my session, but that&#8217;s too wide as my problem is only with a column.<\/p>\n<p>Or I can create an index for the French collation. Actually, this is what is used internally:<\/p>\n<pre><code>\nSQL&gt; explain plan for select * from demo order by ID;\nExplained.\n\nSQL&gt; select * from dbms_xplan.display(format=&gt;'basic +projection');\n                                                      PLAN_TABLE_OUTPUT\n_______________________________________________________________________\nPlan hash value: 2698718808\n\n------------------------------------\n| Id  | Operation        | Name    |\n------------------------------------\n|   0 | SELECT STATEMENT |         |\n|   1 |  SORT ORDER BY   |         |\n|   2 |   INDEX FULL SCAN| DEMP_PK |\n------------------------------------\n\nColumn Projection Information (identified by operation id):\n-----------------------------------------------------------\n\n   1 - (#keys=1) NLSSORT(\"DEMO\".\"ID\",'nls_sort=''GENERIC_M''')[50],\n       \"DEMO\".\"ID\"[VARCHAR2,5]\n   2 - \"DEMO\".\"ID\"[VARCHAR2,5]\n<\/code><\/pre>\n<p>GENERIC_M is the sort collation for many European languages.<\/p>\n<p>But that again, does not fit the scope of my problem as I don&#8217;t want to create an index for any possible NLS_SORT setting.<\/p>\n<h3>COLLATE<\/h3>\n<p>The good solution is to define the collation for my table column: this ID is a character string, but it is an ASCII character string which has nothing to do with my language. In 18c I can do that:<\/p>\n<pre><code>\nSQL&gt; alter table demo modify ID collate binary;\n\nTable altered.\n<\/code><\/pre>\n<p>The COLLATE is a SQL Standard syntax that exists in other databases, and it came to Oracle in 12cR2.<\/p>\n<p>And that&#8217;s all:<\/p>\n<pre><code>\nSQL&gt; explain plan for select * from demo order by ID;\n\nExplained.\n\nSQL&gt; select * from dbms_xplan.display(format=&gt;'basic +projection');\n\n                                             PLAN_TABLE_OUTPUT\n______________________________________________________________\nPlan hash value: 1955576728\n\n------------------------------------\n| Id  | Operation        | Name    |\n------------------------------------\n|   0 | SELECT STATEMENT |         |\n|   1 |  INDEX FULL SCAN | DEMP_PK |\n------------------------------------\n\nColumn Projection Information (identified by operation id):\n-----------------------------------------------------------\n   1 - \"DEMO\".\"ID\"[VARCHAR2,5]\n<\/code><\/pre>\n<p>No SORT operation needed, whatever the language I set for my session.<\/p>\n<p>Here is the DDL for my table:<\/p>\n<pre><code>\nSQL&gt; ddl demo\n\n  CREATE TABLE \"SYS\".\"DEMO\"\n   (    \"ID\" VARCHAR2(5) COLLATE \"BINARY\",\n         CONSTRAINT \"DEMP_PK\" PRIMARY KEY (\"ID\")\n  USING INDEX  ENABLE\n   )  DEFAULT COLLATION \"USING_NLS_COMP\" ;\n\n<\/code><\/pre>\n<p>My column explicitly follows the BINARY collation.<\/p>\n<h3>Extended Data Types<\/h3>\n<p>Now, all seems easy, but there&#8217;s a prerequisite:<\/p>\n<pre><code>\nSQL&gt; show parameter max_string_size\n\nNAME            TYPE   VALUE\n--------------- ------ --------\nmax_string_size string EXTENDED\n<\/code><\/pre>\n<p>I have set my PDB to EXTENDED string size.<\/p>\n<p>If I try the same in a PDB with the &#8216;old&#8217; limit of 4000 bytes:<\/p>\n<pre><code>\nSQL&gt; alter session set container=PDB1;\n\nSession altered.\n\nSQL&gt; show parameter max_string_size\n\nNAME            TYPE   VALUE\n--------------- ------ --------\nmax_string_size string STANDARD\n\nSQL&gt; drop table demo;\n\nTable dropped.\n\nSQL&gt; create table demo (ID varchar2(5) collate binary constraint demp_pk primary key);\n\ncreate table demo (ID varchar2(5) collate binary constraint demp_pk primary key)\n *\nERROR at line 1:\nORA-43929: Collation cannot be specified if parameter MAX_STRING_SIZE=STANDARD is set.\n<\/code><\/pre>\n<p>This new feature is allowed only with the Extended Data Types introduced in 12c release 2.<\/p>\n<h3>ORDER BY COLLATE<\/h3>\n<p>Ok, let&#8217;s create the table with the default collation:<\/p>\n<pre><code>\nSQL&gt; create table demo (ID constraint demp_pk primary key) as\n  2  select cast(dbms_random.string('U',1)||to_char(rownum,'FM0999') as varchar2(5)) ID\n  3  from xmltable('1 to 10');\n\nTable created.\n\nSQL&gt; select * from dbms_xplan.display_cursor(format=&gt;'basic +projection');\n\n                                                   PLAN_TABLE_OUTPUT\n____________________________________________________________________\nEXPLAINED SQL STATEMENT:\n------------------------\nselect * from demo order by ID\n\nPlan hash value: 2698718808\n\n------------------------------------\n| Id  | Operation        | Name    |\n------------------------------------\n|   0 | SELECT STATEMENT |         |\n|   1 |  SORT ORDER BY   |         |\n|   2 |   INDEX FULL SCAN| DEMP_PK |\n------------------------------------\n\nColumn Projection Information (identified by operation id):\n-----------------------------------------------------------\n\n   1 - (#keys=1) NLSSORT(\"DEMO\".\"ID\",'nls_sort=''FRENCH''')[50],\n       \"DEMO\".\"ID\"[VARCHAR2,5]\n   2 - \"DEMO\".\"ID\"[VARCHAR2,5]\n\n<\/code><\/pre>\n<p>As my NLS_SORT is &#8216;French&#8217; there is a SORT operation.<\/p>\n<p>But I can explicitly request a BINARY sort for this:<\/p>\n<pre><code>\nSQL&gt; select * from demo order by ID collate binary;\n\n      ID\n________\nD0003\nH0002\nL0009\nN0008\nP0010\nQ0005\nR0004\nW0007\nY0001\nZ0006\n\n10 rows selected.\n\nSQL&gt; select * from dbms_xplan.display_cursor(format=&gt;'basic +projection');\n\n                                             PLAN_TABLE_OUTPUT\n______________________________________________________________\nEXPLAINED SQL STATEMENT:\n------------------------\nselect * from demo order by ID collate binary\n\nPlan hash value: 2698718808\n\n------------------------------------\n| Id  | Operation        | Name    |\n------------------------------------\n|   0 | SELECT STATEMENT |         |\n|   1 |  SORT ORDER BY   |         |\n|   2 |   INDEX FULL SCAN| DEMP_PK |\n------------------------------------\n\nColumn Projection Information (identified by operation id):\n-----------------------------------------------------------\n\n   1 - (#keys=1) \"DEMO\".\"ID\" COLLATE \"BINARY\"[5],\n       \"DEMO\".\"ID\"[VARCHAR2,5]\n   2 - \"DEMO\".\"ID\"[VARCHAR2,5]\n\n<\/code><\/pre>\n<p>I have no idea why there is still a sort operation. I think that the INDEX FULL SCAN returns already the rows in binary order. And that should require additional sorting for the ORDER BY &#8230; COLLATE BINARY.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . Sorting data is an expensive operation and many queries declare an ORDER BY. To avoid the sort operation you can build an index as it maintains a sorted structure. This helps with Top-N queries as you don&#8217;t have to read all rows but only those from a range of index entries. [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[955,59],"tags":[1998,91,96,209,458,98],"type_dbi":[],"class_list":["post-14295","post","type-post","status-publish","format-standard","hentry","category-cloud","category-oracle","tag-collate","tag-index","tag-oracle","tag-oracle-12c","tag-oracle-20c","tag-sql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oracle non-linguistic varchar2 columns to order by without sorting - dbi Blog<\/title>\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\/column-level-collate\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle non-linguistic varchar2 columns to order by without sorting\" \/>\n<meta property=\"og:description\" content=\"By Franck Pachot . Sorting data is an expensive operation and many queries declare an ORDER BY. To avoid the sort operation you can build an index as it maintains a sorted structure. This helps with Top-N queries as you don&#8217;t have to read all rows but only those from a range of index entries. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-16T18:51:22+00:00\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\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=\"7 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\\\/column-level-collate\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/column-level-collate\\\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"Oracle non-linguistic varchar2 columns to order by without sorting\",\"datePublished\":\"2020-06-16T18:51:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/column-level-collate\\\/\"},\"wordCount\":708,\"commentCount\":0,\"keywords\":[\"Collate\",\"index\",\"Oracle\",\"Oracle 12c\",\"Oracle 20c\",\"SQL\"],\"articleSection\":[\"Cloud\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/column-level-collate\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/column-level-collate\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/column-level-collate\\\/\",\"name\":\"Oracle non-linguistic varchar2 columns to order by without sorting - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2020-06-16T18:51:22+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/column-level-collate\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/column-level-collate\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/column-level-collate\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle non-linguistic varchar2 columns to order by without sorting\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"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\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/oracle-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Oracle non-linguistic varchar2 columns to order by without sorting - dbi Blog","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\/column-level-collate\/","og_locale":"en_US","og_type":"article","og_title":"Oracle non-linguistic varchar2 columns to order by without sorting","og_description":"By Franck Pachot . Sorting data is an expensive operation and many queries declare an ORDER BY. To avoid the sort operation you can build an index as it maintains a sorted structure. This helps with Top-N queries as you don&#8217;t have to read all rows but only those from a range of index entries. [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/","og_site_name":"dbi Blog","article_published_time":"2020-06-16T18:51:22+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"Oracle non-linguistic varchar2 columns to order by without sorting","datePublished":"2020-06-16T18:51:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/"},"wordCount":708,"commentCount":0,"keywords":["Collate","index","Oracle","Oracle 12c","Oracle 20c","SQL"],"articleSection":["Cloud","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/column-level-collate\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/","url":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/","name":"Oracle non-linguistic varchar2 columns to order by without sorting - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2020-06-16T18:51:22+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/column-level-collate\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/column-level-collate\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Oracle non-linguistic varchar2 columns to order by without sorting"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","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":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/14295","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=14295"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/14295\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=14295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=14295"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=14295"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=14295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}