{"id":9295,"date":"2016-11-11T21:30:37","date_gmt":"2016-11-11T20:30:37","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/"},"modified":"2016-11-11T21:30:37","modified_gmt":"2016-11-11T20:30:37","slug":"12cr2-has-new-sqlplus-features","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/","title":{"rendered":"12cR2 has new SQL*Plus features"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\n12<i>c<\/i>R2 is there. What&#8217;s new in SQL*Plus? For sure, you can&#8217;t expect lot of things from it. The new command line is the SQL*Developer sqlcl which aims to be 100% compatible with SQL*Plus with lot of more features. However, a few little things came here: default editor, command line history and easy row\/LOB prefetch and statement caching.<br \/>\n<!--more--><\/p>\n<h3>_EDITOR<\/h3>\n<p>Yes, it seems that the default editor is &#8216;vi&#8217; instead of &#8216;ed&#8217;, finally. This is a great improvement. Of course, you can set the VISUAL environment variable in your system. But when you come to another environment (which consultants do), this default will save lot of &#8220;define _editor=vi&#8221; keystroke.<\/p>\n<p>The environment variables EDITOR and VISUAL are not set:<\/p>\n<pre><code>\nSQL&gt; host set | grep -E \"(^EDITOR|^VISUAL)\"\n&nbsp;\nSQL&gt;\n<\/code><\/pre>\n<p>but the _EDITOR in sqlplus is set to &#8216;vi&#8217;:<\/p>\n<pre><code>\nSQL&gt; define\nDEFINE _DATE           = \"11-NOV-16\" (CHAR)\nDEFINE _CONNECT_IDENTIFIER = \"CDB1\" (CHAR)\nDEFINE _USER           = \"SYS\" (CHAR)\nDEFINE _PRIVILEGE      = \"AS SYSDBA\" (CHAR)\nDEFINE _SQLPLUS_RELEASE = \"1202000100\" (CHAR)\nDEFINE _EDITOR         = \"vi\" (CHAR)\nDEFINE _O_VERSION      = \"Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production\" (CHAR)\nDEFINE _O_RELEASE      = \"1202000100\" (CHAR)\nDEFINE 1               = \"sqlplus\" (CHAR)\nDEFINE _RC             = \"1\" (CHAR)\n<\/code><\/pre>\n<p>Here is the default. For sure, vi is better than &#8216;ed&#8217;. &#8216;ed&#8217; was the line editor from the era of 2400 baud network.<\/p>\n<h3>Command history<\/h3>\n<p>Yes. In 2016 SQL*Plus has a command line history. Do you need it? Probably not. If you are on Windows, you can navigate with arrow-up and arrow-down in any command line program. If you are on Linux, you have probably installed rlwrap. And finally, if you want to do something friendly on command line, you probably use sqlcl.<\/p>\n<p>However, in 12cR2 a very basic history has been introduced to SQL*Plus.<br \/>\nYou have to enable it:<\/p>\n<pre><code>\nSQL&gt; show HISTORY\nhistory is OFF\nSQL&gt; set HISTORY on\nSQL&gt; show history\nhistory is ON and set to \"100\"\n<\/code><\/pre>\n<p>so the default is 100 lines, but you can increase it:<\/p>\n<pre><code>\nSQL&gt; set HISTORY 999999\nSP2-0267: history option 999999 out of range (0 through 100000)\nSQL&gt; set HISTORY 100000\n<\/code><\/pre>\n<p>what can you do with it?<\/p>\n<pre><code>\nSQL&gt; help HISTORY\n&nbsp;\n HISTORY\n -------\n&nbsp;\n Stores, lists, executes, edits of the commands\n entered during the current SQL*Plus session.\n&nbsp;\n HIST[ORY] [N {RUN | EDIT | DEL[ETE]}] | [CLEAR]\n&nbsp;\n N is the entry number listed in the history list.\n Use this number to recall, edit or delete the command.\n&nbsp;\n Example:\n HIST 3 RUN - will run the 3rd entry from the list.\n&nbsp;\n HIST[ORY] without any option will list all entries in the list.\n<\/code><\/pre>\n<p>Here are some examples:<\/p>\n<pre><code>\nSQL&gt; show history\nhistory is OFF\nSQL&gt; set history on\nSQL&gt; show history\nhistory is ON and set to \"100\"\nSQL&gt; prompt 1\n1\nSQL&gt; prompt 2\n2\nSQL&gt; history\n  1  show history\n  2  prompt 1\n  3  prompt 2\n&nbsp;\nSQL&gt; history list\n  1  show history\n  2  prompt 1\n  3  prompt 2\n&nbsp;\nSQL&gt; history 2 run\n1\nSQL&gt; history 2 edit\n&nbsp;\nSQL&gt; history 2 delete\nSQL&gt; history\n  1  show history\n  2  prompt 2\n  3  prompt 1\n&nbsp;\nSQL&gt; history clear\nSQL&gt; history\nSP2-1651: History list is empty.\n<\/code><\/pre>\n<p>As you see, it&#8217;s not the most user friendly. But for the basic DBA task that you do on a server you may find it safer than up-arrow. Imagine that a &#8216;shutdown immediate&#8217; is in the history. Do you want to take the risk to run it because of some network latency and you run the line above the one you wanted? Or do you prefer to be sure tho have read the command befor<\/p>\n<h3>SET LOBPREF[ETCH], SET ROWPREF[ETCH], and SET STATEMENTC[ACHE].<\/h3>\n<p>Here are important performance improvements:<\/p>\n<pre><code>\nSQL&gt; show lobprefetch\nlobprefetch 0\nSQL&gt; show rowprefetch\nrowprefetch 1\nSQL&gt; show statementcache\nstatementcache is 0\n<\/code><\/pre>\n<p>Those are things that you can to on OCI or JDBC and that you can easily do now in SQL*Plus: prefetch rows and LOBs to avoid fetch roundtrips and use statement caching to avoid parse calls.<\/p>\n<p>I&#8217;ll probably blog about prefetch in a future blog, so for the moment, here is a quick demo of statement caching.<\/p>\n<p>By default, statement caching is off. I run 3 times the same query:<\/p>\n<pre><code>\nselect current_timestamp,name,value from v$mystat join v$statname using(statistic#) where name like 'parse %' or name like '%cursor cache%';\n&nbsp;\nCURRENT_TIMESTAMP                   NAME                                     VALUE\n----------------------------------- ----------------------------------- ----------\n11-NOV-16 05.00.41.370333 PM +00:00 session cursor cache hits                   15\n11-NOV-16 05.00.41.370333 PM +00:00 session cursor cache count                   4\n11-NOV-16 05.00.41.370333 PM +00:00 parse time cpu                               0\n11-NOV-16 05.00.41.370333 PM +00:00 parse time elapsed                           0\n11-NOV-16 05.00.41.370333 PM +00:00 parse count (total)                          6\n11-NOV-16 05.00.41.370333 PM +00:00 parse count (hard)                           0\n11-NOV-16 05.00.41.370333 PM +00:00 parse count (failures)                       0\n11-NOV-16 05.00.41.370333 PM +00:00 parse count (describe)                       0\n&nbsp;\n8 rows selected.\n&nbsp;\nSQL&gt; select current_timestamp,name,value from v$mystat join v$statname using(statistic#) where name like 'parse %' or name like '%cursor cache%';\n&nbsp;\nCURRENT_TIMESTAMP                   NAME                                     VALUE\n----------------------------------- ----------------------------------- ----------\n11-NOV-16 05.00.41.373429 PM +00:00 session cursor cache hits                   22\n11-NOV-16 05.00.41.373429 PM +00:00 session cursor cache count                   4\n11-NOV-16 05.00.41.373429 PM +00:00 parse time cpu                               0\n11-NOV-16 05.00.41.373429 PM +00:00 parse time elapsed                           0\n11-NOV-16 05.00.41.373429 PM +00:00 parse count (total)                          7\n11-NOV-16 05.00.41.373429 PM +00:00 parse count (hard)                           0\n11-NOV-16 05.00.41.373429 PM +00:00 parse count (failures)                       0\n11-NOV-16 05.00.41.373429 PM +00:00 parse count (describe)                       0\n&nbsp;\n8 rows selected.\n&nbsp;\nSQL&gt; select current_timestamp,name,value from v$mystat join v$statname using(statistic#) where name like 'parse %' or name like '%cursor cache%';\n&nbsp;\nCURRENT_TIMESTAMP                   NAME                                     VALUE\n----------------------------------- ----------------------------------- ----------\n11-NOV-16 05.00.41.375993 PM +00:00 session cursor cache hits                   29\n11-NOV-16 05.00.41.375993 PM +00:00 session cursor cache count                   4\n11-NOV-16 05.00.41.375993 PM +00:00 parse time cpu                               0\n11-NOV-16 05.00.41.375993 PM +00:00 parse time elapsed                           0\n11-NOV-16 05.00.41.375993 PM +00:00 parse count (total)                          8\n11-NOV-16 05.00.41.375993 PM +00:00 parse count (hard)                           0\n11-NOV-16 05.00.41.375993 PM +00:00 parse count (failures)                       0\n11-NOV-16 05.00.41.375993 PM +00:00 parse count (describe)                       0\n&nbsp;\n8 rows selected.\n<\/code><\/pre>\n<p>You can see that each one had its parse call. Of course, it&#8217;s not a hard parse because cursor is shared. It&#8217;s not even a soft parse thanks to session cursor cache. But it&#8217;s still a parse call.<\/p>\n<p>Let&#8217;s set statement caching to one and run the query again 3 times:<\/p>\n<pre><code>\nset statementcache 1\n&nbsp;\nSQL&gt; select current_timestamp,name,value from v$mystat join v$statname using(statistic#) where name like 'parse %' or name like '%cursor cache%';\n&nbsp;\nCURRENT_TIMESTAMP                   NAME                                     VALUE\n----------------------------------- ----------------------------------- ----------\n11-NOV-16 05.00.41.378937 PM +00:00 session cursor cache hits                   36\n11-NOV-16 05.00.41.378937 PM +00:00 session cursor cache count                   4\n11-NOV-16 05.00.41.378937 PM +00:00 parse time cpu                               0\n11-NOV-16 05.00.41.378937 PM +00:00 parse time elapsed                           0\n11-NOV-16 05.00.41.378937 PM +00:00 parse count (total)                          9\n11-NOV-16 05.00.41.378937 PM +00:00 parse count (hard)                           0\n11-NOV-16 05.00.41.378937 PM +00:00 parse count (failures)                       0\n11-NOV-16 05.00.41.378937 PM +00:00 parse count (describe)                       0\n&nbsp;\n8 rows selected.\n&nbsp;\nSQL&gt; select current_timestamp,name,value from v$mystat join v$statname using(statistic#) where name like 'parse %' or name like '%cursor cache%';\n&nbsp;\nCURRENT_TIMESTAMP                   NAME                                     VALUE\n----------------------------------- ----------------------------------- ----------\n11-NOV-16 05.00.41.381403 PM +00:00 session cursor cache hits                   42\n11-NOV-16 05.00.41.381403 PM +00:00 session cursor cache count                   4\n11-NOV-16 05.00.41.381403 PM +00:00 parse time cpu                               0\n11-NOV-16 05.00.41.381403 PM +00:00 parse time elapsed                           0\n11-NOV-16 05.00.41.381403 PM +00:00 parse count (total)                          9\n11-NOV-16 05.00.41.381403 PM +00:00 parse count (hard)                           0\n11-NOV-16 05.00.41.381403 PM +00:00 parse count (failures)                       0\n11-NOV-16 05.00.41.381403 PM +00:00 parse count (describe)                       0\n&nbsp;\n8 rows selected.\n&nbsp;\nSQL&gt; select current_timestamp,name,value from v$mystat join v$statname using(statistic#) where name like 'parse %' or name like '%cursor cache%';\n&nbsp;\nCURRENT_TIMESTAMP                   NAME                                     VALUE\n----------------------------------- ----------------------------------- ----------\n11-NOV-16 05.00.41.383844 PM +00:00 session cursor cache hits                   48\n11-NOV-16 05.00.41.383844 PM +00:00 session cursor cache count                   4\n11-NOV-16 05.00.41.383844 PM +00:00 parse time cpu                               0\n11-NOV-16 05.00.41.383844 PM +00:00 parse time elapsed                           0\n11-NOV-16 05.00.41.383844 PM +00:00 parse count (total)                          9\n11-NOV-16 05.00.41.383844 PM +00:00 parse count (hard)                           0\n11-NOV-16 05.00.41.383844 PM +00:00 parse count (failures)                       0\n11-NOV-16 05.00.41.383844 PM +00:00 parse count (describe)                       0\n&nbsp;\n8 rows selected.\n<\/code><\/pre>\n<p>One more parse call only. The cursor was cached at client side.<\/p>\n<p>How many statements can you cache?<\/p>\n<pre><code>\nSQL&gt; set statementcache 999999\nSP2-0267: statementcache option 999999 out of range (0 through 32767)\n<\/code><\/pre>\n<p>from 1 to 32767. The value 0 disable statement caching.<\/p>\n<pre><code>\nset statementcache 32767\n<\/code><\/pre>\n<h3>Not yet in 12.2 ?<\/h3>\n<p>If you did not upgrade yet to 12.2 you have a way to use statement caching. You can set it in oraaccess.xml which can enable those optimizations for all OCI clients.<\/p>\n<h3>sqlplus -F<\/h3>\n<p>Those performance settings can be set to default values with the &#8216;-F&#8217; argument.<br \/>\nLet set which settings are different:<\/p>\n<pre><code>\n[oracle@OPC122 ~]$ sqlplus -s    \/ as sysdba &lt;&lt;&lt; &quot;store set a.txt replace&quot;\nWrote file a.txt\n[oracle@OPC122 ~]$ sqlplus -s -F \/ as sysdba &lt;&lt;&lt; &quot;store set b.txt replace&quot;\nWrote file b.txt\n[oracle@OPC122 ~]$ diff a.txt b.txt\n3c3\n set arraysize 100\n31c31\n set lobprefetch 16384\n46c46\n set rowprefetch 2\n59c59\n set statementcache 20\n<\/code><\/pre>\n<p>Those settings avoid roundtrips and unnecessary work. <a href=\"http:\/\/docs.oracle.com\/database\/122\/SQPUG\/release-changes.htm#SQPUG648\" target=\"_blank\" rel=\"noopener noreferrer\">Documentation<\/a> says that PAGESIZE set to higher value but I don&#8217;t see it here and anyway, it&#8217;s about formatting output and not about performance.<\/p>\n<h3>VARIABLE<\/h3>\n<p>You may use SQL*Plus to test queries with bind variables. Here is what you do before 12.2:<\/p>\n<pre><code>\nSQL&gt; variable text char\nSQL&gt; exec :text:='X'\n&nbsp;\nPL\/SQL procedure successfully completed.\n&nbsp;\nSQL&gt; select * from DUAL where DUMMY=:text;\n&nbsp;\nD\n-\nX\n<\/code><\/pre>\n<p>You can now simply:<\/p>\n<pre><code>\nSQL&gt; variable text char='X'\nSQL&gt; select * from DUAL where DUMMY=:text;\n&nbsp;\nD\n-\nX\n<\/code><\/pre>\n<h3>SQLcl the SQLDeveloper command line<\/h3>\n<p>Since 11g SQLDeveloper is shipped in ORACLE_HOME and in 12.2 it includes SQLcl, the SQLDeveloper command line that is fully compatible with SQL*Plus scripts.<br \/>\nThe version we have on the DBCS lacks the executable flag and the right JAVA_HOME:<\/p>\n<pre><code>\n[oracle@SE222 ~]$ \/u01\/app\/oracle\/product\/12.2.0\/dbhome_1\/sqldeveloper\/sqlcl\/bin\/sql \/ as sysdba\n-bash: \/u01\/app\/oracle\/product\/12.2.0\/dbhome_1\/sqldeveloper\/sqlcl\/bin\/sql: Permission denied\n[oracle@SE222 ~]$\n[oracle@SE222 ~]$ bash \/u01\/app\/oracle\/product\/12.2.0\/dbhome_1\/sqldeveloper\/sqlcl\/bin\/sql \/ as sysdba\n&nbsp;\nSQLcl: Release 12.2.0.1.0 RC on Fri Nov 11 21:16:48 2016\n&nbsp;\nCopyright (c) 1982, 2016, Oracle.  All rights reserved.\n&nbsp;\n  USER          =\n  URL           = jdbc:oracle:oci8:@\n  Error Message = No suitable driver found for jdbc:oracle:oci8:@\n  USER          =\n  URL           = jdbc:oracle:thin:@127.0.0.1:1521:CDB2\n  Error Message = No suitable driver found for jdbc:oracle:thin:@127.0.0.1:1521:CDB2\n  USER          =\n  URL           = jdbc:oracle:thin:@localhost:1521\/orcl\n  Error Message = No suitable driver found for jdbc:oracle:thin:@localhost:1521\/orcl\nUsername? (RETRYING) ('\/ as sysdba'?)\n<\/code><\/pre>\n<p>I&#8217;ve defined the following alias:<\/p>\n<pre><code>\nalias sql='JAVA_HOME=$ORACLE_HOME\/jdk bash $ORACLE_HOME\/sqldeveloper\/sqlcl\/bin\/sql'\n<\/code><\/pre>\n<p>and I&#8217;m ready to run it:<\/p>\n<pre><code>\n[oracle@SE222 ~]$ sql \/ as sysdba\n&nbsp;\nSQLcl: Release 12.2.0.1.0 RC on Fri Nov 11 21:20:15 2016\n&nbsp;\nCopyright (c) 1982, 2016, Oracle.  All rights reserved.\n&nbsp;\nConnected to:\nOracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production\n&nbsp;\nSQL&gt;\n<\/code><\/pre>\n<p>I like SQLcl except one thing &#8211; it&#8217;s in java and is long to start:<\/p>\n<pre><code>\n[oracle@SE222 ~]$ time sql \/nolog \nreal    0m2.184s\nuser    0m3.054s\nsys     0m0.149s\n<\/code><\/pre>\n<p>2 seconds is long when you run it frequently. Compare with sqlplus:<\/p>\n<pre><code>\n[oracle@SE222 ~]$ time sqlplus \/nolog \nreal    0m0.015s\nuser    0m0.008s\nsys     0m0.006s\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . 12cR2 is there. What&#8217;s new in SQL*Plus? For sure, you can&#8217;t expect lot of things from it. The new command line is the SQL*Developer sqlcl which aims to be 100% compatible with SQL*Plus with lot of more features. However, a few little things came here: default editor, command line history and [&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":[229],"tags":[656,984,209,985],"type_dbi":[],"class_list":["post-9295","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-12-2","tag-1z0-074","tag-oracle-12c","tag-sqlplus"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>12cR2 has new SQL*Plus features - 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\/12cr2-has-new-sqlplus-features\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"12cR2 has new SQL*Plus features\" \/>\n<meta property=\"og:description\" content=\"By Franck Pachot . 12cR2 is there. What&#8217;s new in SQL*Plus? For sure, you can&#8217;t expect lot of things from it. The new command line is the SQL*Developer sqlcl which aims to be 100% compatible with SQL*Plus with lot of more features. However, a few little things came here: default editor, command line history and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-11-11T20:30:37+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=\"9 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\/12cr2-has-new-sqlplus-features\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"12cR2 has new SQL*Plus features\",\"datePublished\":\"2016-11-11T20:30:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/\"},\"wordCount\":697,\"commentCount\":0,\"keywords\":[\"12.2\",\"1z0-074\",\"Oracle 12c\",\"sqlplus\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/\",\"name\":\"12cR2 has new SQL*Plus features - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2016-11-11T20:30:37+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"12cR2 has new SQL*Plus features\"}]},{\"@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":"12cR2 has new SQL*Plus features - 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\/12cr2-has-new-sqlplus-features\/","og_locale":"en_US","og_type":"article","og_title":"12cR2 has new SQL*Plus features","og_description":"By Franck Pachot . 12cR2 is there. What&#8217;s new in SQL*Plus? For sure, you can&#8217;t expect lot of things from it. The new command line is the SQL*Developer sqlcl which aims to be 100% compatible with SQL*Plus with lot of more features. However, a few little things came here: default editor, command line history and [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/","og_site_name":"dbi Blog","article_published_time":"2016-11-11T20:30:37+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"12cR2 has new SQL*Plus features","datePublished":"2016-11-11T20:30:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/"},"wordCount":697,"commentCount":0,"keywords":["12.2","1z0-074","Oracle 12c","sqlplus"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/","url":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/","name":"12cR2 has new SQL*Plus features - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2016-11-11T20:30:37+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-has-new-sqlplus-features\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"12cR2 has new SQL*Plus features"}]},{"@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\/9295","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=9295"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9295\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=9295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=9295"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=9295"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=9295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}