ODTUG Aggregator ODTUG Blogs http://localhost:8080 Tue, 25 Apr 2017 16:17:12 +0000 http://aggrssgator.com/ Validating JSON in the database https://ruepprich.wordpress.com/2017/04/24/validating-json-in-the-database/ <p>Creating REST services and consuming JSON inside the Oracle database has become quite easy. The APEX_JSON package provides a number of useful procedures and functions to work with JSON. However, one thing I haven&#8217;t found is a way to validate JSON before parsing it.</p> <p>To my knowledge the is not yet a PL/SQL way to check whether a JSON string is valid, i.e. to make sure that all the brackets, commas, colons, etc. are there. There is however, a column check constraint you can use in 12c that will only allow valid JSON to be inserted into a table. So here is a quick workaround for validating JSON using the check constraint: I simply take the JSON and attempt to insert it into the table. If the check constraint is violated, I&#8217;ll get an error.</p> <p>I wrapped to whole thing in a function that will then simply return a boolean value for the JSON passed into it.</p> <pre class="brush: sql; title: ; notranslate"> create table json_validator ( id number generated always as identity primary key ,json clob ,constraint validate_json check (json is json format json) ); create or replace function validate_json (l_json in clob) return boolean is l_id pls_integer; e_invalid_json exception; pragma exception_init (e_invalid_json,-2290); pragma autonomous_transaction; begin insert into json_validator (json) values (l_json); rollback; return true; exception when e_invalid_json then return false; end; / set serveroutput on declare l_json clob; l_return boolean; begin l_json := ' {&quot;widget&quot;: { &quot;debug&quot;: &quot;on&quot;, &quot;window&quot;: { &quot;title&quot;: &quot;sample konfabulator widget&quot;, &quot;name&quot;: &quot;main_window&quot;, &quot;width&quot;: 500, &quot;height&quot;: 500 }, &quot;image&quot;: { &quot;src&quot;: &quot;images/sun.png&quot;, &quot;name&quot;: &quot;sun1&quot;, &quot;hoffset&quot;: 250, &quot;voffset&quot;: 250, &quot;alignment&quot;: &quot;center&quot; }, &quot;text&quot;: { &quot;data&quot;: &quot;click here&quot;, &quot;size&quot;: 36, &quot;style&quot;: &quot;bold&quot;, &quot;name&quot;: &quot;text1&quot;, &quot;hoffset&quot;: 250, &quot;voffset&quot;: 100, &quot;alignment&quot;: &quot;center&quot;, &quot;onmouseup&quot;: &quot;sun1.opacity = (sun1.opacity / 100) * 90;&quot; } }} '; l_return := validate_json(l_json =&gt; l_json ); if l_return then dbms_output.put_line('JSON is valid'); else dbms_output.put_line('JSON is NOT valid'); end if; end; / </pre><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2318/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2318/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2318&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2318 Mon Apr 24 2017 19:04:06 GMT-0400 (EDT) Data Visualization and Advanced Analytics Kscope17 Track Highlights – Kevin McGinley http://www.odtug.com/p/bl/et/blogaid=713&source=1 Here is an overview of Kscope17 sessions Kevin McGinley is most looking forward to and his thoughts on why you should attend them, too: ODTUG http://www.odtug.com/p/bl/et/blogaid=713&source=1 Mon Apr 24 2017 08:08:06 GMT-0400 (EDT) Warn Before Closing APEX Modal Dialogs http://rimblas.com/blog/2017/04/warn-before-closing-apex-modal-dialogs/ <p>As you may already know, APEX 5.1 implements native Warn Before Exit functionality. Basically, if the user makes changes on a page and tries to navigate away before they save their changes, they get a warning. Modal Pages also get this feature, with one caveat; the close &#8220;X&#8221; on the window does not warn.<br /> As I understand, this is was the intended behavior. However, for some use cases, I disagree. For this reason, and after a client&#8217;s request, I came up with this solution.<br /> On the Modal Page attributes, we specify a &#8220;beforeClose&#8221; function. Like so:</p> <p></p><pre class="crayon-plain-tag">beforeClose: warnOnClose</pre><p></p> <p><a href="http://rimblas.com/blog/wp-content/uploads/2017/04/beforeclose.png"><img src="http://rimblas.com/blog/wp-content/uploads/2017/04/beforeclose-300x202.png" alt="" width="300" height="202" class="aligncenter size-medium wp-image-885 colorbox-883" srcset="http://rimblas.com/blog/wp-content/uploads/2017/04/beforeclose-300x202.png 300w, http://rimblas.com/blog/wp-content/uploads/2017/04/beforeclose-100x67.png 100w, http://rimblas.com/blog/wp-content/uploads/2017/04/beforeclose-150x101.png 150w, http://rimblas.com/blog/wp-content/uploads/2017/04/beforeclose-200x135.png 200w, http://rimblas.com/blog/wp-content/uploads/2017/04/beforeclose.png 400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Then, on the calling page (or globally) you want the following code:</p> <p></p><pre class="crayon-plain-tag">function warnOnClose(event, ui){ var apexiFrame = $(&quot;iframe&quot;).get(0).contentWindow.apex; var hasChange = apexiFrame.page.isChanged(); if (hasChange) { // var lMessage = apex.lang.getMessage( &quot;APEX.WARN_ON_UNSAVED_CHANGES&quot; ); var lMessage = &quot;There are unsaved changes. Do you want to continue?&quot;; var ok = confirm(lMessage); if ( !ok ) { event.preventDefault(); } } return hasChange; }</pre><p></p> <p>Line 2 and 3 are the most important to this whole solution. Modal Dialogs run inside an iframe. As such, the calling page needs to take a peek inside the dialog and see if something was changed.<br /> Line 2 gets a hold of the &#8220;apex&#8221; namespace for the dialog. Line 3 can then check is anything has changed within it.</p> <p>Finally, line 10, prevents the close even from happening and maintains the dialog opened if they user opts to stay.</p> <p>I should mention, I tried to use <code>apex.message.confirm</code> instead of the more rudimentary <code>confirm</code>, however because we&#8217;re already inside a modal, calling <code>apex.message.confirm</code> would invariably end up closing the modal I wanted to keep open. Perhaps, there&#8217;s a way to accomplish this, if you have any ideas, please share in the comments.</p> Jorge Rimblas http://rimblas.com/blog/?p=883 Mon Apr 24 2017 07:12:35 GMT-0400 (EDT) Developing a training course or university curriculum for Oracle Application Express (APEX)? Start here! http://joelkallman.blogspot.com/2017/04/developing-training-course-or.html While education in <a href="https://apex.oracle.com/" target="_blank">Oracle Application Express (APEX)</a> is offered as a part of many university and secondary school courses around the globe, in most cases, the educators took it upon themselves to develop their own custom curriculum. &nbsp;To lessen the burden on educators, we have developed and made available for public download a full course curriculum for Oracle Application Express.<br /><br />This courseware, developed by our product manager <a href="https://twitter.com/chaitanya_in" target="_blank">Chaitanya Koratamaddi</a> over the past year, includes 16 distinct lessons, complete with PowerPoint presentations, hands-on-labs, and all necessary SQL scripts and application export files. &nbsp;You can use all or a portion of these materials in your own curriculum.<br /><br />This same courseware was provided to the Oracle Academy team, who now also <a href="https://academy.oracle.com/en/solutions-curriculum-full.html#apexdevfound" target="_blank">offer an Oracle Application Express course</a>. &nbsp;The Oracle Academy course is offered in a hosted interactive form, complete with quizzes, and it also includes both educator and student curriculum. &nbsp;There are many other <a href="https://academy.oracle.com/en/membership-benefits.html" target="_blank">benefits</a> to joining Oracle Academy. &nbsp;For more information about Oracle Academy, go <a href="https://academy.oracle.com/" target="_blank">here</a>.<br /><br />To access the publicly available Oracle Application Express curriculum, go to:<br /><a href="https://www.blogger.com/goog_151250301"><br /></a><h2 style="text-align: center;"><a href="https://apex.oracle.com/education">https://apex.oracle.com/education</a></h2><br /><br /> Joel R. Kallman tag:blogger.com,1999:blog-12214002.post-1969743133702281297 Thu Apr 20 2017 14:37:00 GMT-0400 (EDT) Application Express Kscope17 Track Highlights - Jorge Rimblas http://www.odtug.com/p/bl/et/blogaid=710&source=1 Jorge Rimblas, the APEX track lead for ODTUG Kscope17, shares his recommended “don’t miss sessions” at ODTUG Kscope17: ODTUG http://www.odtug.com/p/bl/et/blogaid=710&source=1 Wed Apr 19 2017 15:21:19 GMT-0400 (EDT) XML Parsing failed with LPX-00261: invalid URL http://c2anton.blogspot.com/2017/04/xml-parsing-failed-with-lpx-00261.html <br />As promised in my last post, I'll address the parsing error you get when you attempt to convert the text returned by the NCBI efetch utilities into an XMLType. The Oracle XML parser within the database treats the XML comment "&lt;!DOCTYPE TaxaSet PUBLIC "-//NLM//DTD Taxon, 14th January 2002//EN" "https://www.ncbi.nlm.nih.gov/entrez/query/DTD/taxon.dtd"&gt;" as an indicator to validate the XML against the DTD located at "https://www.ncbi.nlm.nih.gov/entrez/query/DTD/taxon.dtd". In many, maybe even most, cases this is fine. If you are generating an XML payload you may want to validate it before sending it out to avoid the embarrassment of sending an invalid message. If you are retrieving it from the source, though, odds are good it will be valid and validating it against the DTD may just be extra overhead. It's also possible that the XML parser doesn't understand the DTD. At least one version of the database has a bug related to exactly how that comment is formatted. In my case there are at least two issues related to validating against the DTD, and I have no need for it. Below is the query and the associated error.<br /><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">select xmltype(</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">'&lt;?xml version="1.0" ?&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&lt;!DOCTYPE TaxaSet PUBLIC "-//NLM//DTD Taxon, 14th January 2002//EN" "https://www.ncbi.nlm.nih.gov/entrez/query/DTD/taxon.dtd"&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&lt;TaxaSet&gt;&lt;Taxon&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;TaxId&gt;33208&lt;/TaxId&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;ScientificName&gt;Metazoa&lt;/ScientificName&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;OtherNames&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;GenbankCommonName&gt;metazoans&lt;/GenbankCommonName&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;BlastName&gt;animals; animals&lt;/BlastName&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;Synonym&gt;Animalia&lt;/Synonym&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;CommonName&gt;multicellular animals&lt;/CommonName&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;/OtherNames&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;ParentTaxId&gt;33154&lt;/ParentTaxId&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;Rank&gt;kingdom&lt;/Rank&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;Division&gt;Invertebrates&lt;/Division&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;GeneticCode&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;GCId&gt;1&lt;/GCId&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;GCName&gt;Standard&lt;/GCName&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;/GeneticCode&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;MitoGeneticCode&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;MGCId&gt;1&lt;/MGCId&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;MGCName&gt;Standard&lt;/MGCName&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;/MitoGeneticCode&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;Lineage&gt;cellular organisms; Eukaryota; Opisthokonta&lt;/Lineage&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;LineageEx&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;Taxon&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TaxId&gt;131567&lt;/TaxId&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ScientificName&gt;cellular organisms&lt;/ScientificName&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Rank&gt;no rank&lt;/Rank&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Taxon&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;Taxon&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TaxId&gt;2759&lt;/TaxId&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ScientificName&gt;Eukaryota&lt;/ScientificName&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Rank&gt;superkingdom&lt;/Rank&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Taxon&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;Taxon&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TaxId&gt;33154&lt;/TaxId&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ScientificName&gt;Opisthokonta&lt;/ScientificName&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Rank&gt;no rank&lt;/Rank&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Taxon&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;/LineageEx&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;CreateDate&gt;1995/02/27 09:24:00&lt;/CreateDate&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;UpdateDate&gt;2017/02/16 16:52:33&lt;/UpdateDate&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; &nbsp; &lt;PubDate&gt;1992/05/26 01:00:00&lt;/PubDate&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&lt;/Taxon&gt;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&lt;/TaxaSet&gt;') the_xml</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">&nbsp; from dual;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ORA-31011: XML parsing failed&nbsp;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ORA-19213: error occurred in XML processing at lines 2&nbsp;</span><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">LPX-00261: invalid URL https://www.ncbi.nlm.nih.gov/entrez/query/DTD/taxon.dtd</span><br /><br />Fortunately, you can instruct the database to NOT validate.<br /><br /><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">alter session set events='31156 trace name context forever, level 2'</span><br /><br />will instruct the database to skip the validation. You can then use xmlTable, xmlQuery, etc. without receiving an error.<br /><br />Note: you may need to "grant alter session" to the user in order for this to work, particularly if using an execute immediate within a package to do the alter session command.<br /><br /><br /><br /><div><br /></div> Anton Nielsen tag:blogger.com,1999:blog-24686153.post-744726885464020946 Tue Apr 18 2017 18:55:00 GMT-0400 (EDT) Set SQL format http://reynde.blogspot.com/2017/04/set-sql-format.html <h2>set sqlformat</h2>This is a quick note for something I have to lookup time and again.<br /><br />And it's such a great feature, that every developer should know ... the <span style="color: blue;">set sqlformat</span> statement!<br /><br />With <span style="font-family: Courier New, Courier, monospace;">set sqlformat</span> statement you can actually influence the result of your query. Or at least the <i>format</i>&nbsp;of that result.<br />E.g. you can make the output look like a <span style="font-family: Courier New, Courier, monospace;">CSV</span> file. Or even better like a <span style="font-family: Courier New, Courier, monospace;">JSON</span> file.<br />But also ... like an <span style="font-family: Courier New, Courier, monospace;">insert statement</span>. So easy to quickly copy a line in a table. Of course, you have to take care of the unique constraints yourself. But hey, if you quickly want to create (duplicate) some data. This is a very nice way of doing it!<br /><br /><h3>Query</h3>select *<br />&nbsp; from emp<br />&nbsp;where empno = 7839<br />&nbsp;;<br /><br /><h3>Normal result</h3>&nbsp; &nbsp; &nbsp;EMPNO ENAME &nbsp; &nbsp; &nbsp;JOB &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MGR HIREDATE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SAL &nbsp; &nbsp; &nbsp; COMM<br />---------- ---------- --------- ---------- ---------- ---------- ----------<br />&nbsp; &nbsp; DEPTNO<br />----------<br />&nbsp; &nbsp; &nbsp; 7839 KING &nbsp; &nbsp; &nbsp; PRESIDENT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;17/11/1981 &nbsp; &nbsp; &nbsp; 5000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; 10<br /><br /><h3>Example 1</h3><span style="font-family: Courier New, Courier, monospace;">set sqlformat csv</span><br /><br /><h3>Result 1</h3>"EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO"<br />7839,"KING","PRESIDENT",,17/11/1981,5000,,10<br /><br /><h3>Example 2</h3><span style="font-family: Courier New, Courier, monospace;">set sqlformat json</span><br /><br /><h3>Result 2</h3>{"items":[<br />{"empno":7839,"ename":"KING","job":"PRESIDENT","hiredate":"17/11/1981","sal":5000,"deptno":10}]}<br /><br /><h3>Example 3</h3><span style="font-family: Courier New, Courier, monospace;">set sqlformat insert</span><br /><br /><h3>Result 3</h3>REM INSERTING into emp<br />SET DEFINE OFF;<br />Insert into "emp" (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values ('7839','KING','PRESIDENT',null,to_date('17/11/1981','DD/MM/YYYY'),'5000',null,'10');<br /><div><br /></div><h3>Available formats (as far as I know now)</h3><div><ul style="background-color: white; box-sizing: border-box; color: #595959; font-family: Lato, sans-serif; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 0px 0px 1.313em 1.655em; padding: 0px;"><li style="box-sizing: border-box; line-height: 1.7;">csv</li><li style="box-sizing: border-box; line-height: 1.7;">html</li><li style="box-sizing: border-box; line-height: 1.7;">xml</li><li style="box-sizing: border-box; line-height: 1.7;">json</li><li style="box-sizing: border-box; line-height: 1.7;">insert – INSERT statements</li><li style="box-sizing: border-box; line-height: 1.7;">loader – sql*loader</li><li style="box-sizing: border-box; line-height: 1.7;">fixed</li><li style="box-sizing: border-box; line-height: 1.7;">default –&nbsp;obviously this clears the format and sets it back to the "normal" format (see "Normal result")</li></ul><div><span style="color: #595959; font-family: Lato, sans-serif;"><br /></span></div></div><div><span style="color: #595959; font-family: Lato, sans-serif;">Happy to share</span></div> Roeland Van den Eynde tag:blogger.com,1999:blog-3391696929738939906.post-2676684915619295276 Tue Apr 18 2017 09:40:00 GMT-0400 (EDT) Oracle Apex Plug-in for restricting shuttle choices http://warp11.nl/2017/04/oracle-apex-plug-in-for-restricting-shuttle-choices/ <div> <div class="post-body entry-content" id="post-body-4488998096571965027"> The Oracle Apex shuttle item is a neat way to select a number of values. It is however not so user friendly when the list of choices is very long. In this case it is useful to be able to limit the list of choices.<br /> When you implement the limitation in the LOV-query of the item, the limitation will also be applied to the selected values. Usually this is not the desired behavior.<br /> This behavior is avoided when the restricting of the left shuttle pane using JavaScript. I have created a Dynamic Action plug-in to do this. The choices in the left shuttle pane are evaluated case insensitive against the content of the search item. If the search item contains more than one string ( separated by spaces) all the strings should occur in the shuttle value. The search string &#8216;INVOICE 2013&#8217; returns only values that contain &#8216;INVOICE&#8217; (independent of case) and &#8216;2013&#8217;.</p> <div class="separator"> <a href="https://3.bp.blogspot.com/-aWil8OLeu9M/WPMyS7KH92I/AAAAAAAAAfU/f02bgh7geBoJNRYZTiGCgN11GMkegvQDQCLcB/s1600/restrict_shuttle_values_example.gif"><img border="0" height="180" src="http://warp11.nl/wp-content/uploads/2017/04/restrict_shuttle_values_example.gif" width="320" /></a></div> <p> The plugin attributes are the shuttle item and the select item. The plugin needs to know the select item to disable submit when enter is pressed.</p> <p> You can see the plug-in in action on:</p> <p> http://www.speech2form.com/ords/f?p=OPFG:RESTRICT_SHUTTLE</p> <p> As usually you can find the plugin on <a href="http://apex.world/" target="_blank">apex.world</a></p> <p> Happy apexing </p> </div> </div> <p>Source Article from <a href="http://dickdral.blogspot.com/2017/04/oracle-apex-plug-in-for-restricting.html">http://dickdral.blogspot.com/2017/04/oracle-apex-plug-in-for-restricting.html</a></p> Dick Dral http://warp11.nl/2017/04/oracle-apex-plug-in-for-restricting-shuttle-choices/ Tue Apr 18 2017 02:05:26 GMT-0400 (EDT) Oracle Apex Plug-in for restricting shuttle choices http://dickdral.blogspot.com/2017/04/oracle-apex-plug-in-for-restricting.html The Oracle Apex shuttle item is a neat way to select a number of values. It is however not so user friendly when the list of choices is very long. In this case it is useful to be able to limit the list of choices.<br />When you implement the limitation in the LOV-query of the item, the limitation will also be applied to the selected values. Usually this is not the desired behavior.<br />This behavior is avoided when the restricting of the left shuttle pane using JavaScript. I have created a Dynamic Action plug-in to do this. The choices in the left shuttle pane are evaluated case insensitive against the content of the search item. If the search item contains more than one string ( separated by spaces) all the strings should occur in the shuttle value. The search string 'INVOICE 2013' returns only values that contain 'INVOICE' (independent of case) and '2013'.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-aWil8OLeu9M/WPMyS7KH92I/AAAAAAAAAfU/f02bgh7geBoJNRYZTiGCgN11GMkegvQDQCLcB/s1600/restrict_shuttle_values_example.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://3.bp.blogspot.com/-aWil8OLeu9M/WPMyS7KH92I/AAAAAAAAAfU/f02bgh7geBoJNRYZTiGCgN11GMkegvQDQCLcB/s320/restrict_shuttle_values_example.gif" width="320" /></a></div><br /><br />The plugin attributes are the shuttle item and the select item. The plugin needs to know the select item to disable submit when enter is pressed.<br />Furthermore the <b>select all</b>&nbsp;button is disabled once a selection is applied because this button copies everything from left to right irrespective of visibility. Once no selection is applied the button is activated again.<br /><br />You can see the plug-in in action on:<br /><br />http://www.speech2form.com/ords/f?p=OPFG:RESTRICT_SHUTTLE<br /><br />As usually you can find the plugin on&nbsp;<a href="http://apex.world/" target="_blank">apex.world</a><br /><br /><i>Update 22-04-2017: A new version has been released with support for Safari and IE. Also the triggering item is not anymore restricted to the search item.&nbsp;</i><br /><br />Happy apexing Dick Dral tag:blogger.com,1999:blog-4312362131290962824.post-4488998096571965027 Tue Apr 18 2017 02:05:00 GMT-0400 (EDT) Kscope17 Planning Track Highlights – Edina Chmielarski-White http://www.odtug.com/p/bl/et/blogaid=707&source=1 Edina Chmielarski-White has been leading the Planning Track for three years. She is looking forward to all the Planning track presentations, but here are the ones she doesn’t want to miss: ODTUG http://www.odtug.com/p/bl/et/blogaid=707&source=1 Mon Apr 17 2017 09:59:32 GMT-0400 (EDT) The Man in the Middle http://c2anton.blogspot.com/2017/04/the-man-in-middle.html I recently ran into an Oracle database bug (version 12c). It's definitely a bug, and there may even be a patch for it, maybe. We've all been in this position, though. There's definitely a bug. We've identified something similar in the Oracle support site bug database. There's a patch for it. How long will it take to get the patch installed? Can I even install the patch on an Oracle Database Appliance (or Exadata or whatever other special circumstance)? What happens if the patch doesn't fix the specific issue?<br /><br />Here is my scenario. I need to interact with the National Institutes of Health taxonomy database. It has REST based services--check them out:<br /><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=taxonomy&amp;term=Metazoa&amp;usehistory=n</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;"><br /></span><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=taxonomy&amp;id=33208</span><br /><br />So, super easy, I can use apex_web_service.make_rest_request to make the request, parse the response and do some science!<br /><br />Let's see what happens:<br /><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">select&nbsp;</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; apex_web_service.make_rest_request(</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; p_url =&gt; 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=taxonomy&amp;id=33208',</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; p_http_method =&gt; 'GET'</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; ) taxonomy_info</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; from dual</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; ;</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;"><br /></span><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-29273: HTTP request failed</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-28860: Fatal SSL error</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at "SYS.UTL_HTTP", line 368</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at "SYS.UTL_HTTP", line 1118</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at "APEX_050100.WWV_FLOW_WEB_SERVICES", line 636</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at "APEX_050100.WWV_FLOW_WEB_SERVICES", line 760</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at "APEX_050100.WWV_FLOW_WEBSERVICES_API", line 236</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at line 1</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">29273. 00000 - &nbsp;"HTTP request failed"</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">*Cause: &nbsp; &nbsp;The UTL_HTTP package failed to execute the HTTP request.</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">*Action: &nbsp; Use get_detailed_sqlerrm to check the detailed error message.</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Fix the error and retry the HTTP request.</span><br /><br />Now, I know that I've used this same kind of call from this same database before, so I do a little more digging and try this:<br /><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">select&nbsp;</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; apex_web_service.make_rest_request(</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; p_url =&gt; 'https://oracle.com',</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; p_http_method =&gt; 'GET'</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; )</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; from dual</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; ;</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;"><br /></span><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-29273: HTTP request failed</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-29024: Certificate validation failure</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at "SYS.UTL_HTTP", line 1258</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at "APEX_050100.WWV_FLOW_WEB_SERVICES", line 717</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at "APEX_050100.WWV_FLOW_WEB_SERVICES", line 760</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at "APEX_050100.WWV_FLOW_WEBSERVICES_API", line 236</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">ORA-06512: at line 1</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">29273. 00000 - &nbsp;"HTTP request failed"</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">*Cause: &nbsp; &nbsp;The UTL_HTTP package failed to execute the HTTP request.</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">*Action: &nbsp; Use get_detailed_sqlerrm to check the detailed error message.</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Fix the error and retry the HTTP request.</span><br /><br />It's a different error, but still and error! Now I'm getting concerned. I assume it has to do with using https because both errors reference SSL/TLS. I try a variety of http and https sites. Most work fine, but occasionally I get one of the two errors above. I think they are actually two different errors. The second can probably be fixed by adding some certs to the db wallet, but the first, the one I really care about, appears to need a database patch: Patch 24666032. I'm not sure that would fix it, and for a variety of reasons, I can't get the patch installed and tested in a timely fashion.<br /><br />But...the scientists have work to do and I don't want to stand in the way of science. So, I developed a hack. Please don't judge me. Of course, the title of this post has already given it away. It's seems so obvious when you already know the answer, but it took some pondering to come up with it: the man in the middle. While I am the man in the middle, between the scientists and the data, I need another man in the middle to solve the problem. That MITM is an Apache Reverse Proxy.<br /><br />As I mentioned, I know this database can use apex_web_service.make_rest_request, definitely with my own internal development web server. I set up a reverse proxy on our internal apache server to route the request to the NIH REST server.<br /><br /><br /><ol><li>Added an entry to our internal DNS server<br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">[internal IP address] &nbsp; ncbi.concept2completion.com</span></li><li>Created a virtual host entry on our internal Apache web server and restarted<br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&lt;VirtualHost *:443&gt;<br />&nbsp; &nbsp;ServerName ncbi.concept2completion.com<br />&nbsp; <br />&nbsp; &nbsp;ProxyRequests on<br />&nbsp; &nbsp;SSLProxyEngine on<br />&nbsp; &nbsp;ProxyPass / https://eutils.ncbi.nlm.nih.gov/<br />&nbsp; &nbsp;ProxyPassReverse / https://eutils.ncbi.nlm.nih.gov/<br />&lt;/VirtualHost&gt;</span></li><li>Pointed the apex_web_service.make_rest_request to our internal server.</li></ol><div><br /></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">select&nbsp;</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; apex_web_service.make_rest_request(</span><br /><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp; &nbsp; &nbsp; &nbsp; p_url =&gt; 'https://</span><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">ncbi.concept2completion.com</span><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">/entrez/eutils/efetch.fcgi?db=taxonomy&amp;id=33208',</span></span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; p_http_method =&gt; 'GET'</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; ) taxonomy_info</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; from dual</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; ;</span></div><div><br /></div><div><br /></div><div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&lt;?xml version="1.0" ?&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&lt;!DOCTYPE TaxaSet PUBLIC "-//NLM//DTD Taxon, 14th January 2002//EN" "https://www.ncbi.nlm.nih.gov/entrez/query/DTD/taxon.dtd"&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&lt;TaxaSet&gt;&lt;Taxon&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;TaxId&gt;33208&lt;/TaxId&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;ScientificName&gt;Metazoa&lt;/ScientificName&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;OtherNames&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;GenbankCommonName&gt;metazoans&lt;/GenbankCommonName&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;BlastName&gt;animals; animals&lt;/BlastName&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;Synonym&gt;Animalia&lt;/Synonym&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;CommonName&gt;multicellular animals&lt;/CommonName&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;/OtherNames&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;ParentTaxId&gt;33154&lt;/ParentTaxId&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;Rank&gt;kingdom&lt;/Rank&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;Division&gt;Invertebrates&lt;/Division&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;GeneticCode&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;GCId&gt;1&lt;/GCId&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;GCName&gt;Standard&lt;/GCName&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;/GeneticCode&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;MitoGeneticCode&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;MGCId&gt;1&lt;/MGCId&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;MGCName&gt;Standard&lt;/MGCName&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;/MitoGeneticCode&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;Lineage&gt;cellular organisms; Eukaryota; Opisthokonta&lt;/Lineage&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;LineageEx&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;Taxon&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TaxId&gt;131567&lt;/TaxId&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ScientificName&gt;cellular organisms&lt;/ScientificName&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Rank&gt;no rank&lt;/Rank&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Taxon&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;Taxon&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TaxId&gt;2759&lt;/TaxId&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ScientificName&gt;Eukaryota&lt;/ScientificName&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Rank&gt;superkingdom&lt;/Rank&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Taxon&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;Taxon&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TaxId&gt;33154&lt;/TaxId&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ScientificName&gt;Opisthokonta&lt;/ScientificName&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Rank&gt;no rank&lt;/Rank&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Taxon&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;/LineageEx&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;CreateDate&gt;1995/02/27 09:24:00&lt;/CreateDate&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;UpdateDate&gt;2017/02/16 16:52:33&lt;/UpdateDate&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&nbsp; &nbsp; &lt;PubDate&gt;1992/05/26 01:00:00&lt;/PubDate&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&lt;/Taxon&gt;</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;"><br /></span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">&lt;/TaxaSet&gt;</span></div><div><br /></div></div><div><br /></div><div>A hack? Yes, but done in the name of science.</div><div><br /></div><div>Stay tuned for my next post on how to solve the parsing issue with the XML shown above. Also, we now have a pl/sql API for interacting with the NIH efetch service--it's extensive and provides access to the taxonomy lineage, synonyms, etc. Contact me if you are interested in the API.</div><style type="text/css">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px} span.s1 {font-variant-ligatures: no-common-ligatures} </style> Anton Nielsen tag:blogger.com,1999:blog-24686153.post-6248371431753863609 Sat Apr 15 2017 12:55:00 GMT-0400 (EDT) How to stabilize, improve and tune Oracle EBS Payroll and Retropay process http://jaffardba.blogspot.com/2017/04/how-to-stabilize-improve-and-tune.html <div dir="ltr" style="text-align: left;" trbidi="on">Visited few customers off late to review the performance issues pertaining to their Oracle EBS Payroll and Retro-pay processes. Not sure if many are aware of the tools Oracle has to analyze and improve any Oracle EBS modules, including Payroll and Retro-pay. To get proactive with Oracle EBS, refer the following note:<br /><br /><ul style="text-align: left;"><li><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;">Get Proactive with Oracle E-Business Suite - Product Support Analyzer Index (Doc ID 1545562.1)</span></span></li></ul><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=17626950950012&amp;id=1545562.1&amp;_afrWindowMode=0&amp;_adf.ctrl-state=106z5gbsyl_322"><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;"></span></span></a><span id="goog_266653451"></span><span id="goog_266653452"></span><span style="font-size: small;"></span><br /><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;">I must say, after running through the analyzers (Retro and Payroll), and implementing the suggestions, significant performance is achieved without making any change to the queries. I would strongly recommend to run the analyzers on different modules on Oracle EBS to get proactive and achieve performance improvements and stability. Below is the Payroll analyzer report screen shot, explains the findings and recommendations:</span></span><br /><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;"><br /></span></span><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;"></span></span><br /><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;"><img alt="" height="218" src="data:image/png;base64,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ENTJKH+Zap/9MOpozDCFQqFQKGyFYRhmNQxBEBzHrYbJ5XKSJKn2WIZRR7AVZtZsyzAQAUQAEUAEEAFEABFABBABRAARQAQQAUQAEUAEEAFEABFAhGdThFUqlUqpVOI4rlKp1Go19TdJklqtliAI6l+NRmMWhuO4ZZharWaGaTQaZhjVIDthBEFoNBr7YUql0jKM2WyNRkO1x34Y3WwqDEQAEUAEEAFEABFABBABRAARQAQQAUQAEUAEEAFEABFABBABRKD+XqXVajUaDYqiVJBOp6Oeo9FotFqtSqWi7G0qDMMwW2GUb63VarVaLYZhlAQ6nY4gCAzDmGFU36yGqdVqrVarVquZYbSgOp2OJElmGIqiVJhOpzMLQ1GUCqN7R4Uxm02F0b0DEUAEEAFEABFABBABRAARQAQQAUQAEUAEEAFEABFABBABRAARVpEkqdPpNAaDmXo+SZIKhYJ+DtUHOgzDMGaYWVctw5hd1Wg0VOOoMLOuMoUzC0NRlBlG9YEZptVqmWF0V5m9o8KY4031DkQAEUAEEAFEABFABBABRAARQAQQAUQAEUAEEAFEABFABBABRKB6twrHccojV6vVBEHgOK5Wq6nn4zhOHZokSYIg7IfpdDqVSmU/jBKODtNoNMwwakjMwnActwwjSdJqmGWzcUPatsMwEAFEABFABBABRAARQAQQAUQAEUAEEAFEABFABBABRAARQAQQQaPRrCJJEsMwqtFqtRo1zaBmPp8O01hkUNNhKpXKVhhBEEqlkhlGkiSlr50wyu3WaDRa0wxqZpjaYPlbhln2zizMsncgAogAIoAIIAKIACKACCACiAAigAggAogAIoAIIAKIACKACM+yCKuof6jyFjqdjnqOkpFozcygprpqJ0yn02kMxTuoXbhporVcLqfDMEOitVmYSqWSy+UqlYoOww2p0TiOoyhKh1H52NQuZhhhmmhtq3eEabY5iAAigAggAogAIoAIIAKIACKACCACiAAigAggAogAIoAIIAKIsEplmkGt0+nUajVlMFP+NLWLClOpVLhporVSqVSr1UsNI01znpcXRjfbLIxqNmEtP5zunZNhIAKIACKACCACiAAigAggAogAIoAIIAKIACKACCACiAAigAjPmgircBxXq9U6nY4kSaVSqTJkUNOJzVqtFsdxnJFBTYVpNBq1oX6zxlqiNR2mMbjd1ImYYSqVSqlUkoYMaqVSSYcxtVaZJlo7E6bVas3CHPYORAARQAQQAUQAEUAEEAFEABFABBABRAARQAQQAUQAEUAEEAFEWIXjOJVBrdPp1Gq1XC4nSVKn0+l0OgzDlEol9TdBEAqFYqlhCoWCIAhql1KpxDCM+ps0zaB2MozOx6YUwTBMq9XqdDqVSoUgiMqQQY2iKI7jdBiVaO1MGIgAIoAIIAKIACKACCACiAAigAggAogAIoAIIAKIACKACCACiLBKo9EwzW+VIedZZy2DeuVhGIapDanRlPlNh+GM1Gg6jPbIqV10GHUEKow+AqWv2pAfTocpGVWfH2rvQAQQAUQAEUAEEAFEABFABBABRAARQAQQAUQAEUAEEAFEABGedBFWUS2gTqlSqSjjmVKHer7SkKWs1Wqthmk0Gssw3LSQh9UwwjQ1mg7T2M2gVjqXaL2MMBABRAARQAQQAUQAEUAEEAFEABFABBABRAARQAQQAUQAEUAEEGEVjuNarVZnkYpML66nNSRa02F0orVZGIZhdBhhWDpQZyPRmg4zS7Smw5RKJR1Gmi4daJlobTWMSrReau9ABBABRAARQAQQAUQAEUAEEAFEABFABBABRAARQAQQAUQAEZ5lEVbhOE49R2NIRVapVFqG+a2zlhptNUyj0dgJww0Z1FQYhmFUmEqlMgvDcdwsTMswvy3DSNMMarMwZu9QFGWG0b0DEUAEEAFEABFABBABRAARQAQQAUQAEUAEEAFEABFABBABRAARKBFWqQwVMahD47YzqKldarXayTCttURr6kRmYQRB0GHM9liG0Sey2mwnw6gTORkGIoAIIAKIACKACCACiAAigAggAogAIoAIIAKIACKACCACiPBMibBKq9VqLBKtKRtbZ8hYVqlUVsOY/jQdpjXNoHYyjGC43WpDBjUVplQqcdN8bKpvzDCdRaI1M4zZbFthIAKIACKACCACiAAigAggAogAIoAIIAKIACKACCACiAAigAggglKpXEWSpE6n02g0uI1Ea7VajWEYYch5psO0Wq1ZmJKRQY0binfQYSobidbMrtJhGo2G6oOtMKoPlmEoitJhGIbRYTiO44xEa7PegQggAogAIoAIIAKIACKACCACiAAigAggAogAIoAIIAKIACKACFTYKtw0FRnHcY1GQ0tAHZq0SI3GcVytVlOnocJ0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Qmu5m0KZumPJAqM0ulAW5yqoVRYag5ktmXnbYW+etPg7RDZodZiACZiACZiACZiACZiACZiACZiACZiACZiACZiACZe4CY7v+51OJ0mSxChFTtM06Y23SHMV1GFvvIV85Hme16ugDvoLrQfJuv0V1LLUIbI0TePe8A75yO8vtG61Wipze4XWliwMw1arJasTma4OEzABEzABEzABEzABEzABEzABEzABEzABEzABEzABE8QEJ4oiM4vcHaWCWi4d9YqZy8g8zxOZfCSysHc8X9IrjZb7GVVm3XY1GSZgAiZgAiZgAiZgAiZgAiZgAiZgAiZgAiZgAiZgwqVsgiOX9jwvCIIoitI0Ne8mNOqxkySxZJ7nhb3SaFPm+77v+yLrdruLymTZIovjOOrNb46LCq1VFvdS/vJFpiwMQ8/zur0y8jKrwwRMwARMwARMwARMwARMwARMwARMwARMwARMwARMwATf950gCNI0lX9wXTdJkjRNwzCcnZ0NexXUnU7H932VSaF1GZncTRRFrVar2+3KR67rep4nfw6CoN1ujyprt9t6257nua4rf+72l5GXlGk9NiZgAiZgAiZgAiZgAiZgAiZgAiZgAiZgAiZgAiZgAiY4kmBOkiSO426367quptL9XgV11CuNVplnTH32B5dGa/L7XMvktlXW7R0+qKuzZPqiQD7CBEzABEzABEzABEzABEzABEzABEzABEzABEzABEzABLltJyxdaF1BJl8ZhmGapt3eIA8xUa+QJEmhLI7jvEy/aIjMuh+VnfXVYQImYAImYAImYAImYAImYAImYAImYAImYAImYAImXHwmOOmAQuskSeTS+cP15CO/v9Bajw5MehXUo8q00NqSua6rsqB3dGA6oNBaZVahtco8z1OZtTpMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMcLr9FdRy093+Cmqvv9BaHBFZp9MxZUGvmNmSua4bhmFiJL/TotLoQlkcx0Nkfq+CWmSu64osDENLpqtTWeHqMAETMAETMAETMAETMAETMAETMAETMAETMAETMAETLmUTHL9XzBz2ZljI78ifI6Mee4gsDMO0V0G9qKzbX0GtX1RSlhQVWssXWbIgCFRm3k9ehgmYgAmYgAmYgAmYgAmYgAmYgAmYgAmYgAmYgAmYgAnyRU4QBJrGjnqF1kmSpLlCa1NmVlAPksW5QmtJY6e9euwwDAtlZpJeZUl/BXVJWWCk/M3VJUnieZ7fX4+NCZiACZiACZiACZiACZiACZiACZiACZiACZiACZiACY78Q6fTkTXEcSxLTXsVy51OR3/HdV2V+b7vG4XW5lJFJh/5AwqtRRb0ap5VliSJJfOMCmq/N7xDZeGAQmtzqSrLr86SYQImYAImYAImYAImYAImYAImYAImYAImYAImYAImXOImOPI7Qa/mOS0qtPZ9X2Rdo5hZZL7vx3Gsa5NLV5CZXyQmiiw1SqOrycqvDhMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMc+Zo0TYMg8Dwv6iWeNSme9AqtVeb25jerLI5jS9Y1xjybsjRNdW2yHrc3cTnuVVCrzPM8lZm5fMmd52Vhf8rflJmrC42Uf9Krx8YETMAETMAETMAETMAETMAETMAETMAETMCEs2tCfnWYgAmYcEGY4PhGKXJojLeQ3/F9P03TJEmC/gpqmcqRpmlsFFpbMl2DfOR5nud5psxaal7W7Xbb7bYpC4JAPvL7C61VpktVWZnVYQImYAImYAImYAImYAImYAImYAImYAImYAImXEAmdHOzcS9BE/ibcO5McKIoCoLAz5VGp2kahqF8FMdxSVlsFDOrTO6gjExueiRZlKugli8aIrNu25JhAiZgAiZgAiZgAiZgAiZgAiZgAiZgAiZgAiZgAiZcyiY48jue5wUDCq1d1+12u6YsiqIhsqRXQW3K5G6iokJrdceU6dXSXqF1XhbnKqhVJvcThqHctlVGbsms1WECJmACJmACJmACJmACJmACJmACJmACJmACJmACJlzKJjhBrtA6TdMwDFutVhiGaZrGcdzpdHyj0LrT6eRlSW94x0iyoFdonaZpFEVajy0yz/PSNBVH2u12oczzPJV1exXUctvtdltX53me67oqa7VaKrPqsTEBEzABEzABEzABEzABEzABEzABEzABEzABEzABEy5lExzf932jgtrzvCiK4jjuFpVGW7JkaAW1ma4Oe8cFyt3IFc6RzO8VWqtsyOpUhgmYgAmYgAmYgAmYgAmYgAmYgAmYgAmYgAmYgAmYgAlxHDthGHqe1x1QGm26cxZlURSpLEkSuTORmf+TREYFtcj8XAV1HMcikyuoTK4gMrmCKTunq8METMAETMAETMAETMAETMAETMAETMAETMAETMAETLhwTXDS/kLrNE29wYXWJWVaaJ2mqd9fQT07Oxv2KqhLyrTQWhwxC61brVa325WPhhRaD5eNujpMwARMwARMwARMwARMwARMwARMwARMwARMwARMwISL2ASn2+1KslkSzHI3QRC4rhtFURzHmtU2ZUmSxHHc7XZFZia/5WuGy4L+mmdTpql0f3AFdUmZZ0x91tWJzHVdkRWuDhMwARMwARMwARMwARMwARMwARMwARMwARMwARMw4ZI1wfGNmmff97u9QmuvV/OcJEnQXxqtsrioNLprDPIIgkBkvlEavagsDMO0V0GtJpr3UyjL33ZJ2aDVYQImYAImYAImYAImYAImYAImYAImYAImYAImYAImXIImOEHR4XpJkqRp6nme5KfTXsWyXGuIrNs7YTBJkrh3dOAgmbhjyfz+EwZVlvQKrU2Z3HbYOzpQZK7rqizopfxTo9C6UIYJmIAJmIAJmIAJmIAJmIAJmIAJmIAJmIAJmIAJmIAJYRg6SZKEYailyFFRBXUcxyrTnLQl06XmZZ5RGp2XyRUGyTT5PUimt23KAqM+vGsUWg+SYQImYAImYAImYAImYAImYAImYAImYAImYAImYAImYILInKhXGh30SpFDo5hZ7iYwKqiDIOjmap7zMn+x0ugkSbpGafQgWZqroNYvKpQFQZCXmatT2aDVYQImYAImYAImYAImYAImYAImYAImYAImYAImYAImXMomOL7vx3GcGoXWcmktjU56hdamLOrlp02Z53kq6xqDmaMo6nQ6IkvT1JJptjvOVVB7nif30zWy3SqTK5iyMAxNmeu6g2RmPXZ+dZiACZiACZiACZiACZiACZiACZiACZiACZiACZiACZesCY7fG29hLTWOY/nWtKiC2ry0Jet0OqZM1mDKkiQxZbrU1CiNFpm51CiK3KJCa5HpjA+RBUahta6u2z/jY5AMEzABEzABEzABEzABEzABEzABEzABEzABEzABEzDhUjbBiaIoCALf96NeobXv+/I7YRgGQRD0SqNVlhil0SrzfT8v6/Zqni2ZfpE40u2voB4uC3r14fnbVpnc9hCZubpBMkzABEzABEzABEzABEzABEzABEzABEzABEzABEzAhEvQBCfJFVoHQeB5ntxN2BulLJceIpM0dhzHSX8FtSmLetnuvKzbP086L1N3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" width="640" />&nbsp;</span></span><br /><br /><br /><br /><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;"></span></span>Few good MOS notes to stabilize, improve and tune the Retro-pay and Payroll processes on Oracle EBS environment:<br /><br /><ul style="text-align: left;"><li><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;">EBS Payroll RetroPay Analyzer (Doc ID 1512437.1)</span></span></li><li><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;">EBS Database Parameter Settings Analyzer (Doc ID 1953468.1)</span></span></li><li><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;">EBS Payroll Analyzer (Doc ID 1631780.1)</span></span></li><li><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;">EBS HRMS Payroll - RetroPay Advisor (Doc ID 1482827.1)</span></span></li><li><span style="font-size: small;"><span class="xq" id="kmPgTpl:r1:0:ol22" style="color: black;">RetroPay Analyzer Tool FAQ (Doc ID 1568129.1)</span></span></li></ul></div> The Human Fly tag:blogger.com,1999:blog-19771507.post-4260568436411868196 Sat Apr 15 2017 06:45:00 GMT-0400 (EDT) ORDS Standalone and URI Rewrites http://feedproxy.google.com/~r/KrisBlog/~3/HXOvaGLumUQ/ords-standalone-and-uri-rewrites.html My last post How to add an NCSA style Access Log to ORDS Standalone explained what the ORDS standalone is and that is based on Eclipse Jetty.  Jetty offers far more than ORDS exposed in it's standalone.  There's a long list of all the features and configuration options listed in the documentation, http://www.eclipse.org/jetty/documentation/9.2.21.v20170120/ A recent question came up for doing <div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/KrisBlog?a=HXOvaGLumUQ:0CkWB8CFTzs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/KrisBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/KrisBlog?a=HXOvaGLumUQ:0CkWB8CFTzs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/KrisBlog?d=7Q72WNTAKBA" border="0"></img></a> </div><img src="http://feeds.feedburner.com/~r/KrisBlog/~4/HXOvaGLumUQ" height="1" width="1" alt=""/> Kris Rice tag:blogger.com,1999:blog-37621059.post-8929186596639506246 Thu Apr 13 2017 11:45:00 GMT-0400 (EDT) ODTUG Kscope16 Award-Winning Session Recordings Available to All http://www.odtug.com/p/bl/et/blogaid=706&source=1 ODTUG full members get exclusive access to browse all session recordings from past Kscope conferences. To highlight our impressive speaker lineup for Kscope17, we want to give everyone a sneak peek at the quality sessions that are to come at Kscope17. ODTUG http://www.odtug.com/p/bl/et/blogaid=706&source=1 Thu Apr 13 2017 09:39:19 GMT-0400 (EDT) DB Auditing and ORDS http://feedproxy.google.com/~r/KrisBlog/~3/52-RNjsT-y8/db-auditing-and-ords.html There seems to be some confusion around how ORDS works with it's connection pooling yet running the REST call as the specified schema. The connection pool Consider a 50 PDB env and concurrent users per PDB running some REST stuff.  Using a connection pool per PDB would be 50 connection pools.  Then if a JET app ( or any HTML5/JS/.. ) is making REST calls Chrome will do this with 6 concurrent <div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/KrisBlog?a=52-RNjsT-y8:AiqtqvyAqlo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/KrisBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/KrisBlog?a=52-RNjsT-y8:AiqtqvyAqlo:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/KrisBlog?d=7Q72WNTAKBA" border="0"></img></a> </div><img src="http://feeds.feedburner.com/~r/KrisBlog/~4/52-RNjsT-y8" height="1" width="1" alt=""/> Kris Rice tag:blogger.com,1999:blog-37621059.post-1411905273496018932 Thu Apr 13 2017 09:09:00 GMT-0400 (EDT) SQLDeveloper 4.2 - już jest i daje radę. http://apex.dbe.pl/2017/04/sqldeveloper-42-juz-jest-i-daje-rade.html Przed kilkoma godzinami ukazała się finalna wersja 4.2 SQL Developera. Nowa wersja posiada sporo zmian i nowych funkcjonalności.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://1.bp.blogspot.com/-J6_8LocL-J8/WO6Ms8bxYEI/AAAAAAAAJJ8/P5fMlZ5URNwa6Ix50Fw9NP5jNEIhqWAxwCLcB/s1600/sqldeveloper.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="https://1.bp.blogspot.com/-J6_8LocL-J8/WO6Ms8bxYEI/AAAAAAAAJJ8/P5fMlZ5URNwa6Ix50Fw9NP5jNEIhqWAxwCLcB/s400/sqldeveloper.PNG" width="400" /></a></div> <br /> To co zauważyłem to nowy Quick outline, została zmieniona nazwa na Code outline i wygląda to teraz tak:<br /><br /><br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://3.bp.blogspot.com/-95X-kPg_rNI/WO6NYYJJ-hI/AAAAAAAAJKE/oBx58EZyqmsvLfC5eKsMqcK5IIfme9zlgCLcB/s1600/outline.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://3.bp.blogspot.com/-95X-kPg_rNI/WO6NYYJJ-hI/AAAAAAAAJKE/oBx58EZyqmsvLfC5eKsMqcK5IIfme9zlgCLcB/s400/outline.PNG" width="196" /></a></div> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <div class="separator" style="clear: both; text-align: left;"> Dostęp do Bookmarków z pozycji edycji paczki</div> <div class="separator" style="clear: both; text-align: left;"> <br /></div> <div class="separator" style="clear: both; text-align: center;"> <a href="https://2.bp.blogspot.com/-35WtIrc4qF8/WO6N7OlBaeI/AAAAAAAAJKM/FIQjLrEMiaI77OXZwsEvS5IedLn8JK5VwCLcB/s1600/bookmark.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="165" src="https://2.bp.blogspot.com/-35WtIrc4qF8/WO6N7OlBaeI/AAAAAAAAJKM/FIQjLrEMiaI77OXZwsEvS5IedLn8JK5VwCLcB/s320/bookmark.PNG" width="320" /></a></div> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <div class="separator" style="clear: both; text-align: left;"> REST-y zostały przeniesione do głównego drzewa</div> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <div class="separator" style="clear: both; text-align: center;"> <a href="https://4.bp.blogspot.com/-_GVrBnxENpk/WO6OX2SIJII/AAAAAAAAJKQ/wpb19cpsjBEIhohezS_tl82-y3mlAu_ywCLcB/s1600/rest.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-_GVrBnxENpk/WO6OX2SIJII/AAAAAAAAJKQ/wpb19cpsjBEIhohezS_tl82-y3mlAu_ywCLcB/s320/rest.PNG" width="281" /></a></div> <div class="separator" style="clear: both; text-align: left;"> <br /></div> <div class="separator" style="clear: both; text-align: left;"> Nowy Instance Viewer</div> <div class="separator" style="clear: both; text-align: left;"> <br /></div> <div class="separator" style="clear: both; text-align: center;"> <a href="https://2.bp.blogspot.com/-KBS7vJDuh8c/WO6QETP6vlI/AAAAAAAAJKc/SpbNJrIny0MUq4FTwh1ITniqBk3clUqvwCLcB/s1600/viewer.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="238" src="https://2.bp.blogspot.com/-KBS7vJDuh8c/WO6QETP6vlI/AAAAAAAAJKc/SpbNJrIny0MUq4FTwh1ITniqBk3clUqvwCLcB/s400/viewer.PNG" width="400" /></a></div> <div class="separator" style="clear: both; text-align: left;"> <br /></div> <div class="separator" style="clear: both; text-align: left;"> <br /></div> <div class="separator" style="clear: both; text-align: left;"> <br /></div> <div class="separator" style="clear: both; text-align: left;"> No i wiele wiele więcej... : )</div> <div class="separator" style="clear: both; text-align: left;"> <br /></div> ) tag:blogger.com,1999:blog-7531463720728239813.post-154497216777586784 Wed Apr 12 2017 16:39:00 GMT-0400 (EDT) Muy pronto mi tercer libro saldrá a la luz! http://feedproxy.google.com/~r/DescubriendoElMundoDeOracle/~3/MmY470mFA2s/muy-pronto-mi-tercer-libro-saldra-la-uz.html Hola a todos mis seguidores!<br /><br /><div style="text-align: justify;"><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:AllowPNG/> </o:OfficeDocumentSettings></xml><![endif]--></div><div style="text-align: justify;"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:EnableOpenTypeKerning/> <w:DontFlipMirrorIndents/> <w:OverrideTableStyleHps/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument></xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false" DefSemiHidden="false" DefQFormat="false" DefPriority="99" LatentStyleCount="371"> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 9"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 9"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="header"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footer"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index heading"/> <w:LsdException Locked="false" Priority="35" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="caption"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of figures"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope address"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope return"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="line number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="page number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of authorities"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="macro"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="toa heading"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 5"/> <w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Closing"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Signature"/> <w:LsdException Locked="false" Priority="1" SemiHidden="true" UnhideWhenUsed="true" Name="Default Paragraph Font"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Message Header"/> <w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Salutation"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Date"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Note Heading"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Block Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Hyperlink"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="FollowedHyperlink"/> <w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Document Map"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Plain Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="E-mail Signature"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Top of Form"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Bottom of Form"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal (Web)"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Acronym"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Address"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Cite"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Code"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Definition"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Keyboard"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Preformatted"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Sample"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Typewriter"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Variable"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Table"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation subject"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="No List"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Contemporary"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Elegant"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Professional"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Balloon Text"/> <w:LsdException Locked="false" Priority="39" Name="Table Grid"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Theme"/> <w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" Name="Light List"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" SemiHidden="true" Name="Revision"/> <w:LsdException Locked="false" Priority="34" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" SemiHidden="true" UnhideWhenUsed="true" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/> <w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/> <w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/> <w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/> <w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/> <w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/> <w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 1"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 2"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 3"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 4"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 5"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 6"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 1"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 2"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 3"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 4"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 5"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 6"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 6"/> </w:LatentStyles></xml><![endif]--><!--[if gte mso 10]><style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:8.0pt; mso-para-margin-left:0in; line-height:107%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri",sans-serif; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style><![endif]--> </div><div class="MsoNormal"><span lang="ES" style="mso-ansi-language: ES;">Sé que no estoy publicando tan seguido posts en el blog porque estoy dedicando todo mi tiempo libre a este nuevo proyecto! Quiero compartir con todos la noticia de que muy pronto mi tercer libro estará publicado. Se trata de Oracle APEX 5.1, en el cual incluiré la instalación sobre el Servidor GlassFish, las nuevas características como el uso de la Grilla Interactiva, Crear un nuevo esquema de autenticación, crear reportes con JasperReports Integration kit, desarrollar un ejemplo demo y crear un dashboard y mucho más!!!</span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-P5GmoWErHPs/WO5ZfCwCbVI/AAAAAAAAB2U/eSn_9rv1CXo1UyWq1WSbWVPBb1uX_lZHwCLcB/s1600/dashboard-apex5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" src="https://2.bp.blogspot.com/-P5GmoWErHPs/WO5ZfCwCbVI/AAAAAAAAB2U/eSn_9rv1CXo1UyWq1WSbWVPBb1uX_lZHwCLcB/s320/dashboard-apex5.jpg" width="320" /></a></div><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:AllowPNG/> </o:OfficeDocumentSettings></xml><![endif]--> <br /><div class="MsoNormal" style="text-align: justify;"><span lang="ES" style="mso-ansi-language: ES;">Estaré las próximas dos semanas de viaje y a mi regreso esteré trabajando en la culminación de este proyecto.</span></div><div class="MsoNormal" style="text-align: justify;"><br /></div><div class="MsoNormal" style="text-align: justify;"><span lang="ES" style="mso-ansi-language: ES;">Si estas interesado en conocer más de este libro, estate atento a las novedades en Mayo!</span></div><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:EnableOpenTypeKerning/> <w:DontFlipMirrorIndents/> <w:OverrideTableStyleHps/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument></xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false" DefSemiHidden="false" DefQFormat="false" DefPriority="99" LatentStyleCount="371"> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 9"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 9"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="header"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footer"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index heading"/> <w:LsdException Locked="false" Priority="35" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="caption"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of figures"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope address"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope return"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="line number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="page number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of authorities"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="macro"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="toa heading"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 5"/> <w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Closing"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Signature"/> <w:LsdException Locked="false" Priority="1" SemiHidden="true" UnhideWhenUsed="true" Name="Default Paragraph Font"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Message Header"/> <w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Salutation"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Date"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Note Heading"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Block Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Hyperlink"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="FollowedHyperlink"/> <w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Document Map"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Plain Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="E-mail Signature"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Top of Form"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Bottom of Form"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal (Web)"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Acronym"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Address"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Cite"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Code"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Definition"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Keyboard"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Preformatted"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Sample"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Typewriter"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Variable"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Table"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation subject"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="No List"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Contemporary"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Elegant"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Professional"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Balloon Text"/> <w:LsdException Locked="false" Priority="39" Name="Table Grid"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Theme"/> <w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" Name="Light List"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" SemiHidden="true" Name="Revision"/> <w:LsdException Locked="false" Priority="34" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" SemiHidden="true" UnhideWhenUsed="true" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/> <w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/> <w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/> <w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/> <w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/> <w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/> <w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 1"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 2"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 3"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 4"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 5"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 6"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 1"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 2"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 3"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 4"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 5"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 6"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 6"/> </w:LatentStyles></xml><![endif]--><!--[if gte mso 10]><style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:8.0pt; mso-para-margin-left:0in; line-height:107%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri",sans-serif; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style><![endif]--><br /><div style="text-align: justify;"></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Saludos!!!</div><img src="http://feeds.feedburner.com/~r/DescubriendoElMundoDeOracle/~4/MmY470mFA2s" height="1" width="1" alt=""/> Clarisa J. Maman Orfali tag:blogger.com,1999:blog-1315583943401206186.post-5908549036734999289 Wed Apr 12 2017 12:50:00 GMT-0400 (EDT) REST Services and Application Express 5.1 - Part 1 https://blogs.oracle.com/apex/entry/rest_services_and_application_express <div> <p><img src="https://blogs.oracle.com/apex/resource/logo-rest-client-assistant.png" width="100" alt="REST Client Assistant" align="left" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">More and more Application Express developers are faced with the requirement to integrate REST services or HTTP/JSON data feeds into their applications. Application Express provides great support for SOAP web services, but for REST services using JSON to exchange data, the built-in functionality is limited. For instance, all the JSON parsing has to be done manually by employing PL/SQL code or SQL functions.</font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"></font><span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;">Application Express 5.1 contains two new packaged applications are provided for REST service integration: </span><strong style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;">REST Client Assistant</strong><span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;"> and </span><strong style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;">Sample REST Services</strong><span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;">.</span></p> </div> <div> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6001/index-en.html" target="_blank" title="Community Article &quot;REST Services and Application Express 5.1 - Part 1&quot;">This article</a> will show how you can integrate an external REST service or an HTTP/JSON data feed into your APEX application - and how the REST Client Assistant will help you with that: All required SQL and PL/SQL code will be generated for you!</font></p> </div> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/rest_services_and_application_express Wed Apr 12 2017 10:58:30 GMT-0400 (EDT) REST Services and Application Express 5.1 - Part 1 https://blogs.oracle.com/apex/entry/rest_services_and_application_express <div> <p><img src="https://blogs.oracle.com/apex/resource/logo-rest-client-assistant.png" width="100" alt="REST Client Assistant" align="left" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">More and more Application Express developers are faced with the requirement to integrate REST services or HTTP/JSON data feeds into their applications. Application Express provides great support for SOAP web services, but for REST services using JSON to exchange data, the built-in functionality is limited. For instance, all the JSON parsing has to be done manually by employing PL/SQL code or SQL functions.</font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"></font><span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;">Application Express 5.1 contains two new packaged applications are provided for REST service integration: </span><strong style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;">REST Client Assistant</strong><span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;"> and </span><strong style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;">Sample REST Services</strong><span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: small;">.</span></p> </div> <div> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6001/index-en.html" target="_blank" title="Community Article &quot;REST Services and Application Express 5.1 - Part 1&quot;">This article</a> will show how you can integrate an external REST service or an HTTP/JSON data feed into your APEX application - and how the REST Client Assistant will help you with that: All required SQL and PL/SQL code will be generated for you!</font></p> </div> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/rest_services_and_application_express Wed Apr 12 2017 10:58:30 GMT-0400 (EDT) REST Services und Application Express 5.1 - Teil 1 https://blogs.oracle.com/apexcommunity_deutsch/entry/rest_services_und_application_express <div> <p><img src="https://blogs.oracle.com/apexcommunity_deutsch/resource/logo-rest-client-assistant.png" width="100" alt="REST Client Assistant" align="left" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">Die Anforderung, mit <strong>REST Services</strong> zu arbeiten, haben auch Application Express-Entwickler mehr und mehr auf dem Schreibtisch. Zwar können Web Service Referenzen für REST Services in den Gemeinsamen Komponenten eingerichtet werden; die Unterstützung ist jedoch recht limitiert: So muss die JSON-Antwort, die der REST Service sendet, typischerweise manuell geparst und verarbeitet werden.&nbsp;</font></p> <p><font face="tahoma, arial, helvetica, sans-serif"><font size="2"></font><span style="font-size: small;">Allerdings bringt Application Express 5.1 zwei neue Packaged Applications für REST Services mit: Den </span><strong style="font-size: small;">REST Client Assistant</strong><span style="font-size: small;"> und </span><strong style="font-size: small;">Sample REST Services</strong><span style="font-size: small;">.&nbsp;</span><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6001/index.html" target="_blank" title="Community Tipp &quot;REST Services und Application Express 5.1 - Teil 1&quot;" style="font-size: small;">Dieser Community Tipp</a><span style="font-size: small;"> zeigt auf, wie man einen externen REST Service, mit Hilfe des REST Client Assistant, in seine eigene APEX-Anwendung einbinden kann. Dabei wird aller SQL und PL/SQL Code zum Aufrufen des Service oder zum JSON-Parsing vom REST Client Assistant generiert.</span></font></p> </div> <div><br /></div> Carsten Czarski-Oracle https://blogs.oracle.com/apexcommunity_deutsch/entry/rest_services_und_application_express Wed Apr 12 2017 10:54:24 GMT-0400 (EDT) Kscope17 Database Track Session Highlights – Galo Balda http://www.odtug.com/p/bl/et/blogaid=705&source=1 Galo Balda, Database Track Lead for ODTUG Kscope17, shares his top 5 Database Track Sessions with reasons why they are his "don't miss sessions" at Kscope17. ODTUG http://www.odtug.com/p/bl/et/blogaid=705&source=1 Wed Apr 12 2017 10:01:50 GMT-0400 (EDT) How to use Font Awesome Animation Library in Applications https://ruepprich.wordpress.com/2017/04/11/how-to-use-font-awesome-animation-library-in-applications/ <p>A very nice blog post about using Fontawesome animations by <a class="profile-name-link g-profile" href="https://plus.google.com/115650672005820755567" rel="author">M.Yasir Ali Shah</a>:</p> <p><a href="http://apexfusion.blogspot.com/2017/04/how-to-use-font-awesome-animation.html" rel="nofollow">http://apexfusion.blogspot.com/2017/04/how-to-use-font-awesome-animation.html</a></p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2314/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2314&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2314 Tue Apr 11 2017 19:10:06 GMT-0400 (EDT) Auto-dismiss APEX Universal theme success messages http://oracleinsights.blogspot.com/2017/04/auto-dismiss-apex-universal-theme.html <div dir="ltr" style="text-align: left;" trbidi="on"> In the APEX 5.1.1 Universal Theme demonstration application, a code snippet is included showing how to automatically dismiss Success messages via JavaScript using the apex.theme42.configureSuccessMessages API.<br /> Trouble is it <b>only works in some circumstances</b>, as can be seen in screenshot from a demonstration application below.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://apex.oracle.com/pls/apex/f?p=autodismiss" target="_blank"><img alt="" border="0" height="388" src="https://4.bp.blogspot.com/-YfVfQfUoiXo/WOy4gh63I_I/AAAAAAAAAao/Bn3yLUR9jSE-g7hxg0Go_cFj0brlDkbowCLcB/s640/autodismiss-demo.png" title="" width="640" /></a></div> <br /> You can try the <a href="https://apex.oracle.com/pls/apex/f?p=autodismiss" target="_blank">demo application</a> to observe the issue, and a solution that works right now. You can download the application, which probably works on earlier versions of the Universal theme - I haven't tested it.</div> Mark Lancaster tag:blogger.com,1999:blog-869579236085438805.post-8410974803850338933 Tue Apr 11 2017 07:23:00 GMT-0400 (EDT) Question: Table names singular or plural? http://www.oracle-and-apex.com/question-table-names-singular-or-plural/ <p>Yesterday I put a question on twitter, to find out what others prefer: table names using singular or plural form. I expected one or two replies, not an avalanche :-)</p> <blockquote class="twitter-tweet" data-lang="en"> <p dir="ltr" lang="en">datamodel question for monday morning: why would you use plural to name a table (ie. USERS)? Isn’t it more accurate to use singular -&gt; USER.</p> <p>— PeterRaganitsch (@PeterRaganitsch) <a href="https://twitter.com/PeterRaganitsch/status/851328339130421248">April 10, 2017</a></p></blockquote> <p><span id="more-1329"></span></p> <h3>As expected there were all kind of replies going either singular or plural. Some of the replies were actually funny or educational, here are some of my favorites:</h3> <blockquote class="twitter-tweet" data-lang="en"> <p dir="ltr" lang="en"><a href="https://twitter.com/PeterRaganitsch">@PeterRaganitsch</a> what does table contain: user or users? Are you selecting from user or from users where … if you care for language: plural</p> <p>— Rob van Wijk (@rwijk) <a href="https://twitter.com/rwijk/status/851330596840378368">April 10, 2017</a></p></blockquote> <p><script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script></p> <blockquote class="twitter-tweet" data-lang="en"><p> <a href="https://twitter.com/PeterRaganitsch">@PeterRaganitsch</a> …and that’s why it’s called DUAL: for the dual singularity: one row, one column <img src="https://s.w.org/images/core/emoji/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>— Alex Nuijten (@alexnuijten) <a href="https://twitter.com/alexnuijten/status/851331342910582786">April 10, 2017</a> </p></blockquote> <p><script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script></p> <blockquote class="twitter-tweet" data-lang="en"> <p dir="ltr" lang="en"><a href="https://twitter.com/thatjeffsmith">@thatjeffsmith</a> <a href="https://twitter.com/PeterRaganitsch">@PeterRaganitsch</a> <a href="https://twitter.com/oraesque">@oraesque</a> <a href="https://twitter.com/mortenbraten">@mortenbraten</a> I love these plural discussions. What is the plural of: intercourse with wife?</p> <p>— Øyvind Isene (@OyvindIsene) <a href="https://twitter.com/OyvindIsene/status/851429140922322945">April 10, 2017</a></p></blockquote> <p><script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script></p> <blockquote class="twitter-tweet" data-lang="en"><p> <a href="https://twitter.com/thatjeffsmith">@thatjeffsmith</a> <a href="https://twitter.com/oraculix">@oraculix</a> <a href="https://twitter.com/PeterRaganitsch">@PeterRaganitsch</a> <a href="https://twitter.com/oraesque">@oraesque</a> <a href="https://twitter.com/mortenbraten">@mortenbraten</a> I always thought that the $ in dictionary tables was a nice way to put them plural until I encounter AUX_STATS$</p> <p>— Franck Pachot (@FranckPachot) <a href="https://twitter.com/FranckPachot/status/851481166666506241">April 10, 2017</a> </p></blockquote> <p><script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script></p> <blockquote class="twitter-tweet" data-lang="en"> <p dir="ltr" lang="en"><a href="https://twitter.com/PeterRaganitsch">@PeterRaganitsch</a> Oracle Method in Designer days used singular for entities and plural for tables, so it&#8217;s plural for me.</p> <p>— Rodolfo Luthe (@RodolfoLuthe) <a href="https://twitter.com/RodolfoLuthe/status/851623686494986240">April 11, 2017</a></p></blockquote> <p><script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script></p> <h3>In summary, most important is to be consistent, everything else can be chalked up as personal preference</h3> <blockquote class="twitter-tweet" data-lang="en"><p> <a href="https://twitter.com/PeterRaganitsch">@PeterRaganitsch</a> I like plural to express it&#8217;s a set and not a singleton. But I don&#8217;t get upset about it :-)</p> <p>— Øyvind Isene (@OyvindIsene) <a href="https://twitter.com/OyvindIsene/status/851372039424417792">April 10, 2017</a> </p></blockquote> <p><script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script></p> <blockquote class="twitter-tweet" data-lang="en"> <p dir="ltr" lang="en"><a href="https://twitter.com/PeterRaganitsch">@PeterRaganitsch</a> What ever you do do it systematically: always either singular or plural, do not mix.</p> <p>— Heli Helskyaho (@HeliFromFinland) <a href="https://twitter.com/HeliFromFinland/status/851507168104861696">April 10, 2017</a></p></blockquote> <p><script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script></p> <blockquote class="twitter-tweet" data-lang="en"><p> <a href="https://twitter.com/martinberx">@martinberx</a> <a href="https://twitter.com/thatjeffsmith">@thatjeffsmith</a> <a href="https://twitter.com/PeterRaganitsch">@PeterRaganitsch</a> <a href="https://twitter.com/oraesque">@oraesque</a> <a href="https://twitter.com/mortenbraten">@mortenbraten</a> But that means that for consistency we have to put dba_ego in a separate schema. And while we&#8217;re at it partition it, cause it&#8217;s huge :)</p> <p>— Erik van Roon (@evrocs_nl) <a href="https://twitter.com/evrocs_nl/status/851520726909825025">April 10, 2017</a> </p></blockquote> <p><script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script></p> <img src="http://www.oracle-and-apex.com/blog/?ak_action=api_record_view&id=1329&type=feed" alt="" /> Peter Raganitsch http://www.oracle-and-apex.com/?p=1329 Tue Apr 11 2017 04:24:17 GMT-0400 (EDT) Dynamic Theme Style in APEX 5.1 http://www.explorer-development.uk.com/dynamic-theme-style-apex-5-1/ <p>Dynamic Theme Style in APEX 5.1 One of the new features of APEX 5.1 is the introduction of APEX_THEME API which enables you to change the application theme style by user. A very nice APEX 5.0 feature is to allow users to change the theme style using the APEX_UTIL.SET_CURRENT_THEME_STYLE procedure (deprecated in 5.1) but this change</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/dynamic-theme-style-apex-5-1/">Dynamic Theme Style in APEX 5.1</a> appeared first on <a rel="nofollow" href="http://www.explorer-development.uk.com">Oracle Application Express (APEX) Consultants, developers and APEX training courses UK</a>.</p> Explorer Development UK http://www.explorer-development.uk.com/?p=4190 Mon Apr 10 2017 10:18:07 GMT-0400 (EDT) Kscope17 Financial Close Track Session Highlights – Chris Barbieri http://www.odtug.com/p/bl/et/blogaid=704&source=1 Chris Barbieri, Financial Close Track Lead for ODTUG Kscope17, shares his recommended Financial Close Track Sessions with reasons why they are his “don’t miss sessions” at Kscope17. ODTUG http://www.odtug.com/p/bl/et/blogaid=704&source=1 Mon Apr 10 2017 09:34:55 GMT-0400 (EDT) Finding slow JavaScript http://warp11.nl/2017/04/finding-slow-javascript/ <div> <div class="post-body entry-content" id="post-body-8203554379332624666"> Working with Apex I regularly write Javascript. Most of the time these client-side code snippet are blazing fast, but in some cases they take a few seconds to execute.</p> <p> In these cases I want to see which part of the code is slow. In this process I use two very simple JS functions which make life a lot easier for me:</p> </p> <pre>var timing_start; function start_timing( text) { timing_start = performance.now(); if ( text) { console.log('Start timing:'+text); } } function show_timing(text) { console.log('Timing:'+text+', milliseconds:'+ (performance.now()-timing_start) ); } </pre> <pre> </pre> <p>You can put this code on the page or include it in a general JS file.</p> <p>  The use of these functions is really simple: </p> </p> <pre>start_timing(); ... <i>code to be timed </i> ... show_timing('Data retrieved'); </pre> <pre> </pre> <p>This will result in the following output in the browser&#8217;s console:</p> <pre>Timing:Data retrieved, milliseconds:784.2350000000001 </pre> <pre> </pre> <p>The show timing calls display the elapsed time since the last call to start_timing.</p> <p> Happy JavaScripting </p> </div> </div> <p>Source Article from <a href="http://dickdral.blogspot.com/2017/04/finding-slow-javascript.html">http://dickdral.blogspot.com/2017/04/finding-slow-javascript.html</a></p> Dick Dral http://warp11.nl/2017/04/finding-slow-javascript/ Sun Apr 09 2017 05:10:56 GMT-0400 (EDT) Finding slow JavaScript http://dickdral.blogspot.com/2017/04/finding-slow-javascript.html Working with Apex I regularly write Javascript. Most of the time these client-side code snippet are blazing fast, but in some cases they take a few seconds to execute.<br /><br />In these cases I want to see which part of the code is slow. In this process I use two very simple JS functions which make life a lot easier for me:<br /><br /><pre>var timing_start;<br /><br />function start_timing( text) {<br /> timing_start = performance.now();<br /> if ( text) { console.log('Start timing:'+text); } <br />}<br /><br />function show_timing(text)<br />{ console.log('Timing:'+text+', milliseconds:'+ (performance.now()-timing_start) ); }<br /></pre><pre><br /></pre>You can put this code on the page or include it in a general JS file.<br /><br />&nbsp;The use of these functions is really simple: <br /><br /><pre>start_timing();<br />...<br /><i>code to be timed </i><br />...<br />show_timing('Data retrieved');<br /></pre><pre><br /></pre>This will result in the following output in the browser's console: <br /><br /><pre>Timing:Data retrieved, milliseconds:784.2350000000001<br /></pre><pre><br /></pre>The show timing calls display the elapsed time since the last call to start_timing.<br /><br />Happy JavaScripting Dick Dral tag:blogger.com,1999:blog-4312362131290962824.post-8203554379332624666 Sun Apr 09 2017 05:10:00 GMT-0400 (EDT) Expose Yourself with ngrok https://ruepprich.wordpress.com/2017/04/07/expose-yourself-with-ngrok/ <p>Need to expose a web application behind your firewall to the web? No problem with <a href="https://ngrok.com/" target="_blank">ngrok</a>. Simply download ngrok and tell it which local port to listen to, and it will provide you with a publicly accessible URL through which you can reach your application.</p> <p>I&#8217;ve tested it with a simple Node.js Hello World application running on my laptop on port 3000 behind my firewall. I then started ngrok with this simple command:</p> <p>$ ngrok http 3000</p> <p>Ngrok responded with my new URL and also logged all requests.</p> <p><img data-attachment-id="2312" data-permalink="https://ruepprich.wordpress.com/2017/04/07/expose-yourself-with-ngrok/ngrok-3/" data-orig-file="https://ruepprich.files.wordpress.com/2017/04/ngrok2.gif?w=550" data-orig-size="687,596" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ngrok" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/04/ngrok2.gif?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/04/ngrok2.gif?w=550?w=550" class="alignnone size-full wp-image-2312" src="https://ruepprich.files.wordpress.com/2017/04/ngrok2.gif?w=550" alt="ngrok" /></p> <p>This is a great tool for development and testing, but definitely use with caution! <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/commentruepprich.wordpress.com/2291/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2291&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2291 Fri Apr 07 2017 10:01:04 GMT-0400 (EDT) Auto format number items in APEX http://apexbyg.blogspot.com/2017/04/auto-format-number-items-in-apex.html <div dir="ltr" style="text-align: left;" trbidi="on">One of the questions that I get constantly is how to make a number format masks live - to format number fields as you type or when you leave an item.<br /><br />In APEX you can define a number format masks in property Format Mask of number fields:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-FdWSi8UkZb4/WN4NjIEJ1fI/AAAAAAAAEew/4VskQqPBOlggq1dlh-WJ8KS9sRoAoQzugCLcB/s1600/Screen%2BShot%2B2017-03-31%2Bat%2B10.03.55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-FdWSi8UkZb4/WN4NjIEJ1fI/AAAAAAAAEew/4VskQqPBOlggq1dlh-WJ8KS9sRoAoQzugCLcB/s1600/Screen%2BShot%2B2017-03-31%2Bat%2B10.03.55.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">But it's only affected on page load and after page submit for validating format. There's nothing that prevents end user to enter a string or a number in wrong format.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-kV2FSeAFzus/WN4ZfVNA0fI/AAAAAAAAEfA/bKOzXh4QNCoC7TNqnIZiYKDr4uz6VHDAQCLcB/s1600/Mar-31-2017%2B10-54-59.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="361" src="https://1.bp.blogspot.com/-kV2FSeAFzus/WN4ZfVNA0fI/AAAAAAAAEfA/bKOzXh4QNCoC7TNqnIZiYKDr4uz6VHDAQCLcB/s640/Mar-31-2017%2B10-54-59.gif" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">There's a great JS library for that - autoNumeric.js. So let's see how can you implement it in your apps.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">1) Download <a href="https://github.com/BobKnothe/autoNumeric" target="_blank">autoNumeric.js from GitHub</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">2) Unzip the file and upload autoNumeric.min.js (from dist folder) to your workspace (or application) files (Shared Components &gt; Static Workspace/Application Files) or to your server file location.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-kQ1RlMnwaMU/WN4dFhSMbFI/AAAAAAAAEfM/tOt-tfgSHzwPcCqQaU6rg7EYR_Z3RS03wCLcB/s1600/Screen%2BShot%2B2017-03-31%2Bat%2B11.10.22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="88" src="https://4.bp.blogspot.com/-kQ1RlMnwaMU/WN4dFhSMbFI/AAAAAAAAEfM/tOt-tfgSHzwPcCqQaU6rg7EYR_Z3RS03wCLcB/s640/Screen%2BShot%2B2017-03-31%2Bat%2B11.10.22.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">3) Add reference to the file in your application. I usually do it under the Shared Components &gt; User Interface Attributes &gt; Desktop &gt; JavaScript File URLs</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-qsyRpPaJ7qE/WN4d87y9fLI/AAAAAAAAEfU/JV49rkyzV48CJjtKr5wdWdIHmGRAotWvQCLcB/s1600/Screen%2BShot%2B2017-03-31%2Bat%2B11.14.11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-qsyRpPaJ7qE/WN4d87y9fLI/AAAAAAAAEfU/JV49rkyzV48CJjtKr5wdWdIHmGRAotWvQCLcB/s640/Screen%2BShot%2B2017-03-31%2Bat%2B11.14.11.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Now you can use it in your APEX apps. To use it for all APEX number type items you can create onLoad dynamic action on the global page (in most apps this is page 0). Number type items have CSS class number_field&nbsp;so you can initialize AutoNumeric on it, for example:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-vBRZ7LHT4sM/WOXdob7IrkI/AAAAAAAAEhQ/tPBZJbRoQXYcLDCVib9wkFFSiogSPktFQCLcB/s1600/Screen%2BShot%2B2017-04-06%2Bat%2B08.17.50.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="https://1.bp.blogspot.com/-vBRZ7LHT4sM/WOXdob7IrkI/AAAAAAAAEhQ/tPBZJbRoQXYcLDCVib9wkFFSiogSPktFQCLcB/s400/Screen%2BShot%2B2017-04-06%2Bat%2B08.17.50.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">To explicitly override defaults from the global page you can create onLoad dynamic action on the specific page (remember to put greater sequence id from the one on the page 0) and use the update method to change the default properties:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-kziVCym-w6Q/WOXeOIGn7_I/AAAAAAAAEhY/0nZxjJ_7yDAUrsLtsenPIF40VIVZ6xmrwCLcB/s1600/Screen%2BShot%2B2017-04-06%2Bat%2B08.20.19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="177" src="https://1.bp.blogspot.com/-kziVCym-w6Q/WOXeOIGn7_I/AAAAAAAAEhY/0nZxjJ_7yDAUrsLtsenPIF40VIVZ6xmrwCLcB/s400/Screen%2BShot%2B2017-04-06%2Bat%2B08.20.19.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">For other methods and properties see <a href="https://github.com/autoNumeric/autoNumeric" target="_blank">autoNumeric.js documentation</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">You can see demo <a href="https://goo.gl/jbW0mL" target="_blank">here</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><i>Edit (Thanks to <a href="https://twitter.com/rimblas" target="_blank">Jorge Rimblas</a>): You don't have to hardcode group and decimal separators, you can get them with apex.locale.getGroupSeparator() and apex.locale.getDecimalSeparator().</i></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="background-color: white; clear: both; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px;">Enjoy!</div><div class="separator" style="background-color: white; clear: both; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px;"><br /></div><div class="separator" style="background-color: white; clear: both; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px;"><i style="font-size: 13.2px;">Tested on APEX&nbsp;5.1.1.00.08</i></div><div class="separator" style="background-color: white; clear: both; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px;"><i style="font-size: 13.2px;"><br /></i></div><div class="separator" style="background-color: white; clear: both; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /></div> Marko Gorički tag:blogger.com,1999:blog-1003209687173038896.post-3928158828768851672 Thu Apr 06 2017 02:30:00 GMT-0400 (EDT) Debugging those JavaScripts http://apextips.blogspot.com/2017/04/debugging-those-javascripts.html So, you have some code that is playing up, and you want to debug them. We have a few options depending on the situation we are in.<br /><br /><b>1. Debug APEX/web app in Chrome</b><br /><br />I primarily use Google Chrome, so will be focusing on using that browser to debug. The next thing we want to do is enable a break point so that the execution will pause in you can inspect variables and step over the code line by line.<br /><br />Typically, in the developer tools you will want to navigate to the sources tab, find your script and add the break point. In the case of inline, I found the following interesting behaviour (unsure if its a buggy browser version or what).<br /><br />When I run the page for the first time, and open the developer tools, trying to open the page source will result in an empty document.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-E9BYnrVtVe0/WOSOVdJF3HI/AAAAAAAAH9Q/QkmQB3bwQdgFBldq8z2_f9ucHT90dCNpwCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B16-19-49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="130" src="https://3.bp.blogspot.com/-E9BYnrVtVe0/WOSOVdJF3HI/AAAAAAAAH9Q/QkmQB3bwQdgFBldq8z2_f9ucHT90dCNpwCLcB/s400/Screenshot%2Bfrom%2B2017-04-05%2B16-19-49.png" width="400" /></a></div><br />However, if I re-run the page with the developer tools open, the full page source will be displayed.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-JQYENSXwmSA/WOSPRX3FKsI/AAAAAAAAH9Y/mvN0-VWJZJ8TkVPgf5qxoufilk9XQP59ACLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B16-31-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="133" src="https://2.bp.blogspot.com/-JQYENSXwmSA/WOSPRX3FKsI/AAAAAAAAH9Y/mvN0-VWJZJ8TkVPgf5qxoufilk9XQP59ACLcB/s400/Screenshot%2Bfrom%2B2017-04-05%2B16-31-10.png" width="400" /></a></div><br />Another neat trick that I discovered, is that you can map inline code to a "dummy" source file, as documented <a href="https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps#sourceurl_and_displayname">here</a>. Wherever you define your functions, add a comment line in the format: //# sourceURL=global.js, where you would want your functions to appear in the source tree as "global.js". These sourceURL seem to be on a per-script block (&lt;script&gt;..&lt;/script&gt;) basis.<br /><br />So, if I add that above comment line to be global variable and function definitions in my page, the source tree in developer tools will now come in like so:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-mvTB3uVExlw/WOSQ1DqsTQI/AAAAAAAAH9k/4ZAFo-zfkmYwa9jn-hPozoHco-Sm0nWRwCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B16-37-50.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="146" src="https://2.bp.blogspot.com/-mvTB3uVExlw/WOSQ1DqsTQI/AAAAAAAAH9k/4ZAFo-zfkmYwa9jn-hPozoHco-Sm0nWRwCLcB/s400/Screenshot%2Bfrom%2B2017-04-05%2B16-37-50.png" width="400" /></a></div><br /><br />Neat, huh!<br /><br />The other way of course is if you reference an external script.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-aSYSN2Ipvtw/WOSRy0Et-3I/AAAAAAAAH9s/tuUI3Jdxo9wx3jabSgcwOzugCiZ93w-ZgCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B16-41-56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="133" src="https://1.bp.blogspot.com/-aSYSN2Ipvtw/WOSRy0Et-3I/AAAAAAAAH9s/tuUI3Jdxo9wx3jabSgcwOzugCiZ93w-ZgCLcB/s400/Screenshot%2Bfrom%2B2017-04-05%2B16-41-56.png" width="400" /></a></div><br /><br />Ok, now we know how to find our sources, what we want to do is add a break point to see what is going on. That is just a matter of clicking in the gutter where the line numbers are. You'll see a blue mark appear and be ready to run whatever action causes the code to run.<br /><br />This UI gives all sorts of goodies - watches, call stack, variable values, etc.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-jGh6mrEiL0k/WOSTLCejbMI/AAAAAAAAH94/EfrQ2wMKstsS3BOlMJwhXbMOIzXq3LuOgCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B16-47-52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="440" src="https://3.bp.blogspot.com/-jGh6mrEiL0k/WOSTLCejbMI/AAAAAAAAH94/EfrQ2wMKstsS3BOlMJwhXbMOIzXq3LuOgCLcB/s640/Screenshot%2Bfrom%2B2017-04-05%2B16-47-52.png" width="640" /></a></div><br /><br />As you can see, the console allows also to run expressions against the current scope where the debugger is paused at.<br /><br />(One thing that i haven't mentioned is that you can also have a line with the word `debugger` to trigger a breakpoint)<br /><br />Another neat feature of this is that you can actually modify scripts in the developer tools when you are prototyping an enhancement, before you solidify the changes in your actual code base. All the changes you make are then visible through the history panel.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-Hp5TkENd6II/WOTjszbqX1I/AAAAAAAAH_w/YpHvkpL37ZwOiUNpvKcLLcpi0ixoG3_kQCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B22-31-11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-Hp5TkENd6II/WOTjszbqX1I/AAAAAAAAH_w/YpHvkpL37ZwOiUNpvKcLLcpi0ixoG3_kQCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B22-31-11.png" /></a></div><br /><br /><b>2. Debug node program with Chrome</b><br /><br />The neat thing with node, is you are able to use this same UI to debug a node program. On the command line, you just need to run the command: node --interactive[-brk] script.js, and you will be given a URL that you can load in your browser. Note, there are two arguments you can use when starting the debug process:<br /><br />--interactive<br />--interactive-brk<br /><br />Depending on the type of program, interactive-brk is not a bad idea as it will break on the first line of execution.<br /><br />The console output looks like this:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-fdq2Fh0vRUo/WOSZWizuINI/AAAAAAAAH-I/2tNxK8JEymsMaezQmcCPTBRYAbOl_WIWgCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B17-14-20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="152" src="https://1.bp.blogspot.com/-fdq2Fh0vRUo/WOSZWizuINI/AAAAAAAAH-I/2tNxK8JEymsMaezQmcCPTBRYAbOl_WIWgCLcB/s640/Screenshot%2Bfrom%2B2017-04-05%2B17-14-20.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><br />So, you just need to paste that URL into Chrome, and get debuggin!<br /><br /><b>3. Debug node program on the command line</b><br /><br />Node also comes with the debug argument. This does seem to be deprecated, but even so.<br /><br />So, you run the command: node debug foo.js. This will pause execution on the first line where you can set break points, continue, step over, etc. You can evaluate expressions by typing the command `repl` and than the expression you want to evaluate.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-Dwa0738D_aM/WOSefPYynpI/AAAAAAAAH-Y/Cx9nBlL2L0MZ7PPcNapbkungO5UGoutSwCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B17-31-17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="338" src="https://2.bp.blogspot.com/-Dwa0738D_aM/WOSefPYynpI/AAAAAAAAH-Y/Cx9nBlL2L0MZ7PPcNapbkungO5UGoutSwCLcB/s640/Screenshot%2Bfrom%2B2017-04-05%2B17-31-17.png" width="640" /></a></div><br />Refer to the documentation for the full list of available commands:&nbsp;<a href="https://nodejs.org/api/debugger.html">https://nodejs.org/api/debugger.html</a><br /><br /><b>4. Debug node program with Atom</b><br /><br />Atom is a open sourced text editor by GitHub, where certain languages have a package that supports debugging code in the editor - JavaScript being one of those languages. So, go ahead and install the node-debugger package<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-7fd3Z7zGCfk/WOSftEllQLI/AAAAAAAAH-g/Hkq9lpMGoeAJ7ct9vM14sd-psxkiYvPkACLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B17-41-25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="185" src="https://4.bp.blogspot.com/-7fd3Z7zGCfk/WOSftEllQLI/AAAAAAAAH-g/Hkq9lpMGoeAJ7ct9vM14sd-psxkiYvPkACLcB/s640/Screenshot%2Bfrom%2B2017-04-05%2B17-41-25.png" width="640" /></a></div><br /><br />After installing, you will want to check the configuration. At a minimum, you will probably want to make sure the node path is valid. For example, by default it expects: /bin/node, but I installed node through umake so is located at:&nbsp;/home/trent/.local/share/umake/nodejs/nodejs-lang/bin/node.<br /><br />To toggle a break point, you will navigate to the line and then run the command "node-debugger:toggle-breakpoint" - note the key binding by default (f9) conflicts with another package I have (build), so I would need to re-map that binding in order to use that. In the meantime, I just run the command.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-2Hbgm6UQApc/WOSjEXFdQ-I/AAAAAAAAH-s/28k-NNLSlrAshbChSMVZh0rYt1SQWkX8ACLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B17-55-46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="https://3.bp.blogspot.com/-2Hbgm6UQApc/WOSjEXFdQ-I/AAAAAAAAH-s/28k-NNLSlrAshbChSMVZh0rYt1SQWkX8ACLcB/s400/Screenshot%2Bfrom%2B2017-04-05%2B17-55-46.png" width="400" /></a></div><br />You will see the breakpoints highlighted by orange in the gutter. Now we can start the debugger by hitting f5. This will still pause execution on the first line, and bring a panel on the right hand side where we can step over, continue, etc.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-8EJjTK7Uv-I/WOSjuVhVc9I/AAAAAAAAH-0/1CPy1Q6T6UApV1ccSD3IHmLzQh5AFkfdgCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B17-58-34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="https://2.bp.blogspot.com/-8EJjTK7Uv-I/WOSjuVhVc9I/AAAAAAAAH-0/1CPy1Q6T6UApV1ccSD3IHmLzQh5AFkfdgCLcB/s400/Screenshot%2Bfrom%2B2017-04-05%2B17-58-34.png" width="400" /></a></div><br /><br />And at below the editor there is another panel for standard out/error where we can also evaluate expressions.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-RP0AYWqBkiw/WOSkGO6Qi3I/AAAAAAAAH-4/wHi4vAjZg9UYJIBbfDUffEz1MWI6Cx3WgCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B18-00-11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="193" src="https://4.bp.blogspot.com/-RP0AYWqBkiw/WOSkGO6Qi3I/AAAAAAAAH-4/wHi4vAjZg9UYJIBbfDUffEz1MWI6Cx3WgCLcB/s640/Screenshot%2Bfrom%2B2017-04-05%2B18-00-11.png" width="640" /></a></div><br /><br /><b>5. Debug node with VS Code</b><br /><br />VS code is another open source text editor that is possible to debug node programs in. This comes with debug functionality on a fresh install for node. So, if you open up your script then hover in the line number gutter, you will see a little break point icon appear.<br /><br />So, click in the gutter to enable the break point, and then open the debug panel and click Run.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-x1bw4-yBxJg/WOTepHX4XPI/AAAAAAAAH_c/2HiplW_lDvYA2TazKH_vi2VfwBE6kVImQCLcB/s1600/Screenshot%2Bfrom%2B2017-04-05%2B22-09-56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="289" src="https://1.bp.blogspot.com/-x1bw4-yBxJg/WOTepHX4XPI/AAAAAAAAH_c/2HiplW_lDvYA2TazKH_vi2VfwBE6kVImQCLcB/s640/Screenshot%2Bfrom%2B2017-04-05%2B22-09-56.png" width="640" /></a></div><br /><br />I find this interface a bit more polished than what was provided in the Atom example. Add to that, you can hover over variables to see their values, as is demonstrated with the `i` variable above - which I personally find immensely useful.<br /><br />One additional feature of VS code which I won't explore in this article is that you can use the debugger in VS code by having it connect to Chrome. Read more here:&nbsp;<a href="https://code.visualstudio.com/blogs/2016/02/23/introducing-chrome-debugger-for-vs-code">https://code.visualstudio.com/blogs/2016/02/23/introducing-chrome-debugger-for-vs-code</a> trent tag:blogger.com,1999:blog-8785176694082881912.post-8926087905163737533 Wed Apr 05 2017 08:33:00 GMT-0400 (EDT) An introduction into the APEX 5.1 Layout View http://www.apex-at-work.com/2017/04/an-introduction-into-apex-51-layout-view.html Many of you are still using the old "Component View" but the "Page Designer" introduced in APEX 5 made the developer life much easier.<br /><br />The top 5 most time saving abilities for me are:<br />&nbsp;1. Easy access on all page elements (without any page refresh)<br />&nbsp;2. Copy&amp;Paste of items, regions, dynamic actions, ...&nbsp; <br />&nbsp;3. Drag&amp;Drop moving of items and regions<br />&nbsp;4. Multi edit of items<br />&nbsp;5. Since APEX 5.1: The ability to customize your own personal Page Designer View<br /><br />The functionality "Layout" introduced in APEX 5 was not in my focus and as I remember I had some issues with it. So I just ignored it.<br /><br />In APEX 5.1 I started a rerun on it using the "Universal Theme" and I must say it is a real help when you create a complex form page with a lot of page items. It feels different in APEX 5.1 and works almost flawless.<br /><br />To get in touch with it I prepared a little example for you to help understanding the feature and may get inspired to use it, too.<br />We start with a page including 16 page items which should be visualized on 3 rows. Some of them are conditional and they are from different types (Text Field, Radio Group, Select List, Textarea).<br /><br />All items are now displayed one below the other. <br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-eNHUI08CDA0/WNqRDhYPgaI/AAAAAAAABs8/y6egvjYtK5MXQ66zNoz6Oc7uv5TyqdtzwCK4B/s1600/Page_Designer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="403" src="https://2.bp.blogspot.com/-eNHUI08CDA0/WNqRDhYPgaI/AAAAAAAABs8/y6egvjYtK5MXQ66zNoz6Oc7uv5TyqdtzwCK4B/s640/Page_Designer.png" width="640" /></a></div><br /><br />What do I aim for in the first step?<br />1. All items should have the label set to be "above". (Do not use the region template option for that)<br />2. I want to edit 8 page items split on two rows<br />3. Items 1-3 per row should be displayed over 2 columns<br />4. Item size must be adjusted<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-D3u-ifH4FyQ/WOQWnxxkqoI/AAAAAAAABug/5GKe35X5SG01XnXC0352dH-TXpAVR0WHACLcB/s1600/first_and_second_row.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="326" src="https://1.bp.blogspot.com/-D3u-ifH4FyQ/WOQWnxxkqoI/AAAAAAAABug/5GKe35X5SG01XnXC0352dH-TXpAVR0WHACLcB/s640/first_and_second_row.gif" width="640" /></a></div><a href="http://2.bp.blogspot.com/-PhhKI2778y4/WOQWAAQXKNI/AAAAAAAABuc/MQ-FUiekBqYHeP4uwQGpiRkdDyuurNzcgCK4B/s1600/third_row_2.gif" imageanchor="1"></a><br /><br />In between I made a Dynamic Action to make the "detail group" item conditional based on "Organization" if it is null or not. <br /><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-Ps8JpXpMER0/WNqexnS9ArI/AAAAAAAABtU/rVow8xbQ4uYrzHw4ID2fFzn0A5-hreHyQCK4B/s1600/Page_Designer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="261" src="https://4.bp.blogspot.com/-Ps8JpXpMER0/WNqexnS9ArI/AAAAAAAABtU/rVow8xbQ4uYrzHw4ID2fFzn0A5-hreHyQCK4B/s320/Page_Designer.png" width="320" /></a></div><br />I did the same for the category selector but I needed some Javascript code to make it right.<br /><a href="http://4.bp.blogspot.com/-pW24YTa3rzk/WNwdNgsv0gI/AAAAAAAABts/9uhQne1mA6soukkHxVdqr5BGN48qL5N8QCK4B/s1600/Page_Designer.png" imageanchor="1"><img border="0" height="412" src="https://4.bp.blogspot.com/-pW24YTa3rzk/WNwdNgsv0gI/AAAAAAAABts/9uhQne1mA6soukkHxVdqr5BGN48qL5N8QCK4B/s640/Page_Designer.png" width="640" /></a><br /><br />Code:<br /><pre class="js" name="code">apex.item( "P9_CAT1_NAME_A" ).hide();<br />apex.item( "P9_CAT1_NAME_B" ).hide();<br />apex.item( "P9_CAT2_NAME" ).hide();<br />apex.item( "P9_CAT3_NAME" ).hide();<br />apex.item( "P9_CAT4_NAME_V1" ).hide(); <br />apex.item( "P9_CAT4_NAME_V2" ).hide(); <br />apex.item( "P9_CAT4_NAME_V3" ).hide(); <br /><br />if ( $v("P9_CATEGORY_SELECTOR") == '1' ) {<br /> apex.item( "P9_CAT1_NAME_A" ).show();<br /> apex.item( "P9_CAT1_NAME_B" ).show(); <br />}<br />if ( $v("P9_CATEGORY_SELECTOR") == '2' ) {<br /> apex.item( "P9_CAT2_NAME" ).show(); <br />}<br /><br />if ( $v("P9_CATEGORY_SELECTOR") == '3' ) {<br /> apex.item( "P9_CAT3_NAME" ).show(); <br />}<br />if ( $v("P9_CATEGORY_SELECTOR") == '4' ) {<br /> apex.item( "P9_CAT4_NAME_V1" ).show();<br /> apex.item( "P9_CAT4_NAME_V2" ).show(); <br /> apex.item( "P9_CAT4_NAME_V3" ).show(); <br />}<br /></pre><br />In my final move I finished the page by adjusting the other items.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-OqQZ8hFeYLg/WOQW0UmiM2I/AAAAAAAABuk/MYs8utZjgGU0AfvBFyEFCwk1bkty2QYhwCLcB/s1600/third_row_2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="326" src="https://1.bp.blogspot.com/-OqQZ8hFeYLg/WOQW0UmiM2I/AAAAAAAABuk/MYs8utZjgGU0AfvBFyEFCwk1bkty2QYhwCLcB/s640/third_row_2.gif" width="640" /></a></div><br /><br />The page looked like that:<br /><a href="http://2.bp.blogspot.com/-VM-QvPhwJbg/WNwdyp3ZwdI/AAAAAAAABt8/jHtWtVQnVescufp5AAJFHWqjGC9RSrENQCK4B/s1600/example1.gif" imageanchor="1"><img border="0" height="324" src="https://2.bp.blogspot.com/-VM-QvPhwJbg/WNwdyp3ZwdI/AAAAAAAABt8/jHtWtVQnVescufp5AAJFHWqjGC9RSrENQCK4B/s640/example1.gif" width="640" /></a><br /><br />But as always it could be a little bit better and luckily I used APEX. I just had to make a little change on it:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-VWSHqA3oMNw/WOQW5IyCjdI/AAAAAAAABuo/rf6fGkBv2Ko1aZyLI0WISx8cmBw78TzdQCLcB/s1600/first_and_second_row_update.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="326" src="https://3.bp.blogspot.com/-VWSHqA3oMNw/WOQW5IyCjdI/AAAAAAAABuo/rf6fGkBv2Ko1aZyLI0WISx8cmBw78TzdQCLcB/s640/first_and_second_row_update.gif" width="640" /></a></div><br />That's it. Hope you will give the "Layout"-View a chance to proof itself. :)<br /><br /><br />Info:<br />In case your Page Designer mentions problems in applying some multi update settings. Just refresh the page and try again. Tobias Arnhold tag:blogger.com,1999:blog-6481483192141562388.post-7190699538773924062 Tue Apr 04 2017 17:52:00 GMT-0400 (EDT) Live JavaScript logging with Quokka https://ruepprich.wordpress.com/2017/04/03/live-javascript-logging-with-quokka/ <p>If you&#8217;re using <a href="https://code.visualstudio.com/" target="_blank">Visual Studio Code</a> for writing JavaScript, the handy <a href="https://quokkajs.com/docs/" target="_blank">Quokka</a> plugin will allow you to preview values at design time.</p> <p>Add the Quokka extension via the Extensions Marketplace in VS Code.<img data-attachment-id="2267" data-permalink="https://ruepprich.wordpress.com/2017/04/03/live-javascript-logging-with-quokka/quokka_ext/" data-orig-file="https://ruepprich.files.wordpress.com/2017/04/quokka_ext.png?w=550" data-orig-size="398,130" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="quokka_ext" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/04/quokka_ext.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/04/quokka_ext.png?w=550?w=398" class="alignnone size-full wp-image-2267" src="https://ruepprich.files.wordpress.com/2017/04/quokka_ext.png?w=550" alt="quokka_ext" srcset="https://ruepprich.files.wordpress.com/2017/04/quokka_ext.png 398w, https://ruepprich.files.wordpress.com/2017/04/quokka_ext.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/04/quokka_ext.png?w=300 300w" sizes="(max-width: 398px) 100vw, 398px" /></p> <p>Then, from the command palette, either create a new JavaScript file through Quokka, or start Quokka for an existing file.<img data-attachment-id="2274" data-permalink="https://ruepprich.wordpress.com/2017/04/03/live-javascript-logging-with-quokka/quokka2-2/" data-orig-file="https://ruepprich.files.wordpress.com/2017/04/quokka21.png?w=550" data-orig-size="503,188" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="quokka2" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/04/quokka21.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/04/quokka21.png?w=550?w=503" class="alignnone size-full wp-image-2274" src="https://ruepprich.files.wordpress.com/2017/04/quokka21.png?w=550" alt="quokka2" srcset="https://ruepprich.files.wordpress.com/2017/04/quokka21.png 503w, https://ruepprich.files.wordpress.com/2017/04/quokka21.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/04/quokka21.png?w=300 300w" sizes="(max-width: 503px) 100vw, 503px" /></p> <p>Now you can attach the special comment /*?*/ to a variable to preview it&#8217;s value. Make sure that the comment touches the variable. The preview values will magically show up in the editor and the output console.</p> <p><img data-attachment-id="2282" data-permalink="https://ruepprich.wordpress.com/2017/04/03/live-javascript-logging-with-quokka/quokka3/" data-orig-file="https://ruepprich.files.wordpress.com/2017/04/quokka3.png?w=550" data-orig-size="271,259" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="quokka3" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/04/quokka3.png?w=550?w=271" data-large-file="https://ruepprich.files.wordpress.com/2017/04/quokka3.png?w=550?w=271" class="alignnone size-full wp-image-2282" src="https://ruepprich.files.wordpress.com/2017/04/quokka3.png?w=550" alt="quokka3" srcset="https://ruepprich.files.wordpress.com/2017/04/quokka3.png 271w, https://ruepprich.files.wordpress.com/2017/04/quokka3.png?w=150 150w" sizes="(max-width: 271px) 100vw, 271px" /></p> <p>Here is a live view:</p> <p><img data-attachment-id="2280" data-permalink="https://ruepprich.wordpress.com/2017/04/03/live-javascript-logging-with-quokka/quokka/" data-orig-file="https://ruepprich.files.wordpress.com/2017/04/quokka.gif?w=550" data-orig-size="788,403" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="quokka" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/04/quokka.gif?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/04/quokka.gif?w=550?w=550" class="alignnone size-full wp-image-2280" src="https://ruepprich.files.wordpress.com/2017/04/quokka.gif?w=550" alt="quokka" /></p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2260/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2260&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2260 Mon Apr 03 2017 14:38:35 GMT-0400 (EDT) A review of APEX World 2017 - Day 2 http://roelhartman.blogspot.com/2017/04/a-review-of-aepx-world-2017-day-2.html <!--?xml version="1.0" encoding="UTF-8"?--> <br /><div>(You can read my impression of the first day <a href="http://roelhartman.blogspot.nl/2017/04/a-review-of-apex-world-2017-day-1.html" target="_blank">here</a>) </div><div>After a short but&nbsp;good night sleep and an excellent breakfast, Mike Hichwa delivered his second keynote "<i>RAD Challenge: Build a Real World application in 60 minutes</i>”. Although he suffered from connection issues, Mike managed to wow the audience showing the new packaged app "Quick SQL” and &nbsp;the new (currently&nbsp;Cloud-only)&nbsp;“Blueprint” option to create a new application. As JSON is not code (but just a collection of&nbsp;value-attribute pairs), it was really a&nbsp;<b><u>no-code</u></b> showcase!</div><div></div><div><!--?xml version="1.0" encoding="UTF-8"?--> <br /><div>Then it was parallel session time again and I went to see how&nbsp;Christian Rokitta would <i>"Bootstrapify Universal Theme”</i>. The message is: You&nbsp;don’t have to&nbsp;unsubscribe from the Universal Theme (and&nbsp;please don’t!) to create an application that looks totally different from the “regular” APEX applications. </div><div><br /></div><div><a href="http://4.bp.blogspot.com/-Bq68mY3CgVw/WOJ5Xza0WMI/AAAAAAAAEF0/epi1q50bKmUR9xvuRG1Ua9mGqeBmKU4VgCK4B/s1600/CFFA07CB-0B87-4B0C-B47C-6AC2FC9A514B.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" src="https://4.bp.blogspot.com/-Bq68mY3CgVw/WOJ5Xza0WMI/AAAAAAAAEF0/epi1q50bKmUR9xvuRG1Ua9mGqeBmKU4VgCK4B/s400/CFFA07CB-0B87-4B0C-B47C-6AC2FC9A514B.png" width="400" /></a>Then I had to deliver my second presentation “<i>Docker for Dummies</i>”. It was aimed at people who might have heard of Docker but really have hardly a clue what it is - and what the benefits are. I received really good feedback on this session and quite a lot of additional questions afterwards. So it seems I did made people curious and enthousiast about Docker. Mission completed!&nbsp;</div></div><div><br /></div><div><!--?xml version="1.0" encoding="UTF-8"?--> <br /><div>During another excellent lunch, we could still enjoy the beautiful weather and the Rotterdam skyline. It was good to spend some time outside in the fresh air. </div><div><br /></div><div>Then the last part of the event started. Dimitri kicked it off with “<i>Moving my APEX app to the Exadata Express Cloud. Live!</i>”. He explained the differences in (some of) the cloud offerings Oracle has and how you can move your application and data from your local instance into the Exadata Express Cloud. As Mike explained during his keynote on the first day, EECS will get better: more workspaces, really “Cloud first”, optional upgrading (after APEX 5.1), a local datacenter etc. Oh, yes, and a free subscription to the Oracle Developer Cloud Service as well! </div><div><br /></div><div>The last regular session I attended was “<i>Forms to APEX</i>” by&nbsp;Sergei Martens. The APEX pages he showed were impressive. So different than anything else and enriched with numerous cool features. I especially liked the “Outlook style” interface because it is so close to what a user is used to, he/she can start using that application right away without any training whatsoever. The presentation could even be better if he had shown the original Forms screens as a reference ... </div><div><br /></div><div>And finally, at the last keynote, Shakeeb could do his “<i>The Center of the Universal Theme</i>” presentation. Of course the presentation wasn’t just good looking - it had good content as well and I really like Shakeeb’s presentation style (as do a lot of other people I heard afterwards).&nbsp; </div><div><br /></div><div>As a “goodbye” we were offered some drinks and snacks and then it was time to go home.&nbsp; </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-IIsWFV1PRAU/WOJ5e2XM6uI/AAAAAAAAEF8/p1XH4QEravo_qvOtgZ_F3RLfHxwAfPZBwCK4B/s1600/IMG_2772.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://4.bp.blogspot.com/-IIsWFV1PRAU/WOJ5e2XM6uI/AAAAAAAAEF8/p1XH4QEravo_qvOtgZ_F3RLfHxwAfPZBwCK4B/s640/IMG_2772.JPG" width="640" /></a></div><div><br /></div><div>Next year APEX World 2018&nbsp;it will probably be on the same wonderful location. I am already looking forward to it and i encourage everyone who is interested in APEX to attend!&nbsp;</div></div><span class="fullpost"></span> Roel Hartman tag:blogger.com,1999:blog-20567072.post-7296014980303032577 Mon Apr 03 2017 12:34:00 GMT-0400 (EDT) Compiling views: when the FORCE fails you https://jeffkemponoracle.com/2017/04/03/compiling-views-when-the-force-fails-you/ <p><img data-attachment-id="3862" data-permalink="https://jeffkemponoracle.com/2017/04/03/compiling-views-when-the-force-fails-you/darth-vader-selfie/" data-orig-file="https://jeffkemponoracle.files.wordpress.com/2017/04/darth-vader-selfie.jpg" data-orig-size="615,409" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Darth-Vader-selfie" data-image-description="&lt;p&gt;Credit: http://www.mirror.co.uk/tv/tv-news/star-wars-instagram-account-launches-2878103&lt;/p&gt; " data-medium-file="https://jeffkemponoracle.files.wordpress.com/2017/04/darth-vader-selfie.jpg?w=300&#038;h=200" data-large-file="https://jeffkemponoracle.files.wordpress.com/2017/04/darth-vader-selfie.jpg?w=615" class="alignright size-medium wp-image-3862" src="https://jeffkemponoracle.files.wordpress.com/2017/04/darth-vader-selfie.jpg?w=300&#038;h=200" alt="Darth-Vader-selfie" width="300" height="200" srcset="https://jeffkemponoracle.files.wordpress.com/2017/04/darth-vader-selfie.jpg?w=300&amp;h=200 300w, https://jeffkemponoracle.files.wordpress.com/2017/04/darth-vader-selfie.jpg?w=600&amp;h=400 600w, https://jeffkemponoracle.files.wordpress.com/2017/04/darth-vader-selfie.jpg?w=150&amp;h=100 150w" sizes="(max-width: 300px) 100vw, 300px" />The order in which your deployment scripts create views is important. This is a fact that I was reminded of when I had to fix a minor issue in the deployment of version #2 of my application recently.</p> <p>Normally, you can just generate a <code>create or replace force view</code> script for all your views and just run it in each environment, then recompile your schema after they&#8217;re finished &#8211; and everything&#8217;s fine. However, if views depend on other views, you can run into a logical problem if you don&#8217;t create them in the order of dependency.</p> <p><strong>Software Release 1.0</strong></p> <pre class="brush: sql; title: ; notranslate"> create table t (id number, name varchar2(100)); create or replace force view tv_base as select t.*, 'hello' as stat from t; create or replace force view tv_alpha as select t.* from tv_base t; desc tv_alpha; Name Null Type ---- ---- ------------- ID NUMBER NAME VARCHAR2(100) STAT CHAR(5) </pre> <p>Here we have our first version of the schema, with a table and two views based on it. Let&#8217;s say that the <code>tv_base</code> includes some derived expressions, and <code>tv_alpha</code> is intended to do some joins on other tables for more detailed reporting.</p> <p><strong>Software Release 1.1</strong></p> <pre class="brush: sql; title: ; notranslate"> alter table t add (phone varchar2(10)); create or replace force view tv_alpha as select t.* from tv_base t; create or replace force view tv_base as select t.*, 'hello' as stat from t; </pre> <p>Now, in the second release of the software, we added a new column to the table, and duly recompiled the views. In the development environment the view recompilation may happen multiple times (because other changes are being made to the views as well) &#8211; and nothing&#8217;s wrong. Everything works as expected.</p> <p>However, when we run the deployment scripts in the Test environment, the &#8220;run all views&#8221; script has been run just once; and due to the way it was generated, the views are created in alphabetical order &#8211; so <code>tv_alpha</code> was recreated first, followed by <code>tv_base</code>. Now, when we describe the view, we see that it&#8217;s missing the new column:</p> <pre class="brush: sql; title: ; notranslate"> desc tv_alpha; Name Null Type ---- ---- ------------- ID NUMBER NAME VARCHAR2(100) STAT CHAR(5) </pre> <p>Whoops. What&#8217;s happened, of course, is that when <code>tv_alpha</code> was recompiled, <code>tv_base</code> still hadn&#8217;t been recompiled and so it didn&#8217;t have the new column in it yet. Oracle internally defines views with <code>SELECT *</code> expanded to list all the columns. The view won&#8217;t gain the new column until we <code>REPLACE</code> the view with a new one using <code>SELECT *</code>. By that time, it&#8217;s too late for <code>tv_alpha</code> &#8211; it had already been compiled, successfully, so it doesn&#8217;t see the new column.</p> <p><strong>Lesson Learnt</strong></p> <p>What should we learn from this? <strong>Be wary</strong> of <code>SELECT *</code> in your views. Don&#8217;t get me wrong: they are very handy, especially during initial development of your application; but they can surprise you if not handled carefully and I would suggest it&#8217;s good practice to expand those <code>SELECT *</code>&#8216;s into a discrete list of columns.</p> <p>Some people would go so far as to completely outlaw <code>SELECT *</code>, and even views-on-views, for reasons such as the above. I&#8217;m not so dogmatic, because <strong><em>in my view</em></strong> there are some good reasons to use them in some situations.</p><br />Filed under: <a href='https://jeffkemponoracle.com/category/oracle/sql/'>SQL</a> Tagged: <a href='https://jeffkemponoracle.com/tag/development/'>development</a>, <a href='https://jeffkemponoracle.com/tag/sql/'>SQL</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffkemponoracle.wordpress.com/3818/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffkemponoracle.wordpress.com/3818/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffkemponoracle.wordpress.com/3818/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffkemponoracle.wordpress.com/3818/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffkemponoracle.wordpress.com/3818/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffkemponoracle.wordpress.com/3818/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffkemponoracle.wordpress.com/3818/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffkemponoracle.wordpress.com/3818/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffkemponoracle.wordpress.com/3818/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffkemponoracle.wordpress.com/3818/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffkemponoracle.wordpress.com/3818/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffkemponoracle.wordpress.com/3818/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffkemponoracle.wordpress.com/3818/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffkemponoracle.wordpress.com/3818/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jeffkemponoracle.com&#038;blog=12972578&#038;post=3818&#038;subd=jeffkemponoracle&#038;ref=&#038;feed=1" width="1" height="1" /> Jeffrey Kemp http://jeffkemponoracle.com/?p=3818 Sun Apr 02 2017 21:01:06 GMT-0400 (EDT) A review of APEX World 2017 - Day 1 http://roelhartman.blogspot.com/2017/04/a-review-of-apex-world-2017-day-1.html <!--?xml version="1.0" encoding="UTF-8"?--> <br /><div style="text-align: justify;">Last week the SS Rotterdam was the beautiful location of the largest gathering of APEX Developers worldwide. With around 380 (!) attendees a new high was set. And they came from all over the world : I spotted people from&nbsp;The Netherlands, Belgium, Switzerland, Austria, Croatia, Germany, Denmark, Norway, UK, Ireland and the USA. And I even might have missed one or two …. </div><div style="text-align: justify;"><br /></div><div><a href="http://4.bp.blogspot.com/-nVRRtewxHj4/WOE_0E38xHI/AAAAAAAAEE8/juFx1qDSY9AtpflCXcBrMoZyif4sBbpwACK4B/s1600/90A3BEAF-C42D-4CAB-9850-4435FC891FD2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"><img border="0" height="400" src="https://4.bp.blogspot.com/-nVRRtewxHj4/WOE_0E38xHI/AAAAAAAAEE8/juFx1qDSY9AtpflCXcBrMoZyif4sBbpwACK4B/s400/90A3BEAF-C42D-4CAB-9850-4435FC891FD2.png" width="400" /></a><br /><div style="text-align: justify;">The event started with a presentation by the “father of APEX”,&nbsp;Mike Hichwa, talking about "<i>Oracle APEX Past, Present and Future</i>”. Of course everyone is curious what the APEX future might bring: Friendly URL’s, automated testing, more JSON, concurrent APEX versions, third party Oauth 2 authentication (think Facebook, Google), APEX app diff and more, a lot more, REST capabilities. And now we have to wait for APEX 5.2 … and that might take a while!&nbsp;</div></div><div><!--?xml version="1.0" encoding="UTF-8"?--> <br /><div style="text-align: justify;">After this keynote, the conference split up in three tracks. After the coffee break I returned to to big theatre where Geertjan Wielenga talked about "<i>Finally Javascript is easy, with Oracle JET</i>”. I do like JET, but I am not sure all attendees shared Geertjan’s view. They probably were more convinced that APEX is way&nbsp;easier than JET.... </div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Next on stage, the last before lunch, was Alex Nuijten talking about "<i>JET Charts in the world of APEX</i>”. It was a very nice intro into the world of JET charts and Alex showed some peculiarities you have to be aware of. For instance, if you have multiple series, make sure all your queries return the same number of rows and in the same order. Or - as Alex is promoting -&nbsp;release your inner SQL Ninja and use the SQL power to get a proper result in one pass! </div><div style="text-align: justify;"><br /></div><div><a href="http://1.bp.blogspot.com/-ipRzW4DF_c8/WOFAHUlwhkI/AAAAAAAAEFE/Rjgh4IkxpjU6ORkJLnTnwX6-T27d9ze4wCK4B/s1600/270D3928-5EAD-4A6B-89C1-1B98A01CE529.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: justify;"><img border="0" height="300" src="https://1.bp.blogspot.com/-ipRzW4DF_c8/WOFAHUlwhkI/AAAAAAAAEFE/Rjgh4IkxpjU6ORkJLnTnwX6-T27d9ze4wCK4B/s400/270D3928-5EAD-4A6B-89C1-1B98A01CE529.png" width="400" /></a></div><div><div style="text-align: justify;">After a very good lunch (the quality of the food and drinks was a lot better than I have seen at other conferences, kudos for the organisation!), it was time for my first session, "<i>A Deep Dive into APEX JET Charts</i>”. In this session I am trying to convince the audience that looking into the JET documentation is really worthwhile: with just one or two &nbsp;lines of JavaScript you can add a whole new user&nbsp;experience layer to your pages: much more interactive and dynamic! And for the JET components that are currently not exposed in the APEX Builder, you can create a plugin. Not that hard either, a few lines of PL/SQL, a couple lines of JavaScript and a SQL statement can do the trick! I hoped people liked it. I did get very positive feedback of Geertjan, who is the Product Manager of JET, that he didn’t know it was that easy to modify or&nbsp;incorporate JET Charts in APEX!&nbsp;</div></div></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><!--?xml version="1.0" encoding="UTF-8"?--> <br /><div><a href="http://3.bp.blogspot.com/-ZUAkuVbcKFQ/WOFBDQvyegI/AAAAAAAAEFg/0pigkIK7TAsIdJJlxpJX6KtBR539C5odgCK4B/s1600/C778CDE3-A30D-4603-9F4A-6E7C642E6E73.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" src="https://3.bp.blogspot.com/-ZUAkuVbcKFQ/WOFBDQvyegI/AAAAAAAAEFg/0pigkIK7TAsIdJJlxpJX6KtBR539C5odgCK4B/s400/C778CDE3-A30D-4603-9F4A-6E7C642E6E73.png" width="400" /></a>After my session I went to one of the other rooms 4 decks lower to listen to Matt Nolan. He was "<i>Unlocking the power of the APEX plugin architecture</i>”. Compared to previous performances Matt did an excellent job! I don’t know if the attendees will start developing plugins en masse, but it didn’t look too complicated (to me)!</div><div><br /></div><div><!--?xml version="1.0" encoding="UTF-8"?--> <br /><div>The last keynote of the day was another JET Charts session, "<i>Advanced Charts in APEX 5.1 and beyond</i>” by&nbsp;Hilary Farrell. Inevitably there was some overlap with Alex’ and my session, but also enough new stuff (and around ⅔ of the attendees probably had missed those sessions anyway). Hilary showed some cool examples how to chance the look of the chart or add functionality by just a few lines of Javascript. And in APEX 5.2 … we will get upgraded jQuery (3.x) and jQuery UI (1.12.x) libraries and the latest and greatest version of JET (probably 3.x). </div><div><br /></div><div><a href="http://4.bp.blogspot.com/-VuDV9Nzbjrc/WOFA5XN7kgI/AAAAAAAAEFY/KWaPyqJXbfYDca5_V8vavS8wcAExJla-gCK4B/s1600/6867F57E-8E4B-4DF1-8C20-050FBB79DFF0.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="225" src="https://4.bp.blogspot.com/-VuDV9Nzbjrc/WOFA5XN7kgI/AAAAAAAAEFY/KWaPyqJXbfYDca5_V8vavS8wcAExJla-gCK4B/s400/6867F57E-8E4B-4DF1-8C20-050FBB79DFF0.png" width="400" /></a>Because a presentation of Uber was cancelled there was an "<i>Ask the experts panel”</i> added to the agenda. Three of the seven experts are member of the SMART4Apex coöperation, but to be honest, most questions were addressed to and answered by Mike. As&nbsp;SMART4Apex we delivered seven (7!) presentations, enough to fill one of the three&nbsp;tracks for both days...</div><div><br /></div><div><br /></div><div>After this extra session, it was time for drinks and dinner. And because the weather was absolutely fabulous, we could enjoy it all on deck while watching the sun set over Rotterdam.</div><div>A great end of a fantastic first day!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-TPQ2l3w-AV0/WOFA0x3C2hI/AAAAAAAAEFQ/rUsAzUb04_I7VxavOZeXj-9-65Xt0oa6ACK4B/s1600/3FFDAF7B-1666-4683-A490-F7290541EFF5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://1.bp.blogspot.com/-TPQ2l3w-AV0/WOFA0x3C2hI/AAAAAAAAEFQ/rUsAzUb04_I7VxavOZeXj-9-65Xt0oa6ACK4B/s640/3FFDAF7B-1666-4683-A490-F7290541EFF5.png" width="569" /></a></div><div></div></div></div><span class="fullpost"></span> Roel Hartman tag:blogger.com,1999:blog-20567072.post-4172556224071886455 Sun Apr 02 2017 14:23:00 GMT-0400 (EDT) Oracle OpenWorld 2017: Call for Speakers Is Now Open http://www.odtug.com/p/bl/et/blogaid=695&source=1 What’s the big idea? Share yours with the world's largest gathering of Oracle technologists and business leaders during Oracle OpenWorld 2017, happening October 1-5, 2017 in San Francisco. This year’s Call for Speakers is NOW open. ODTUG http://www.odtug.com/p/bl/et/blogaid=695&source=1 Fri Mar 31 2017 11:19:25 GMT-0400 (EDT) Apex 5 – show Y/N columns as font awesome icons https://svenweller.wordpress.com/2017/03/29/apex-5-yn-icons/ <p><img data-attachment-id="4850" data-permalink="https://svenweller.wordpress.com/2017/03/29/apex-5-yn-icons/apex5_yn_icons/" data-orig-file="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons.png?w=809" data-orig-size="362,446" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="apex5_YN_icons" data-image-description="" data-medium-file="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons.png?w=809?w=243" data-large-file="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons.png?w=809?w=362" class="alignnone size-full wp-image-4850" src="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons.png?w=809" alt="apex5_YN_icons" srcset="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons.png 362w, https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons.png?w=122 122w, https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons.png?w=243 243w" sizes="(max-width: 362px) 100vw, 362px" /></p> <p>The database column value is Y or N (J or N for German databases). In the past I rendered such columns using images that had a name, where the column value could be appended to, for example IconCheckbox_Y.png. In Apex 5 the same is possible using icon classes.</p> <h2>1) add an alias for Font-Awesome Icons</h2> <p>This little css will create two aliases for the <strong>fa-check</strong> and the <strong>fa-remove</strong> icons. And it will give them a default color.</p> <pre class="brush: css; light: true; title: ; notranslate"> .syn-check-J:before,.syn-check-Y:before { content: &quot;\f00c&quot;; color: green; } .syn-check-N:before { content: &quot;\f00d&quot;; color: #ff3a30; /* color: red; */ }</pre> <p>If you want to know the content code for a different icon you can search in the fontAwesome.min.css file or have a look at some &#8220;cheatsheet&#8221; pages like this one here: <a href="http://astronautweb.co/snippet/font-awesome/" rel="nofollow">http://astronautweb.co/snippet/font-awesome/</a></p> <p>If we would add another attribute:</p> <pre class="brush: css; light: true; title: ; notranslate"> font-family:fontAwesome; </pre> <p>then we could use the icon even without the &#8220;leading&#8221; fa class.<br /> I do not recommend this! Remember in Apex 5.1 we have two icon fonts to choose from &#8211; FontAwesome OR Font-Apex. Adding the font-family would prevent switching the icons.</p> <h2>2) html expression to set the class</h2> <p>And then use a normal text field with a html expression.<br /> Html expressions are available for classic reports, but also for interactive reports and interactive grids.</p> <pre class="brush: xml; light: true; title: ; notranslate"> &lt;span class=&quot;fa fa-lg syn-check-#COL1#&quot; alt=&quot;#COL1#&quot;&gt;&lt;/span&gt; </pre> <p>Our new classes still can be combined with other font-awesome styles. Here I enlarged them a little bit by adding the &#8220;fa-lg&#8221; class.</p> <p>The good thing about an html expression is, that the field value still is the original value. So we can use the interactive report column filters on this value and an export to csv will not add any html tags. This solution is SOC conform. The database query will not bother with the representation of the values.</p> <p><img data-attachment-id="4851" data-permalink="https://svenweller.wordpress.com/2017/03/29/apex-5-yn-icons/apex5_yn_icons_filter/" data-orig-file="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_filter.png?w=809" data-orig-size="370,288" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="apex5_YN_icons_filter" data-image-description="" data-medium-file="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_filter.png?w=809?w=300" data-large-file="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_filter.png?w=809?w=370" class="alignnone size-full wp-image-4851" src="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_filter.png?w=809" alt="apex5_YN_icons_filter" srcset="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_filter.png 370w, https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_filter.png?w=150 150w, https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_filter.png?w=300 300w" sizes="(max-width: 370px) 100vw, 370px" /></p> <p>Quick. Easy. Useful.</p> <h2>How does it work in 5.1 with Interactive grids?</h2> <p>IGs are slightly different. Especially if they are editable. We can not simply add the icon to a text column. Instead we have a <strong>new column type</strong> HTML EXPRESSION. In that we can reference a different column.</p> <p>Here is an example from the Interactive Grid Sample Application (Page 30, Base Edit). The emp table has a column ONLEAVE and holds Y and N values. <img data-attachment-id="4915" data-permalink="https://svenweller.wordpress.com/2017/03/29/apex-5-yn-icons/apex5_yn_icons_ig_column2/" data-orig-file="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_ig_column2.png?w=809" data-orig-size="239,364" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="apex5_YN_icons_IG_column2" data-image-description="" data-medium-file="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_ig_column2.png?w=809?w=197" data-large-file="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_ig_column2.png?w=809?w=239" src="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_ig_column2.png?w=809" alt="apex5_YN_icons_IG_column2" class="alignnone size-full wp-image-4915" srcset="https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_ig_column2.png 239w, https://svenweller.files.wordpress.com/2017/03/apex5_yn_icons_ig_column2.png?w=98 98w" sizes="(max-width: 239px) 100vw, 239px" /></p> <p>The substitution syntax for IG columns does not use # anymore. Instead the expression will look like below. The column value from ONLEAVE is substituted. </p> <pre class="brush: xml; light: true; title: ; notranslate"> &lt;span class=&quot;fa syn-check-&amp;ONLEAVE.&quot;&gt;&amp;ONLEAVE.&lt;/span&gt; </pre> <p>We now face an additional obstacle. The ONLEAVE column is a switch. The switch component will translate Y into Yes and N into No. Our new second column recieves that translated value. We could either add an additional hidden column to the select and referece that one or we can extend our css aliases. Because the switch component look pretty useful, it seems better to include its outcome to the css.</p> <pre class="brush: css; light: true; title: ; notranslate"> .syn-check-J:before,.syn-check-Y:before,.syn-check-Yes:before { content: &quot;\f00c&quot;; color: green; } .syn-check-N:before,.syn-check-No:before { content: &quot;\f00d&quot;; color: #ff3a30; /* color: red; */ }</pre> <p>And here is how the result looks like:<br /> <img data-attachment-id="4916" data-permalink="https://svenweller.wordpress.com/2017/03/29/apex-5-yn-icons/apex5_ynicon_ig_column/" data-orig-file="https://svenweller.files.wordpress.com/2017/03/apex5_ynicon_ig_column.png?w=809" data-orig-size="314,234" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Apex5_YNIcon_IG_column" data-image-description="" data-medium-file="https://svenweller.files.wordpress.com/2017/03/apex5_ynicon_ig_column.png?w=809?w=300" data-large-file="https://svenweller.files.wordpress.com/2017/03/apex5_ynicon_ig_column.png?w=809?w=314" src="https://svenweller.files.wordpress.com/2017/03/apex5_ynicon_ig_column.png?w=809" alt="Apex5_YNIcon_IG_column" class="alignnone size-full wp-image-4916" srcset="https://svenweller.files.wordpress.com/2017/03/apex5_ynicon_ig_column.png 314w, https://svenweller.files.wordpress.com/2017/03/apex5_ynicon_ig_column.png?w=150 150w, https://svenweller.files.wordpress.com/2017/03/apex5_ynicon_ig_column.png?w=300 300w" sizes="(max-width: 314px) 100vw, 314px" /></p> <p>As you can see the icons look more delicate than before. This is because the sample application uses Font Apex and not Font Awesome anymore.</p> <h2>Example using images</h2> <p>And sometimes we still want an image. Maybe because there is no fitting icon in our font or maybe because the users insist on keeping the old images. This can also be done with css classes. However some more attributes are needed.</p> <p>Here is an example without further explaination.</p> <pre class="brush: css; light: true; title: ; notranslate"> .syn-checkImg-J,.syn-checkImg-Y { background-image:url(&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/0/03/Green_check.svg/240px-Green_check.svg.png&quot;); background-repeat: no-repeat; background-origin: padding-box; background-size: 20px 20px; padding:0 20px; } .syn-checkImg-N { background-image:url(&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/X_mark.svg/210px-X_mark.svg.png&quot;); background-repeat: no-repeat; background-origin: padding-box; background-size: 20px 20px; padding:0 20px; }</pre> <p>It works with DIVs and SPAN tags.<br /> And I created a jsfiddle where you can test it out for yourself.<br /> <a href="https://jsfiddle.net/1n6s4y3j/" rel="nofollow">https://jsfiddle.net/1n6s4y3j/</a></p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/svenweller.wordpress.com/4833/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/svenweller.wordpress.com/4833/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=svenweller.wordpress.com&#038;blog=24902459&#038;post=4833&#038;subd=svenweller&#038;ref=&#038;feed=1" width="1" height="1" /> svenweller http://svenweller.wordpress.com/?p=4833 Wed Mar 29 2017 17:33:24 GMT-0400 (EDT) A Review of Interactive Grid in APEX 5.1.1 http://www.explorer-development.uk.com/review-interactive-grid-apex-5-1-1/ <p>A Review of Interactive Grid in APEX 5.1.1 This blog has been a long time in the making… Of course before writing a blog on any subject, you have to do your research. In my case, my research involved creating dozens (maybe in to the 100s) of Interactive Grids (IG) and writing a new Explorer</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/review-interactive-grid-apex-5-1-1/">A Review of Interactive Grid in APEX 5.1.1</a> appeared first on <a rel="nofollow" href="http://www.explorer-development.uk.com">Oracle Application Express (APEX) Consultants, developers and APEX training courses UK</a>.</p> Explorer Development UK http://www.explorer-development.uk.com/?p=4227 Wed Mar 29 2017 10:41:30 GMT-0400 (EDT) Frequent APEX questions http://www.grassroots-oracle.com/2017/03/frequent-apex-questions.html I've put a call out on the <a href="https://community.oracle.com/message/14292682">OTN APEX forum</a> asking for suggestions from the community on what they think are frequent APEX questions, be it within the forum or elsewhere.<br /><br />In part, I'm chasing ideas for content in future presentations, or blog posts. I welcome others to do the same. I think if we share our perception of common questions, better resources will come.<br /><br /><b>So please, feel free to contribute in any way, shape, or form.</b><br /><br /><i>What questions do you see or hear </i>all <i>the time?</i><br /><br />If for some bizarre reason you don't have an Oracle account for the OTN forum, just reply to this post, ... then register an account. It covers you for the forums, <a href="http://livesql.oracle.com/">livesql.oracle.com</a>, the <a href="http://devgym.oracle.com/" target="_blank">Dev Gym</a>, entitles you to download stuff like SQL Developer, and no doubt more.<br /><br />Though probably no steak knives.<br /><br /><div class="separator" style="clear: both; text-align: center;"><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-n-TULKP5JGs/WNusFuRR3LI/AAAAAAAAQvk/ahrEVdUowf0jPgKx_ONKG0DA9_aQXWTDwCLcB/s1600/good_Questions.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://2.bp.blogspot.com/-n-TULKP5JGs/WNusFuRR3LI/AAAAAAAAQvk/ahrEVdUowf0jPgKx_ONKG0DA9_aQXWTDwCLcB/s640/good_Questions.jpg" width="451" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><a href="http://geek-and-poke.com/geekandpoke/2016/11/27/good-questions" target="_blank">Geek &amp; Poke</a></td></tr></tbody></table></div> Scott Wesley tag:blogger.com,1999:blog-4818542164384221282.post-3104460901893692845 Wed Mar 29 2017 09:03:00 GMT-0400 (EDT) Take a few minutes to patch Oracle APEX 5.1 http://dgielis.blogspot.com/2017/03/take-few-minutes-to-patch-oracle-apex-51.html <div class="separator" style="clear: both; text-align: left;">Yesterday a first <a href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/apex-511-patch-set-notes-3661846.html">patch set</a> of Oracle Application Express (<a href="https://apex.oracle.com/">APEX</a>) 5.1 has been made available to <a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html">download</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><b>one-of patches</b></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">If you encounter issues, you can ask for support and most likely a bit later a patch is made available through support.oracle.com. The APEX team is doing a great job with this.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">For example some people using <a href="https://www.apexofficeprint.com/">APEX Office Print</a> had an issue which was caused by a bug in APEX_JSON (which we heavily use behind the scenes). The next day the APEX Dev Team already made a patch available (PSE 25650850).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><b>patch set</b></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Instead of applying those one-off patches, you can wait for a patch set which includes those one-off patches and more. If you didn't move to Oracle APEX 5.1 yet, you can just download the latest version which includes 5.1.1 immediately.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">There're many fixes for the Interactive Grid features, but next to that, many others as well, like for example login issues.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><b>applying the patch set</b></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">If you're on Oracle APEX 5.1, search for patch 25341386. Unzip the file, stop the webserver, run @apxpatch, copy the images folder and start the webserver again.</div><div class="separator" style="clear: both;">About 2 minutes later you're on the latest version.&nbsp;</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-_oNmg0K4Vus/WNuqyKYsaGI/AAAAAAAAIq8/05EBQDlP-2MeNf5pQYF0uYfSgqJA8pvbgCLcB/s1600/Screen%2BShot%2B2017-03-29%2Bat%2B00.26.55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://1.bp.blogspot.com/-_oNmg0K4Vus/WNuqyKYsaGI/AAAAAAAAIq8/05EBQDlP-2MeNf5pQYF0uYfSgqJA8pvbgCLcB/s400/Screen%2BShot%2B2017-03-29%2Bat%2B00.26.55.png" width="400" /></a></div><br /><div>Happy patching...</div> Dimitri Gielis tag:blogger.com,1999:blog-21122514.post-2882161580021892219 Wed Mar 29 2017 09:00:00 GMT-0400 (EDT) Make Radio Group look like UT Buttons http://www.grassroots-oracle.com/2017/03/oracle-apex-radio-group-universal-theme-button.html It's pretty easy to convert links in APEX reports to use the Universal Theme button look &amp; feel, as I described here<br /><br /><a href="http://www.grassroots-oracle.com/2015/12/tutorial-include-action-button-in-report.html">http://www.grassroots-oracle.com/2015/12/tutorial-include-action-button-in-report.html</a><br /><br />We can apply the same technique to radio groups, but it requires a little more work than just adding some classes, but nothing like jQuery mobile <a href="http://www.danielmcghan.us/2012/02/radio-buttons-and-jquery-mobile.html">radio fiddles</a>.<br /><br />It took me a few goes to get the correct string in the correct APEX attribute to make the individual buttons look &amp; behave the way I imagined, so I thought I'd share the journey. Show my working, so to speak.<br /><br />First, create a radio item:<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-4dcDfyJ-0D0/WNuppu-HMbI/AAAAAAAAQvY/nRkoiEu16BYvKgNOvNLlKrNAScHDbgN5ACLcB/s1600/radios.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="388" src="https://3.bp.blogspot.com/-4dcDfyJ-0D0/WNuppu-HMbI/AAAAAAAAQvY/nRkoiEu16BYvKgNOvNLlKrNAScHDbgN5ACLcB/s640/radios.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">A humble radio group</td></tr></tbody></table><br />Then set 'Option HTML attributes' to add template option classes, just like I did for the report action buttons. This applies the string to each option, rather than the entire item.<br /><br /><code>class="t-Button t-Button--simple"</code><br /><br />If we check the page, the radio group should have button boxes surrounding the text labels.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-VjERcKszV5k/WJqZ9Jr0mSI/AAAAAAAAQow/Zg9JogNRPNEF-yA7mYhVUUv8fZD4I6FBgCLcB/s1600/radio_button1.png" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-VjERcKszV5k/WJqZ9Jr0mSI/AAAAAAAAQow/Zg9JogNRPNEF-yA7mYhVUUv8fZD4I6FBgCLcB/s1600/radio_button1.png" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Radio group with button class</td></tr></tbody></table><br /><br />To work out what CSS selector I needed to hide those radio buttons, I used Chrome's Inspect element tool (right click a radio button) so I can see how the HTML is constructed.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-9y_nIk81bSg/WJqZ9fGRumI/AAAAAAAAQo0/NaBJdooFR_IYlU2UB6dj--GI6F2DM8YXACLcB/s1600/radio_button2.png" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-9y_nIk81bSg/WJqZ9fGRumI/AAAAAAAAQo0/NaBJdooFR_IYlU2UB6dj--GI6F2DM8YXACLcB/s640/radio_button2.png" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Inspect Element is the best browser tool. The best.</td></tr></tbody></table><br />One shared property for each item is how the input tag has type=radio.<br />Further up you can see the entire fieldset as an id of P47_RADIO, our item.<br />Combine these to identify any radio buttons within this specific item.<br /><br />Edit page 'Inline CSS' to using this combined CSS selector, with a property to hide any web component identified with that selector.<br /><br /><code>#P47_RADIO input[type=radio] {display:none;}</code><br /><br />This tidies the button group, trouble is, &nbsp;the current selection is unknown without the native radio button. This can be solved by creating a dynamic action that toggles button classes upon click of each radio item.<br /><br />Create dynamic action on click of jQuery selector<br /><br /><code>#P47_RADIO span.t-Button</code><br /><br />Add action to Execute JavaScript<br /><pre class="brush:javascript">// add simple class to all options<br />$('#P47_RADIO span.t-Button').addClass('t-Button--simple');<br />// remove from current selection<br />$(this.triggeringElement).removeClass('t-Button--simple');</pre>The result:<br /><br /><a href="https://1.bp.blogspot.com/-amNqwOFVD2E/WJqZ-rtbhkI/AAAAAAAAQo4/L9Mz2QryGGI1tnoNwo-q0xcZvGfzpXR1ACLcB/s1600/radio_group.gif"><img border="0" src="https://1.bp.blogspot.com/-amNqwOFVD2E/WJqZ-rtbhkI/AAAAAAAAQo4/L9Mz2QryGGI1tnoNwo-q0xcZvGfzpXR1ACLcB/s320/radio_group.gif" /></a><br /><br />In my case the <code>t-Button--simple</code> template option is removed from the current selection, but you can play with these options to choose a combination that suits your <a href="http://www.grassroots-oracle.com/2015/08/apex-5-colour-contrast.html">desired contrast</a>, using the various colours:<br /><br /><code>t-Button--danger<br />t-Button--warning<br />t-Button--success<br />t-Button--primary</code><br /><br />Or "hotness", a highlight:<br /><code>t-Button--hot</code><br /><br />Or contrast, well, not highlighting the entire button:<br /><code>t-Button--simple</code><br />All demonstrated in the button builder reference in the <a href="https://apex.oracle.com/pls/apex/f?p=42:6100" target="_blank">Universal Theme app</a>.<br /><br />You can achieve consistent button width by adding this to your Inline CSS:<br /><code>#P47_RADIO t-Button {width: 100px;}</code><br />After your page loads, you can use the inspect element tool and increase the width 'live', to find a figure/unit that works for you.<br /><br />Now we need to ensure this selection is defaulted when the page opens. I prefer to execute the click() event as to simulate the actual action, as opposed to replicating the relevant addClass() function.<br /><br />You can use a similar technique to conditionally hide a specific radio button in the group (though you still need to validate the availability to&nbsp;the user on the database end.)<br /><br />Add this to your 'Execute when page loads' page attribute, instead of adding a Default Value the item itself.<br /><br /><code>$('#P47_RADIO input[value=P]').next().click()</code><br /><br />Where the value=P represents the relevant radio item value. The .next() moves selection to the next sibling, which is the span element, where click is triggered.<br /><br />Or you could consider this <a href="https://github.com/isabolic/apex-plg-button-group">button group</a> plugin.<br /><br />Or in APEX 5.1 you can use the <a href="http://b-apex.blogspot.com.au/2017/02/new-look-feel-for-radio-group-in-oracle.html" target="_blank">pill template option</a>.<br /><br />Or you could use some form of List template button group.<br /><br />Or you can stick with tiny buttons only people using a mouse on a desktop PC can hope to aim for.<br /><br />One of the beauties of Oracle APEX - so many options.<br /><br />Happy APEXing! Scott Wesley tag:blogger.com,1999:blog-4818542164384221282.post-6017734855627226944 Wed Mar 29 2017 08:30:00 GMT-0400 (EDT) Apex 5.1.1 released http://oraclequirks.blogspot.com/2017/03/apex-511-released.html Byte64 tag:blogger.com,1999:blog-18037024.post-1692323364295096304 Wed Mar 29 2017 03:53:00 GMT-0400 (EDT) Oracle Application Express 5.1.1 now available http://joelkallman.blogspot.com/2017/03/oracle-application-express-511-now.html Just in time for <a href="https://www.ogh.nl/page.aspx?event=361" target="_blank">APEX World 2017</a>, Oracle Application Express 5.1.1 is now released and available for download. &nbsp;If you wish to download the full release of Oracle Application Express 5.1.1, you can get it from the <a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html" target="_blank">Downloads page</a> on OTN. &nbsp;If you have Oracle Application Express 5.1 already installed, then you need to download the APEX 5.1.1 patch set from <a href="https://support.oracle.com/" target="_blank">My Oracle Support</a>. &nbsp;Look up patch number 25341386.<br /><br />As is stated in the Patch Set Note that accompanies the Oracle Application Express 5.1.1 patch set:<br /><ul><li>If you have Oracle Application Express release 5.1 installed, download the Oracle Application Express 5.1.1 patch set from My Oracle Support and apply it. &nbsp;Remember - patch number 25341386.</li><li>If you have Oracle Application Express release 5.0.4 or earlier installed, download and install the entire Oracle Application Express 5.1.1 release from the Oracle Technology Network (OTN).</li><li>If you do not have Oracle Application Express installed, download and install the entire Oracle Application Express 5.1.1 release from the Oracle Technology Network (OTN).</li></ul><br />As usual, there are a large number of issues corrected in the Application Express 5.1.1 patch set (over 106!). &nbsp;You can see the full list in the <a href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/apex-511-patch-set-notes-3661846.html" target="_blank">5.1.1 Patch Set Notes</a>.<br /><ol></ol> Joel R. Kallman tag:blogger.com,1999:blog-12214002.post-4565179430079901013 Tue Mar 28 2017 17:18:00 GMT-0400 (EDT) Customize your Interactive Report with CSS http://www.apex-at-work.com/2017/03/customize-your-interactive-report-with.html <a href="https://2.bp.blogspot.com/-eOAMyt6nW94/WNqG8x_lTFI/AAAAAAAABso/zQzkmxRVyUwLpxE9NAxev5LovrIkC-prgCLcB/s1600/CSS3_logo_and_wordmark.svg.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://2.bp.blogspot.com/-eOAMyt6nW94/WNqG8x_lTFI/AAAAAAAABso/zQzkmxRVyUwLpxE9NAxev5LovrIkC-prgCLcB/s200/CSS3_logo_and_wordmark.svg.png" width="141" /></a>A lot of you are using jQuery to customize visual parts of an APEX application. I probably to often do so myself but there is a much more elegant way:&nbsp;&nbsp; <span style="font-size: large;"><b>CSS</b></span><br /><br />Nowadays you are able to add different kind of rules into your CSS styles. In this example I will show you how to get into the topic by changing an Interactive Report (IR). In my example I want to change the typical group by visualization.<br /><br /><br />Before<br /><a href="http://4.bp.blogspot.com/-xJIg3B0vM0A/WNUlX8b5UaI/AAAAAAAABsE/IzIAAnykdXYxgENXkqZ6nklMLv73CnOqgCK4B/s1600/Willkommen_bei_NeT-FIT_-_NeT-FIT%2B2.png" imageanchor="1"><img border="0" height="148" src="https://4.bp.blogspot.com/-xJIg3B0vM0A/WNUlX8b5UaI/AAAAAAAABsE/IzIAAnykdXYxgENXkqZ6nklMLv73CnOqgCK4B/s640/Willkommen_bei_NeT-FIT_-_NeT-FIT%2B2.png" width="640" /></a><br /><br />After<br /><a href="http://1.bp.blogspot.com/-ciOE_I_KnC8/WNUm5Uh89rI/AAAAAAAABsQ/fYh852pRH2UZT5RsifjySFHhWJivQJBoACK4B/s1600/Willkommen_bei_NeT-FIT_-_NeT-FIT%2B3.png" imageanchor="1"><img border="0" height="146" src="https://1.bp.blogspot.com/-ciOE_I_KnC8/WNUm5Uh89rI/AAAAAAAABsQ/fYh852pRH2UZT5RsifjySFHhWJivQJBoACK4B/s640/Willkommen_bei_NeT-FIT_-_NeT-FIT%2B3.png" width="640" /></a><br /><br />First of all you need to give your IR a unique name or class to identify it properly.<br />IR &gt; Appearance &gt; CSS Classes: <b>irCustomStyles</b> <br /><br /><a href="http://2.bp.blogspot.com/-wd01lXnB6m0/WNUksec19oI/AAAAAAAABr4/Jw9tr9CcN6sUwPsYdy2lPbhEspRl6wc9QCK4B/s1600/Page_Designer_und_Change_Tool_GUI__so_.png" imageanchor="1"><img border="0" height="157" src="https://2.bp.blogspot.com/-wd01lXnB6m0/WNUksec19oI/AAAAAAAABr4/Jw9tr9CcN6sUwPsYdy2lPbhEspRl6wc9QCK4B/s400/Page_Designer_und_Change_Tool_GUI__so_.png" width="400" /></a><br /><br />Now you need to add the customized CSS code in your page:<br />Page &gt; CSS &gt; Inline<b> </b><br /><br /><pre class="css" name="code">.irCustomStyles .a-IRR-table td {<br /> border-top: 0 solid #ffffff !important;<br />}<br /><br />.irCustomStyles table.a-IRR-table th:first-child.a-IRR-header:not(.a-IRR-header--group) {<br /> background-color: white !important;<br />}<br /><br />.irCustomStyles table.a-IRR-table tr:has( .a-IRR-header ) {<br /> border-bottom: medium none white !important;<br /> border-top: medium none white !important;<br />}<br /></pre><br />1. Rule: Takes the border from the TD elements away. Standard CSS probably most of you have done like this before.&nbsp; <br />2. Rule: This one changes only the first TH element and when they are not referenced with class ".a-IRR-header--group"<br />3. Rule: The "has"-clause only applies if the result is true. In this case if a class called "a-IRR-header" exists.<br /><br />Fore more details check those sources:<br /><a href="https://css-tricks.com/almanac/selectors/n/not/">:not(s) - By Sara Cope</a><br /><a href="https://webdesign.tutsplus.com/tutorials/selecting-parent-elements-with-css-and-jquery--cms-26423">Selecting Parent Elements with CSS and jQuery - by Thoriq Firdaus</a> Tobias Arnhold tag:blogger.com,1999:blog-6481483192141562388.post-5433574766346807676 Tue Mar 28 2017 11:48:00 GMT-0400 (EDT) AJAX programming in Application Express: Are you still using htmldb_Get? https://blogs.oracle.com/apex/entry/ajax_programming_in_application_express <div> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"></font><img src="https://blogs.oracle.com/apex/resource/logo-apex-ajax.png" alt="Implementing AJAX in Application Express" align="left" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">Sending requests to the server and changing contents of an Application Express page dynamically, using AJAX and Javascript, is pretty normal for most APEX developers. In practice, over the years, several different approaches developed for these requirements. And especially in older applications, we often find the <strike>htmldb_Get</strike> Javascript function being used.&nbsp;</font></p> </div> <div> <p><font face="tahoma, arial, helvetica, sans-serif" size="2">In the latest Application Express Release 5.1, <strike>htmldb_Get</strike> has been formally desupported (<a href="http://docs.oracle.com/database/apex-5.1/HTMRN/toc.htm#HTMRN-GUID-A0FAE07F-1260-462B-8A7F-BE99C4B123AA" target="_blank" title="APEX 5.1 Release Notes">Release Notes</a>); but actually this function was never documented. So it's time to get rid of <strike>htmldb_Get</strike> in applications. </font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/3341/index-en.html" target="_blank" title="Application Express Tips and Tricks: Implementing AJAX with Application Express">In our latest issue</a>, we introduce a simple AJAX requirement and show how this can be implemented either declaratively with Dynamic Actions or programmatically with Javascript code and documented APIs.</font></p> </div> <div><br /></div> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/ajax_programming_in_application_express Tue Mar 28 2017 09:20:04 GMT-0400 (EDT) AJAX programming in Application Express: Are you still using htmldb_Get? https://blogs.oracle.com/apex/entry/ajax_programming_in_application_express <div> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"></font><img src="https://blogs.oracle.com/apex/resource/logo-apex-ajax.png" alt="Implementing AJAX in Application Express" align="left" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">Sending requests to the server and changing contents of an Application Express page dynamically, using AJAX and Javascript, is pretty normal for most APEX developers. In practice, over the years, several different approaches developed for these requirements. And especially in older applications, we often find the <strike>htmldb_Get</strike> Javascript function being used.&nbsp;</font></p> </div> <div> <p><font face="tahoma, arial, helvetica, sans-serif" size="2">In the latest Application Express Release 5.1, <strike>htmldb_Get</strike> has been formally desupported (<a href="http://docs.oracle.com/database/apex-5.1/HTMRN/toc.htm#HTMRN-GUID-A0FAE07F-1260-462B-8A7F-BE99C4B123AA" target="_blank" title="APEX 5.1 Release Notes">Release Notes</a>); but actually this function was never documented. So it's time to get rid of <strike>htmldb_Get</strike> in applications. </font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/3341/index-en.html" target="_blank" title="Application Express Tips and Tricks: Implementing AJAX with Application Express">In our latest issue</a>, we introduce a simple AJAX requirement and show how this can be implemented either declaratively with Dynamic Actions or programmatically with Javascript code and documented APIs.</font></p> </div> <div><br /></div> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/ajax_programming_in_application_express Tue Mar 28 2017 09:20:04 GMT-0400 (EDT) License compliance is not easy http://www.explorer-development.uk.com/license-compliance/ <p>Certified Oracle Compliance Over the last decade or so, countless Oracle customers have experienced license issues by falling foul of Oracle’s ‘trust model’, complex licensing metrics and how Oracle’s policies affect third party technologies. As a result of this, numerous companies have setup ‘license consultancy’ practices and developing SAM tools suggesting they can provide a</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/license-compliance/">License compliance is not easy</a> appeared first on <a rel="nofollow" href="http://www.explorer-development.uk.com">Oracle Application Express (APEX) Consultants, developers and APEX training courses UK</a>.</p> Explorer Development UK http://www.explorer-development.uk.com/?p=4167 Tue Mar 28 2017 05:38:26 GMT-0400 (EDT) AJAX in APEX-Anwendungen: Wer nutzt noch htmldb_Get? https://blogs.oracle.com/apexcommunity_deutsch/entry/ajax_programmierung_in_apex_anwendungen <p><span style="color: #222222; font-family: Arial, Verdana, sans-serif; font-size: 12px;"><img src="https://blogs.oracle.com/apexcommunity_deutsch/resource/logo-apex-ajax.png" width="150" align="right" hspace="15" vspace="10" />Der Umgang mit <strong>AJAX-Technologie</strong>, also dem Absetzen einer separaten HTTP-Abfrage und dem dynamischen Verändern der APEX-Seite, ist mittlerweile vielen vertraut. Allerdings zeigen sich in der Praxis recht unterschiedliche Wege, AJAX umzusetzen.&nbsp;</span><span style="color: #222222; font-family: Arial, Verdana, sans-serif; font-size: 12px;">In vielen älteren Anwendungen, und auch in vielen Blog Postings, findet sich immer noch die Javascript-Funktion&nbsp;</span><span class="boldbodycopy" style="color: #222222; font-family: Arial, Verdana, sans-serif; font-size: 12px; text-decoration-line: line-through;">htmldb_Get</span><span style="color: #222222; font-family: Arial, Verdana, sans-serif; font-size: 12px;">. </span></p> <p><span style="color: #222222; font-family: Arial, Verdana, sans-serif; font-size: 12px;">Diese wurde im jüngsten APEX Release 5.1 aus dem Support genommen (<a href="http://docs.oracle.com/database/apex-5.1/HTMRN/toc.htm#HTMRN-GUID-A0FAE07F-1260-462B-8A7F-BE99C4B123AA" target="_blank" title="APEX 5.1 Release Notes">Release Notes</a>) - und streng genommen war sie noch nie wirklich dokumentiert. Wie man es auch nimmt, es ist höchste Zeit, sich von&nbsp;</span><span style="color: #222222; font-family: Arial, Verdana, sans-serif; font-size: 12px; text-decoration-line: line-through;">htmldb_Get</span><span style="color: #222222; font-family: Arial, Verdana, sans-serif; font-size: 12px;">&nbsp;zu verabschieden. </span><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/3341/index.html" target="_blank" title="Zum Community-Tipp" style="font-family: Arial, Verdana, sans-serif; font-size: 12px;">Dieser Community-Tipp</a><span style="color: #222222; font-family: Arial, Verdana, sans-serif; font-size: 12px;">&nbsp;stellt eine AJAX-Problemstellung und aktuelle Lösungsansätze dazu vor. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span></p> Carsten Czarski-Oracle https://blogs.oracle.com/apexcommunity_deutsch/entry/ajax_programmierung_in_apex_anwendungen Tue Mar 28 2017 02:00:00 GMT-0400 (EDT) 5 Oracle EBS & APEX Sessions to Attend at COLLABORATE 17 https://www.insum.ca/oracle-ebs-apex-sessions-to-attend-at-collaborate-17/ <h1>5 Oracle EBS &amp; APEX Sessions to Attend at COLLABORATE 17</h1> <p>We’re excited to be heading to <a href="http://collaborate.oaug.org/">COLLABORATE 17: Technology and Applications Forum for the Oracle Community</a> on April 2-6, 2017.</p> <p><img class="alignnone size-full wp-image-7526" src="https://www.insum.ca/wp-content/uploads/2017/03/collabroate17-logo.png" alt="collabroate17 ebs-apex" width="600" height="150" srcset="https://www.insum.ca/wp-content/uploads/2017/03/collabroate17-logo.png 600w, https://www.insum.ca/wp-content/uploads/2017/03/collabroate17-logo-300x75.png 300w, https://www.insum.ca/wp-content/uploads/2017/03/collabroate17-logo-450x113.png 450w" sizes="(max-width: 600px) 100vw, 600px" /></p> <p>COLLABORATE is one of our favorite conferences of the year. The week is filled with people from all industries and technologies; it’s truly a great space to share ideas and learn from each other.</p> <p>At Insum, we are passionate about Oracle Application Express (APEX), and particularly in <a href="https://www.insum.ca/top-reasons-use-oracle-apex-to-build-ebs-extensions/">using APEX to customize Oracle E-Business Suite (EBS)</a>.  We presented two sessions last year on using APEX to build EBS extensions: <a href="https://www.insum.ca/portfolio/ebs-apex-webinar/">60 Minute APEX Extension for EBS</a> &amp; <a href="https://www.insum.ca/portfolio/ebs-reports-dashboards-for-the-people/">EBS Reports and Dashboards for the People &amp; by the People</a>. We’re looking forward to presenting even more sessions this year &#8211; see details below.</p> <p>During this year’s conference, we’re offering complimentary <a href="http://info.insum.ca/book-ebs-expert-collaborate-17">30 minute consultations with our EBS-APEX experts.</a> If you want to meet one-on-one, reserve your spots before they fill up!</p> <p>We’ll be at the Exhibitor Showcase at booth 1452, so please swing by our booth to say hello.  And, if you’re interested in using APEX to build EBS extensions, ask us about our recently launched “<a href="https://www.insum.ca/e-business-suite-oracle-apex-package/">UP and Running with APEX and EBS</a>” package, and also find out about our free <a href="http://info.insum.ca/insum-ebs-apex-integration-package">EBS Integration package download</a>.</p> <p><img class="alignnone size-vntd-sidebar-auto wp-image-7528" src="https://www.insum.ca/wp-content/uploads/2017/03/ebs-apex-booth-880x660.jpg" alt="ebs-apex-booth" width="880" height="660" srcset="https://www.insum.ca/wp-content/uploads/2017/03/ebs-apex-booth-880x660.jpg 880w, https://www.insum.ca/wp-content/uploads/2017/03/ebs-apex-booth-300x225.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/03/ebs-apex-booth-768x576.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/03/ebs-apex-booth-1024x768.jpg 1024w, https://www.insum.ca/wp-content/uploads/2017/03/ebs-apex-booth-450x338.jpg 450w, https://www.insum.ca/wp-content/uploads/2017/03/ebs-apex-booth.jpg 1200w" sizes="(max-width: 880px) 100vw, 880px" /></p> <p>COLLABORATE 17 creates community of helpful people all with innovative ideas to optimize your Oracle applications. Some of the brightest Oracle minds from around the globe come to Las Vegas to present their sessions. A few from Insum will be among that group and showcasing their E-Business Suite and Oracle Application Express knowledge. We’re looking forward to their sessions!</p> <p>&nbsp;</p> <h2><a href="https://app.attendcollaborate.com/event/member/317629">When Oracle Web Applications Desktop Integrator meet Application Express</a></h2> <p><strong>Speakers:</strong> Patrick Cimolini and Sylvain Martel</p> <p><strong>Abstract:</strong> Oracle Web Application Desktop Integrator is being used by every organization using Oracle E-Business Suite. Users like the flexibility of uploading various type of transactions using Excel. Issues arise often with Excel version, Windows regional settings and countless other variables to make your life miserable. This session will show you how Oracle Application Express can be used to replace Excel or facilitate the upload of your data and transactions into Oracle E-Business Suite.</p> <ol> <li>Understand the differences between Oracle Web Applications Desktop Integrator and Application Express</li> <li>Demonstrate how to drag and drop Excel files into an Application Express screen</li> <li>Demonstrate how to replace Web Application Desktop Integrator with Application Express</li> </ol> <p>&nbsp;</p> <h2><a href="https://app.attendcollaborate.com/event/member/317627">Accessible single sign-on integration between Oracle E-Business Suite and Application Express</a></h2> <p><strong>Speaker:</strong> Sylvain Martel and Anton Nielsen</p> <p><strong>Abstract:</strong> This advanced technical session reviews a fully functional Oracle Application Express extension for Oracle E-Business Suite which was previously created. We will walk through the open source code that offer single sign-on authentication between Oracle E-Business Suite and Application Express using an open source single sign-on engine and an integration package. Attendees will learn how to use the integration package to set an Application Express applications in the context of Oracle E-Business Suite, including profile options, multi-org, and language support.</p> <ol> <li>Describe the components to integrate Oracle E-Business Suite and Application Express context</li> <li>Understand how to configure the single sign-on engine</li> <li>Understand the integration package to set the Oracle E-Business Suite context in Application Express</li> <li>Describe the best practices for creating Application Express extensions</li> </ol> <p>&nbsp;</p> <h2><a href="https://app.attendcollaborate.com/event/member/317626">The 60 minute Oracle Application Express extension for Oracle E-Business Suite</a></h2> <p><strong>Speakers:</strong> Patrick Cimolini and Sylvain Martel</p> <p><strong>Abstract:</strong> This 60 minute session will give you 60 great reasons to use Oracle Application Express the next time you want to create an extension with Oracle E-Business Suite. That’s because 60 minutes is all it takes to create a fully functional extension. You will see the explicit steps required to integrate Oracle Application Express with the Oracle E-Business Suite environment, including profile options, multi-org and language support. Time well spent!</p> <ol> <li>See the steps required to build an Oracle Application Express extension for Oracle E-Business Suite</li> <li>Demonstrate recreating the Oracle E-Business Suite context in Oracle Application Express</li> <li>Understand where Oracle Application Express is a good use case for Oracle E-Business Suite extension</li> <li>Get a link to free code that integrates Oracle Application Express with Oracle E-Business Suite.</li> </ol> <p>&nbsp;</p> <h2><a href="https://app.attendcollaborate.com/event/member/334614">Cloudy With a Chance of APEX</a></h2> <p><strong>Speaker:</strong> Francis Mignault</p> <p><strong>Abstract:</strong> In the past you used to have to buy servers and/or hosting services to manage your technology stack. Now there are numerous options which allow you to quickly and easily deploy your applications on the cloud. The tough part is deciding which cloud offering or tools to use.</p> <p>This session will cover the different cloud options available for your Oracle Application Express (APEX) applications for both Oracle Cloud and non-Oracle cloud providers such as Amazon AWS, and Microsoft Azure. Some of the cloud options use APEX as a add-on such as BI Cloud Service (BICS) will also be discussed.</p> <ol> <li>Match the available cloud options to your specific business needs.</li> <li>Understand APEX deployment and availability issues in the cloud</li> <li>Know what APEX Hosting services are available to you</li> </ol> <p>&nbsp;</p> <h2><a href="https://app.attendcollaborate.com/event/member/318817">The Cost of a Click &#8211; Designing an Efficient GUI</a></h2> <p><strong>Speaker:</strong> Patrick Cimolini</p> <p><strong>Abstract:</strong> The cost of a single mouse click can add up to thousands of dollars of wasted time annually for a large company. This presentation quantifies the cost of a click and estimates a financial break even point for the development effort that is required to eliminate mouse and keyboard clicks. The presentation uses Oracle Application Express to illustrate a number of design principles that can be used to optimize a Graphic User Interface (GUI); however, the general principles can be applied to other development technologies as well.</p> <ol> <li>Quantify the cost of a mouse click in your organization.</li> <li>Balance the cost of a click against the cost of eliminating the click.</li> <li>See a number of design patterns that can be used to make your end users more efficient.</li> </ol> <p>&nbsp;</p> <p>If you’re interesting in learning more about EBS and APEX now, visit our <a href="https://www.insum.ca/learn-apex/">APEX videos page</a> and watch some of recent webinars: <a href="https://www.insum.ca/portfolio/ebs-web-adi-replacement-oracle-apex/">EBS Web ADI Replacement: Oracle APEX</a> or <a href="https://www.insum.ca/portfolio/ebs-reports-dashboards-for-the-people/">EBS Reports and Dashboards for the People &amp; by the People</a>.</p> <p>See you in Las Vegas!</p> <p>The post <a rel="nofollow" href="https://www.insum.ca/oracle-ebs-apex-sessions-to-attend-at-collaborate-17/">5 Oracle EBS &#038; APEX Sessions to Attend at COLLABORATE 17</a> appeared first on <a rel="nofollow" href="https://www.insum.ca">Insum</a>.</p> Monty Latiolais https://www.insum.ca/?p=7523 Mon Mar 27 2017 18:51:58 GMT-0400 (EDT) Compile PL/SQL with VS Code using SSH https://ruepprich.wordpress.com/2017/03/27/compile-plsql-with-vs-code-using-ssh/ <p>First of all thanks to Morten Braten&#8217;s blog post <a href="http://ora-00001.blogspot.com/2017/03/using-vs-code-for-plsql-development.html?utm_source=dlvr.it&amp;utm_medium=twitter" target="_blank">Using VS Code for PL/SQL development</a>. I had been wanting to try this editor for a while but still felt loyal to Sublime.</p> <p>Morten described how to use <a href="https://code.visualstudio.com/" target="_blank">Visual Studio Code</a> for PL/SQL development, and how to use its task runner to compile your code via SQL*Plus. I would like to expand on this aspect and show how I used the task runner to compile code through an SSH tunnel via <a href="http://www.oracle.com/technetwork/developer-tools/sqlcl/overview/index.html" target="_blank">SQLcl</a>. I&#8217;m using a Mac, so you may have to do some adjustments for other operating systems.</p> <p>Basic requirements:</p> <ul> <li>SSH key to your database server</li> <li>SQLcl</li> <li>VS Code</li> </ul> <p>First I created an SQL file (<strong>bmc_login.sql</strong>) that will log my SQLcl session into my remote database via SSH:</p> <p>sshtunnel christoph@bmcdb -i /Users/cruepprich/bmc/bmc_key -L 8888:localhost:1521<br /> connect scott/tiger@localhost:8888/orcl</p> <p>For more information about how this works see <a href="https://t.co/z0ynYfOF6G" target="_blank">OraOpenSource</a>.</p> <p>Then I needed a shell script (<strong>compile_bmc.sh</strong>) that the task runner can execute:</p> <div> <pre>~/oracle/sqlcl/bin/sql -S /nolog @bmc_login &lt; </pre> </div> <div></div> <p>This file calls the SQLcl executable in silent mode (-S) without logging in (/nolog), and runs the bmc_login.sql to connect to the remote database. Then it executes the first command line argument ($1) which it will get from the task runner. Finally it will display any compilation errors and exit.</p> <p>The last thing to do is to configure the task runner in VS Code. Edit the tasks.json file and add the following task. Note that I&#8217;m showing an example with multiple tasks. The task of interest is the one named <strong>Compile in bmc</strong>.</p> <div></div> <div> <div> <pre>{     "version": "0.1.0",     "tasks": [         {             "taskName": "print hello",             "command": "echo",             "args": ["Hello"],             "isShellCommand": true         },         {             "taskName": "Compile in bmc",             "command": "/Users/cruepprich/sh/compile_bmc.sh",             "isShellCommand": true,             "args": ["${file}"]         }     ] }</pre> </div> <div> The ${file} argument refers to the file you are currently editing. So you want to make sure that you are editing a PL/SQL program and then you can run this task now from the VS Code Command Pallete:</div> <div><img data-attachment-id="2248" data-permalink="https://ruepprich.wordpress.com/2017/03/27/compile-plsql-with-vs-code-using-ssh/command-pallette/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/command-pallette.png?w=550" data-orig-size="612,92" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="command Pallette" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/command-pallette.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/command-pallette.png?w=550?w=550" class="alignnone size-full wp-image-2248" src="https://ruepprich.files.wordpress.com/2017/03/command-pallette.png?w=550" alt="command Pallette" srcset="https://ruepprich.files.wordpress.com/2017/03/command-pallette.png?w=550 550w, https://ruepprich.files.wordpress.com/2017/03/command-pallette.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/03/command-pallette.png?w=300 300w, https://ruepprich.files.wordpress.com/2017/03/command-pallette.png 612w" sizes="(max-width: 550px) 100vw, 550px" /></div> <div>You can also add a keyboard shortcut (ctrl-c) to run this task.</div> <pre> { "key": "ctrl+c", "command": "workbench.action.tasks.runTask", "args": "Compile in bmc" }</pre> </div> <p>Now I can edit PL/SQL programs in VS Code and compile them directly on my remote database via SSH tunnel.</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2203/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2203&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2203 Mon Mar 27 2017 09:04:49 GMT-0400 (EDT) (My current) Atom editor Oracle plugins http://apextips.blogspot.com/2017/03/my-atom-editor-oracle-plugins.html If you are an Oracle developer and use Atom text editor, here are some extensions that may make your development experience more pleasant.<br /><ul><li>language-oracle</li><li>build-oracle</li><li>autocomplete-oracle</li><li>(experimental/early) plsql-block</li></ul><h2>language-oracle</h2><div>This extension aims to provide the syntax highlighting into Atom. It was converted from a text mate bundle back in October 2015, with a few little tweaks here and there since.</div><div><br /></div><div>To install, open your settings dialog (ctrl+,), go to the Install node and search "language-oracle". The package should come up as the first result, so hit the install button.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-gszJbSnUeD0/WNg2qHNcuUI/AAAAAAAAH5c/PGw6RGBt2l47E3nyV8EVg_HZKLql1FGSgCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B08-44-02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="136" src="https://2.bp.blogspot.com/-gszJbSnUeD0/WNg2qHNcuUI/AAAAAAAAH5c/PGw6RGBt2l47E3nyV8EVg_HZKLql1FGSgCLcB/s400/Screenshot%2Bfrom%2B2017-03-27%2B08-44-02.png" width="400" /></a></div><div><br /></div><div>(alternatively, from the command line, run: `apm install language-oracle`)</div><div><br /></div><div>After it's installed, your favourite extensions for Oracle DDL should now be picked up as PL/SQL (Oracle) in the status bar and the keywords and package references should be appropriately styled.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-p_cIsIKUgtk/WNg37aj6s7I/AAAAAAAAH5k/RDQLgTd11P4uxowIKCGUGUnr5yyHpeRqgCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B08-51-21.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://2.bp.blogspot.com/-p_cIsIKUgtk/WNg37aj6s7I/AAAAAAAAH5k/RDQLgTd11P4uxowIKCGUGUnr5yyHpeRqgCLcB/s400/Screenshot%2Bfrom%2B2017-03-27%2B08-51-21.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><h2>build-oracle</h2></div><div>You may recall I blogged about <a href="http://apextips.blogspot.com.au/2015/09/compiling-oracle-code-from-atom-text.html">compiling Oracle code</a> back in September 2015. This plugin essentially wraps all the scripts up nicely to get you going quickly.</div><div><br /></div><div>First, you will want to have the scripting engine installed and available on your system, preferably on your path. For the purpose of this article, I'll just be looking at SQLcl, but SQL*Plus can just as easily be used (and is what I actually have my instance set up with).&nbsp;</div><div><br /></div><div>So, head over to the SQLcl downloads page and grab the lastest version:&nbsp;http://www.oracle.com/technetwork/developer-tools/sqlcl/downloads/index.html</div><div><br /></div><div>The unzip and store in a convenient location (I store mine in /opt).&nbsp;</div><br /><br /><pre>unzip sqlcl-*.zip <br />sudo mv sqlcl/ /opt/sqlcl/<br /></pre><br />The next part is to install the Atom plugin. To install, open your settings dialog (ctrl+,), go to the Install node and search "build-oracle". The package should come up as the first result, so hit the install button.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-MKtgj-SEFz0/WNg94jx1bSI/AAAAAAAAH54/-LeFP_reIysveYwlIy7Ht9L50r04-0lbACLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-16-39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="138" src="https://4.bp.blogspot.com/-MKtgj-SEFz0/WNg94jx1bSI/AAAAAAAAH54/-LeFP_reIysveYwlIy7Ht9L50r04-0lbACLcB/s400/Screenshot%2Bfrom%2B2017-03-27%2B09-16-39.png" width="400" /></a></div><br /><br />(alternatively, from the command line, run: `apm install language-oracle`)<br /><br />By default, the plugin looks for `sqlplus` in the path. Since this example we are going with SQLcl, we need to update the configuration. So go into the plugins settings and specify the path to the SQL interpreter:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-dtqDkuuNK9I/WNg-nfRUAkI/AAAAAAAAH6A/RBDvMjJr3nAMPm5tCSjM6wBLTqzTTs4ZwCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-19-58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="117" src="https://2.bp.blogspot.com/-dtqDkuuNK9I/WNg-nfRUAkI/AAAAAAAAH6A/RBDvMjJr3nAMPm5tCSjM6wBLTqzTTs4ZwCLcB/s400/Screenshot%2Bfrom%2B2017-03-27%2B09-19-58.png" width="400" /></a></div><br />Then, in the root of your project folder, you need a file named `.atom-build-oracle.json`, which will be an array of build targets. Each target should contain the fields "connectString" and "targetName".<br /><br /><pre>[<br /> {<br /> "targetName" : "hr: dev",<br /> "connectString" : "hr/hr@//example.com:1521/xe"<br /> }<br />] <br /></pre><br />The first time you add this file into your project, you will need to reload Atom so it knows to read the file to find targets. Now, in the bottom left of the status bar, you will see all the the first target as defined in your build configuration.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-Yey-SuoDqHE/WNhA6qXhDQI/AAAAAAAAH6Q/nqSW6RzVrrMcY20mYLwdIn1Jb3_uwDrUQCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-29-48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-Yey-SuoDqHE/WNhA6qXhDQI/AAAAAAAAH6Q/nqSW6RzVrrMcY20mYLwdIn1Jb3_uwDrUQCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-29-48.png" /></a></div><br /><br />So, I have created a query to test this out (sample.sql). I can hit the keyboard shortcut (ctrl+alt+b), or click on the target in the bottom left to trigger a build. This output then comes out like so:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-ET0Z09ZBkoI/WNhBUB9C8_I/AAAAAAAAH6U/ZTn9HRiLa6wqh17rzAOLj8roqj5qmsgSQCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-31-16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="423" src="https://2.bp.blogspot.com/-ET0Z09ZBkoI/WNhBUB9C8_I/AAAAAAAAH6U/ZTn9HRiLa6wqh17rzAOLj8roqj5qmsgSQCLcB/s640/Screenshot%2Bfrom%2B2017-03-27%2B09-31-16.png" width="640" /></a></div><br /><br />Easy as!<br /><br />If you want to use SQL*Plus as the engine, there are some notes on the projects README that you may want to review. See here:&nbsp;<a href="https://github.com/tschf/atom-build-oracle/blob/master/README.md">https://github.com/tschf/atom-build-oracle/blob/master/README.md</a><br /><br /><h2>autocomplete-oracle</h2><br />Atom has an API to add support for code completions. In this package, I've essentially taken a dump of certain bits from the data dictionary into a JSON file.<br /><br />To install, open your settings dialog (ctrl+,), go to the Install node and search "autocomplete-oracle". The package should come up as the first result, so hit the install button.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-1tYAdV6QCC8/WNhDB_dv7CI/AAAAAAAAH6g/_o-MEiuLvJEUnV35-Er984DgBFmz9ajcwCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-38-49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="https://3.bp.blogspot.com/-1tYAdV6QCC8/WNhDB_dv7CI/AAAAAAAAH6g/_o-MEiuLvJEUnV35-Er984DgBFmz9ajcwCLcB/s400/Screenshot%2Bfrom%2B2017-03-27%2B09-38-49.png" width="400" /></a></div><br />(alternatively, from the command line, run: `apm install autocomplete-oracle`)<br /><br />With this installed, as you type, certain oracle keywords and package references will appear.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-7DE3cl8Hq_Q/WNhD00L_AZI/AAAAAAAAH6o/ojVNZkvSOw4awaaov7Cm36Ir-JoQr--gwCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-41-37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-7DE3cl8Hq_Q/WNhD00L_AZI/AAAAAAAAH6o/ojVNZkvSOw4awaaov7Cm36Ir-JoQr--gwCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-41-37.png" /></a><a href="https://4.bp.blogspot.com/-B1J_Q3fTbtY/WNhD5D3qqLI/AAAAAAAAH6s/PEqGWBGszNYcQ1rxyLIdkEeWxFQCoUU6gCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-42-07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-B1J_Q3fTbtY/WNhD5D3qqLI/AAAAAAAAH6s/PEqGWBGszNYcQ1rxyLIdkEeWxFQCoUU6gCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B09-42-07.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><h2>(experimental/early) plsql-block</h2><br />This is one I haven't really done a lot with, and is not technically my project, but borrowed from another language. A while ago, I came across a couple of Ruby packages that give visual indication of where a block starts and ends.<br /><br />(FWIW, this is a fork of the project:&nbsp;<a href="https://github.com/samu/blocky">https://github.com/samu/blocky</a>.&nbsp;There was another project that does a similar thing, except only matched when on the ending block, so figured this would be better to base off)<br /><br />I've done a slight tweak, and out of the box, it works with begin,end blocks. I think the current implementation doesn't work with if, loop statements, so I've disabled the if-block matching implementation for now. If someone has the time to look more into this project, that would be great - as I can this being supremely useful; or maybe stealing the idea's from this project and re-implementing for PL/SQL!<br /><br />Because it's incomplete for PL/SQL code, I haven't published this - but you can get up and going with this by cloning the fork/repository I have in my GitHub account. Go into your package directory, and clone like so:<br /><br /><pre>cd ~/.atom/packages/<br />git clone https://github.com/tschf/plsql-block.git<br />cd plsql-block<br />apm i<br /></pre><br />With that installed, you should see it under community packages in Atom:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-Z0DhY19oaEQ/WNhde8JE_JI/AAAAAAAAH68/8ULZKpWhv98hPBXifyXcqTsrrHiAZOFUQCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B11-31-39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://4.bp.blogspot.com/-Z0DhY19oaEQ/WNhde8JE_JI/AAAAAAAAH68/8ULZKpWhv98hPBXifyXcqTsrrHiAZOFUQCLcB/s400/Screenshot%2Bfrom%2B2017-03-27%2B11-31-39.png" width="400" /></a></div><br /><br />And, in your PL/SQL code, you will find the opening and closing blocks highlighted like so:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-tt-WZZLG4-s/WNhf4fEbI5I/AAAAAAAAH7I/1kP1KbWpPIok6BSePMnYiR6jlPXewDw4wCLcB/s1600/Screenshot%2Bfrom%2B2017-03-27%2B11-39-50.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="326" src="https://2.bp.blogspot.com/-tt-WZZLG4-s/WNhf4fEbI5I/AAAAAAAAH7I/1kP1KbWpPIok6BSePMnYiR6jlPXewDw4wCLcB/s400/Screenshot%2Bfrom%2B2017-03-27%2B11-39-50.png" width="400" /></a></div><br />Even without the if, loop, constructs matched, I can imagine this still being quite handy.<br /><br />..<br /><br />Enjoy! trent tag:blogger.com,1999:blog-8785176694082881912.post-2472271435304541336 Sun Mar 26 2017 20:46:00 GMT-0400 (EDT) Automatic Refresh of Interactive Report http://simonhunt.blogspot.com/2017/03/automatic-refresh-of-interactive-report.html I'm sure this has been covered a hundred times, but I couldn't find an easy solution without using a plugin.&nbsp; This works without one: <br /><br />Create a Dynamic Action: <br />&nbsp; After Report Refresh<br />&nbsp;&nbsp;&nbsp; True = Execute JavaScript Code (fire on page load):<br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setTimeout(function(){ </span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('#R47772796555758493_search_button').click();</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, 6000);</span><br /><br /><br />&nbsp;Where R47772796555758493 is the ID for you IR.<br /><br /> shunt tag:blogger.com,1999:blog-5551779552143571989.post-8061021446493537280 Sun Mar 26 2017 14:06:00 GMT-0400 (EDT) Oracle Apex 5.2 - Oracle Application Express http://rcitools.blogspot.com/2017/03/oracle-apex-52-oracle-application.html &nbsp;<br />Oracle a publié, début mars, une <a target="_blank" href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/oracle-application-express-sod-1596338.pdf">liste des principales évolutions prévues pour la prochaine version Oracle APEX 5.2</a>.<br /><br />Parmi les principaux points on peut citer les services web "REST", et l'intégration des versions les plus récentes d'Oracle JET et de JQuery.<br /><br />Mais le point <a target="_blank" href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/oracle-application-express-sod-1596338.pdf">le plus important de ce document</a> est l'engagement d'Oracle en ce qui concerne l'avenir d'Oracle APEX:<br /><br />- Oracle APEX est un élément intégré en standard dans toutes les versions de la base de données Oracle, et non pas un produit séparé ou optionnel<br /><br />- L'outil de développement Oracle APEX est qualifié de "compoosant clé", et de ce fait va continuer à évoluer, environ au rythme d'une nouvelle version chaque année<br /><br />- Oracle APEX est le composant standard Oracle de développement pour le cloud<br /><br />- Oracle estime à plus de 250 000 le nombre de développeurs Oracle APEX<br /><br />- Enfin, l'éditeur Oracle prend acte de l'investissement très important de ses clients vis à vis de l'outil Oracle APEX, et de ce fait s'engage à un support à long terme de cet environnement de développement<br /><br />&nbsp;<br /> RCI Informatique tag:blogger.com,1999:blog-6486731048356836969.post-3889159072455430070 Fri Mar 24 2017 16:03:00 GMT-0400 (EDT) APEX 5.1 Series Line Graph opportunity and its simple fix! http://jsidler.blogspot.com/2017/03/apex-51-series-line-graph-opportunity.html Have you ever needed a Line graph with missing Data points.. The standard line graph included in APEX 5.1 does not handle the missing data in a nice way. &nbsp;Examples are worth a thousand words so..<br />We have a table<br /><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">create table temp</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">( s varchar2(20),&nbsp; l varchar2(20),&nbsp; n number ) tablespace db_info_ts;</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L1','a',5);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('l1','c',10);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L1','e',15);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L2','b',5);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values (' l2 ','d',10);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L3','B',3);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L3','c',3);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L3','d',3);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('l3','e',3);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L4','a',7);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L4','f',7);&nbsp;&nbsp; </div><br /><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">commit;&nbsp;</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">The S column here stands for my series, L stands for labels (x values) and n stand for the values.</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">Notice Series are missing some of the labels I want a report showing labels a-f</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">Also the series and labels must have been hand entered as there are spaces and upper/lower values.. In short we have a mess.</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">If I create a series line graph using this data with</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>select s,l,n from temp&nbsp;</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">The results are disasterous!</div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-XK_IkZD3paM/WNQ_HpNnv3I/AAAAAAAACp0/Jftzd3BJJ-oU19W1bFoo8F_yG5yySeLjgCLcB/s1600/Line%2Bb4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="https://4.bp.blogspot.com/-XK_IkZD3paM/WNQ_HpNnv3I/AAAAAAAACp0/Jftzd3BJJ-oU19W1bFoo8F_yG5yySeLjgCLcB/s400/Line%2Bb4.JPG" width="400" /></a></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">But there is an easy way to fix it, using function returning sql&nbsp;</div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>declare</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>t_id number;</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>begin</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>&nbsp; &nbsp;t_id := fill_graph_gaps('select s,l,n from temp','I');</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>&nbsp; &nbsp;return 'select s,l,v from graph_data where graph_data_id = '||t_id||'order by l';</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>end;</i></b></span></span></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">And Poof! you have a beautiful graphs</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-fg57h5pNKYY/WNQ_4AKmbHI/AAAAAAAACp8/ldiTemLWYN8ZRZH9RrOHEQrcCTu6DnV8QCLcB/s1600/Line%2Bafter.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://4.bp.blogspot.com/-fg57h5pNKYY/WNQ_4AKmbHI/AAAAAAAACp8/ldiTemLWYN8ZRZH9RrOHEQrcCTu6DnV8QCLcB/s400/Line%2Bafter.JPG" width="400" /></a></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">The magic is in using a combination of a Global temporary table&nbsp;</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>create global temporary table tmp_graph_align </b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>( series_col varchar2(200), label_col varchar2(200), graph_value number) on commit delete rows;</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b><br /></b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">and a permanent table</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>CREATE TABLE GRAPH_DATA</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>(</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; GRAPH_DATA_ID&nbsp; NUMBER,</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; BUILD_DT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIMESTAMP(6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEFAULT systimestamp,</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(200 BYTE),</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(200 BYTE),</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>);</b></i><br /><i><b>create sequence graph_data_seq start with 1 nocache;</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b><br /></b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">Finally, the function&nbsp;</div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>CREATE OR REPLACE function fill_graph_gaps&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>( p_sql_stmt varchar2, p_format varchar2 default 'I') return varchar2 is</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; Fill_graph_gaps</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; Created by Jerry Sidler 3/23/2017</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; All rights reserved</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; Free to use as long as this notice is maintained.</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-------------------------------------------</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- Parameters</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- p_sql_stmt is the select you wish to graph It must contain 3 columns</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp;Column 1 Series</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp;Column 2 Labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp;Column 3 a number item</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>--</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- p_format attempts to cleanup inconsistent label data</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;N - No cleanup</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;L - Lower case Labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;U - Upper case labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;I - Initcap labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>t_cnt number;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>t_seq number;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>begin</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; delete from graph_data where build_dt &lt; sysdate-1;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; execute immediate 'insert into tmp_graph_align '||p_sql_stmt;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; if upper(p_format) &lt;&gt; 'N' then</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; update tmp_graph_align set label_col = trim(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;series_col=trim(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; if upper(p_format) = 'I' then&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set label_col = initcap(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; series_col = initcap(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; elsif upper(p_format) = 'U' then&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set label_col = upper(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; series_col = upper(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; elsif upper(p_format) = 'L' then&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set label_col = lower(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; series_col = lower(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; end if;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; end if;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; for c1Rec in (select distinct label_col from tmp_graph_align ) loop</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; for c2Rec in (select distinct series_col from tmp_graph_align ) loop</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select count(*) into t_cnt from tmp_graph_align where label_col = c1Rec.label_col and series_col = c2Rec.series_col;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if t_cnt = 0 then</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;insert into tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;values (c2Rec.series_col, c1Rec.label_col, 0);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end if;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; end loop;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; end loop;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; select graph_data_seq.nextval into t_seq from dual;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; insert into graph_data</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; ( graph_data_id, s, l, v )&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; select t_seq, series_col, label_col, graph_value&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; from tmp_graph_align;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; commit;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; return t_seq;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp;&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>end;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>/</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b><br /></b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>Notice I welcome comments and hope to present this at KScope 17. &nbsp;Send me comments/suggestions so when I present it will have many new features to make our lives easier!</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b><br /></b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>Enjoy</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>Jerry</b></i></span></span></div> Gerald Sidler tag:blogger.com,1999:blog-6605807732177081806.post-2340570339317682396 Thu Mar 23 2017 17:45:00 GMT-0400 (EDT) APEX 5.1 Series Line Graph opportunity and its simple fix! http://jsidler.blogspot.com/2017/03/apex-51-series-line-graph-opportunity.html Have you ever needed a Line graph with missing Data points.. The standard line graph included in APEX 5.1 does not handle the missing data in a nice way. &nbsp;Examples are worth a thousand words so..<br />We have a table<br /><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">create table temp</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">( s varchar2(20),&nbsp; l varchar2(20),&nbsp; n number ) tablespace db_info_ts;</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L1','a',5);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('l1','c',10);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L1','e',15);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L2','b',5);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values (' l2 ','d',10);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L3','B',3);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L3','c',3);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L3','d',3);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('l3','e',3);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L4','a',7);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L4','f',7);&nbsp;&nbsp; </div><br /><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">commit;&nbsp;</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">The S column here stands for my series, L stands for labels (x values) and n stand for the values.</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">Notice Series are missing some of the labels I want a report showing labels a-f</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">Also the series and labels must have been hand entered as there are spaces and upper/lower values.. In short we have a mess.</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">If I create a series line graph using this data with</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>select s,l,n from temp&nbsp;</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">The results are disasterous!</div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-XK_IkZD3paM/WNQ_HpNnv3I/AAAAAAAACp0/Jftzd3BJJ-oU19W1bFoo8F_yG5yySeLjgCLcB/s1600/Line%2Bb4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="https://4.bp.blogspot.com/-XK_IkZD3paM/WNQ_HpNnv3I/AAAAAAAACp0/Jftzd3BJJ-oU19W1bFoo8F_yG5yySeLjgCLcB/s400/Line%2Bb4.JPG" width="400" /></a></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">But there is an easy way to fix it, using function returning sql&nbsp;</div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>declare</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>t_id number;</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>begin</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>&nbsp; &nbsp;t_id := fill_graph_gaps('select s,l,n from temp','I');</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>&nbsp; &nbsp;return 'select s,l,v from graph_data where graph_data_id = '||t_id||'order by l';</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>end;</i></b></span></span></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">And Poof! you have a beautiful graphs</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-fg57h5pNKYY/WNQ_4AKmbHI/AAAAAAAACp8/ldiTemLWYN8ZRZH9RrOHEQrcCTu6DnV8QCLcB/s1600/Line%2Bafter.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://4.bp.blogspot.com/-fg57h5pNKYY/WNQ_4AKmbHI/AAAAAAAACp8/ldiTemLWYN8ZRZH9RrOHEQrcCTu6DnV8QCLcB/s400/Line%2Bafter.JPG" width="400" /></a></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">The magic is in using a combination of a Global temporary table&nbsp;</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>create global temporary table tmp_graph_align </b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>( series_col varchar2(200), label_col varchar2(200), graph_value number) on commit delete rows;</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b><br /></b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">and a permanent table</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>CREATE TABLE GRAPH_DATA</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>(</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; GRAPH_DATA_ID&nbsp; NUMBER,</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; BUILD_DT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIMESTAMP(6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEFAULT systimestamp,</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(200 BYTE),</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(200 BYTE),</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>);</b></i><br /><i><b>create sequence graph_data_seq start with 1 nocache;</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b><br /></b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">Finally, the function&nbsp;</div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>CREATE OR REPLACE function fill_graph_gaps&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>( p_sql_stmt varchar2, p_format varchar2 default 'I') return varchar2 is</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; Fill_graph_gaps</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; Created by Jerry Sidler 3/23/2017</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; All rights reserved</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; Free to use as long as this notice is maintained.</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-------------------------------------------</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- Parameters</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- p_sql_stmt is the select you wish to graph It must contain 3 columns</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp;Column 1 Series</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp;Column 2 Labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp;Column 3 a number item</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>--</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- p_format attempts to cleanup inconsistent label data</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;N - No cleanup</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;L - Lower case Labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;U - Upper case labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;I - Initcap labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>t_cnt number;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>t_seq number;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>begin</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; delete from graph_data where build_dt &lt; sysdate-1;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; execute immediate 'insert into tmp_graph_align '||p_sql_stmt;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; if upper(p_format) &lt;&gt; 'N' then</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; update tmp_graph_align set label_col = trim(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;series_col=trim(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; if upper(p_format) = 'I' then&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set label_col = initcap(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; series_col = initcap(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; elsif upper(p_format) = 'U' then&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set label_col = upper(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; series_col = upper(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; elsif upper(p_format) = 'L' then&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set label_col = lower(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; series_col = lower(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; end if;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; end if;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; for c1Rec in (select distinct label_col from tmp_graph_align ) loop</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; for c2Rec in (select distinct series_col from tmp_graph_align ) loop</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select count(*) into t_cnt from tmp_graph_align where label_col = c1Rec.label_col and series_col = c2Rec.series_col;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if t_cnt = 0 then</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;insert into tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;values (c2Rec.series_col, c1Rec.label_col, 0);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end if;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; end loop;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; end loop;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; select graph_data_seq.nextval into t_seq from dual;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; insert into graph_data</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; ( graph_data_id, s, l, v )&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; select t_seq, series_col, label_col, graph_value&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; from tmp_graph_align;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; commit;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; return t_seq;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp;&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>end;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>/</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b><br /></b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>Notice I welcome comments and hope to present this at KScope 17. &nbsp;Send me comments/suggestions so when I present it will have many new features to make our lives easier!</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b><br /></b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>Enjoy</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>Jerry</b></i></span></span></div> Gerald Sidler tag:blogger.com,1999:blog-6605807732177081806.post-2340570339317682396 Thu Mar 23 2017 17:45:00 GMT-0400 (EDT) #fakecode http://spendolini.blogspot.com/2017/03/fakecode.html Unless you've managed to somehow filter out everything about US politics over the last few months (and if you have, please let me know your secret), then you've likely heard about "fake news". &nbsp;From a high level, my basic understanding of "fake news" is that it refers to stories or websites that are fabricated to advance the political beliefs and/or ideologies of one site or the other. &nbsp;Your definition may differ.<br /><br />So what is fake code? &nbsp;That, I can at least try to explain in a bit more detail.<br /><br />The other day, I saw this image posted on <a href="http://krisrice.blogspot.com/" target="_blank">Kris Rice's</a> twitter feed:<br /><br /><a href="http://4.bp.blogspot.com/-Tvifcip9F_4/WNPcG2ezipI/AAAAAAAAAd0/fJWa5vadtXoWbhiuJFhbp7dO1GhQBouAACK4B/s1600/SZPjHwz.jpg" imageanchor="1"><img border="0" height="320" src="https://4.bp.blogspot.com/-Tvifcip9F_4/WNPcG2ezipI/AAAAAAAAAd0/fJWa5vadtXoWbhiuJFhbp7dO1GhQBouAACK4B/s320/SZPjHwz.jpg" width="244" /></a><br /><br />I thought it was a joke, but it's actually a <a href="https://www.gitbook.com/book/tra38/essential-copying-and-pasting-from-stack-overflow/details" target="_blank">real book</a>. That made me laugh. &nbsp;Then cry. &nbsp;Then I read the book, mainly since it's only 4 pages. &nbsp;Believe it or not, &nbsp;there's actually some really good content packed in there. &nbsp;Let me summarize:<br /><br />If you choose to copy code from Stack Overflow, the OTN forum, or anywhere, really, there's a few things to keep in mind:<br /><br /><br /><ol><li><b>Who owns the code</b>. &nbsp;It's more than likely perfectly legal to copy and use the code you find on these sites "as is", but keep in mind there may be exceptions to this rule. &nbsp;The first page in the booklet offers some insight as to what they are.</li><li><b>Who gets credit for the code</b>. &nbsp;While not required, it's a good idea to credit the author of the snippet that you used. &nbsp;This is not just courteous, but also provides a reference back to the source of the code, so when it breaks, you know where to start looking. &nbsp;Which brings me to the third and most important thing to consider:</li><li><b>How good is the code</b>. Unfortunately, there is no easy way to verify this. &nbsp;You can look at the number of up votes for a specific response, but even that can be easily faked - or more likely, just be wrong because it is based on an older version.</li></ol><br />The first two issues don't concern me all that much, as the first is rarely an issue and the second is simple to solve. &nbsp;The third however, does concern me a lot. &nbsp;FAKE code - where FAKE stands for Found Another Killer Example (yes, I made that up) - is fast becoming the way that we develop solutions. &nbsp;Simply enter in some string of what you're trying to do into Google, and a set of possible solutions will magically appear on the page.<br /><br />With very little effort, you can copy &amp; paste that snippet into your application, run it, and if it works, then you're job is done and you're a hero. &nbsp;If it doesn't, some more searching and some more tinkering is in order. &nbsp;Maybe it's a 15 minute task instead of a 5 minute one. &nbsp;But that doesn't matter, as what you were asked to do is done, and you can move on to the next problem. <br /><br />There's definitely some problems with this approach. &nbsp;If you don't understand what the code is doing, who is going to fix it when it breaks? &nbsp;And it will break at some point. &nbsp;As other libraries or components get upgraded and/or browser versions change, code will eventually break - usually at the worst possible time.<br /><br />If you get lucky, and it doesn't break, then who is going to change how it works when the users come up with new requirements? &nbsp;If you don't have a full grasp as to what it does or how it does it, then you'll have little success in changing how it works.<br /><br />And just because there's a solution, does it mean that is the best, most secure, most performant solution? &nbsp;It may work fine for a single user on a development environment, but what happens when its implemented in the real world? &nbsp;This is especially a concern when you're implementing something in a language that you're not as proficient in, as you won't be able to readily spot bad practices.<br /><br />In no way am I saying that any of these sites are bad, nor saying don't use them. &nbsp;I use them all of the time to find solutions to problems and contribute solutions, as do many others. &nbsp;They are all a valuable resource that makes our jobs a lot easier to do.<br /><br />What I do want to emphasize is that when you do use any site that presents a solution or code snippet, be sure to not only vet the solution, but also ensure that you completely understand how it works, and be ready to fix it if it breaks. &nbsp;If you can't do either of these things easily, then perhaps its best to find an alternate solution to your problem - one that you can understand and maintain<br /><br />FAKE code is a real danger to any development project. &nbsp;Sprinkle enough of it around, and you're essentially creating a ticking time bomb, that's just waiting to explode. &nbsp;But FAKE code can be spotted and stopped fairly easily: Document the source of any snippet or blog you use. &nbsp;Take the time to learn what it does line-by-line, and document that, too. &nbsp;Be ready to support it if in the case it breaks. &nbsp;And if you're not comfortable doing so, have alternative resources lined up or at least identified.<br /><br />Together, with a little bit of work, we can stop the FAKEcode epidemic. Scott tag:blogger.com,1999:blog-8449039.post-1440595503019216880 Thu Mar 23 2017 11:03:00 GMT-0400 (EDT) Bulk Updating Interactive Grid Records https://ruepprich.wordpress.com/2017/03/23/bulk-updating-interactive-grid-records/ <p>After my previous post on <a href="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/" target="_blank">Updating Interactive Grid Cells</a>, I wanted to try bulk updating IG records.</p> <p>In this example I want to bulk update the salaries and commissions for the employees. I created a new button called <strong>Double Salaries</strong>. When the button is clicked, the salaries of the selected employees get doubled. The employees with no salary get a salary of 1000. Sales people will get their commission updated to 10% of their new salary.</p> <p>Employees are selected by clicking the row selector checkbox of the interactive grid. The interactive grid&#8217;s static ID is <em>emps.</em></p> <p>The work is done by the JavaScript action of a dynamic action on the <strong>Double Salaries</strong> button:</p> <pre><pre class="brush: jscript; title: ; notranslate"> var record, sal; //Identify the particular interactive grid var ig$ = apex.region(&quot;emps&quot;).widget(); //Fetch the model for the interactive grid var grid = ig$.interactiveGrid(&quot;getViews&quot;,&quot;grid&quot;); //Fetch the model for the interactive grid var model = ig$.interactiveGrid(&quot;getViews&quot;,&quot;grid&quot;).model; //Fetch selected records var selectedRecords = apex.region&quot;emps&quot;).widget().interactiveGrid(&quot;getViews&quot;,&quot;grid&quot;).view$.grid(&quot;getSelectedRecords&quot;); //Loop through selected records and update value of the salary column for (idx=0; idx &lt; selectedRecords.length; idx++) { //Get the record record = model.getRecord(selectedRecords[idx][0]); //Get the current salary and commision values sal = model.getValue(record,&quot;SAL&quot;); job = model.getValue(record,&quot;JOB&quot;); comm = model.getValue(record,&quot;COMM&quot;); //If there is no salary, set it to 1000, else double it if (sal === '') { sal = 1000; } else { sal = sal * 2; } //Update the record with doubled salary and new commission model.setValue(record,&quot;SAL&quot;, sal); //Set commission to 10% of salary for sales people if (job = 'SALESMAN') { comm = sal *.1; model.setValue(record,&quot;COMM&quot;, comm); } } </pre> <p><img data-attachment-id="2196" data-permalink="https://ruepprich.wordpress.com/2017/03/23/bulk-updating-interactive-grid-records/emps_bulk-2/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/emps_bulk1.gif?w=550" data-orig-size="646,385" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="emps_bulk" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/emps_bulk1.gif?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/emps_bulk1.gif?w=550?w=550" class=" size-full wp-image-2196 aligncenter" src="https://ruepprich.files.wordpress.com/2017/03/emps_bulk1.gif?w=550" alt="emps_bulk" /></p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2148/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2148&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2148 Thu Mar 23 2017 10:36:25 GMT-0400 (EDT) Node Newbie Error – NPM Refusing to Install Package as a Dependency of Itself https://ruepprich.wordpress.com/2017/03/22/node-newbie-error-npm-refusing-to-install-package-as-a-dependency-of-itself/ <p>Source: <a href="http://thisdavej.com/node-newbie-error-npm-refusing-to-install-package-as-a-dependency-of-itself/">Node Newbie Error – NPM Refusing to Install Package as a Dependency of Itself</a></p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2146/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2146&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2146 Wed Mar 22 2017 11:36:21 GMT-0400 (EDT) Oracle APEX: Low Code, High Innovation https://www.insum.ca/oracle-apex-low-code-high-innovation/ <h1>Oracle APEX: Low Code, High Innovation</h1> <p>Several years ago, I came across a story that has remained one of my favorites:</p> <blockquote><p>A toothpaste factory had a problem: they sometimes shipped empty boxes, without the tube inside.</p> <p>Those familiar with production lines know how difficult it is to have everything run perfectly in sync, and needless to say, empty toothpaste boxes in the supermarket move customer satisfaction scores in the wrong direction.</p> <p>Understanding how important that was, the CEO got the top people in the company together and they decided to start a new project, in which they would hire an external engineering company to solve their empty boxes problem, as their engineering department was already too stretched.</p> <p>The project followed the usual process: budget and project sponsor allocated, RFP, third-parties selected, and six months (and $8 million) later, they had a fantastic solution — on time, on budget, high quality, and everyone in the project had a great time. They solved the problem by using high-tech precision scales that would sound a bell and flash lights whenever a toothpaste box weighed less than it should. The line would stop, someone would walk over and yank out the defective box, then press a button to restart everything.</p> <p>A while later, the CEO decides to have a look at the ROI of the project: amazing results! No empty boxes ever shipped out of the factory. Very few customer complaints, and they were gaining market share. “That’s some money well spent!” &#8211; he says, before looking closely at the other statistics in the report.</p> <p>It turns out, the number of defects picked up by the scales was 0. It should’ve been picking up at least a dozen a day, so maybe there was something wrong with the report? He filed a bug on the report, and after some investigation, the engineers came back saying the report was actually correct. The scales really weren’t picking up any defects, because all boxes that got to that point on the conveyor belt were good.</p> <p>Puzzled, the CEO travels down to the factory, and walks up to the part of the line where the precision scales were installed. A few feet before it, there was a $20 desk fan blowing the empty boxes off the belt and into a bin.</p> <p>“Oh, that — one of the guys put it there ’cause he was tired of walking over every time the bell rang”, said one of the workers.</p></blockquote> <p>The story appeared in a post entitled <em>Networks are Smart Around the Edges</em>, and dubious veracity aside, I love it since it highlights several things about corporations and people we all know to be true from experience. In fact, since it demonstrates so clearly how we can often overlook simple yet effective solutions due to a biased frame of reference, I’ve used it several times when <a href="https://www.insum.ca/about-apex/">introducing Oracle APEX</a>.</p> <p><img class="aligncenter wp-image-7479 size-full" src="https://www.insum.ca/wp-content/uploads/2017/03/ray-ozzie-complexity-it.jpg" alt="ray-ozzie-complexity-it" width="624" height="469" srcset="https://www.insum.ca/wp-content/uploads/2017/03/ray-ozzie-complexity-it.jpg 624w, https://www.insum.ca/wp-content/uploads/2017/03/ray-ozzie-complexity-it-300x225.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/03/ray-ozzie-complexity-it-450x338.jpg 450w" sizes="(max-width: 624px) 100vw, 624px" /></p> <p>For the same reason, the story also works well to introduce the topic of this post, which is the growing popularity of low code platforms, or what some are calling the <a href="https://www.salesforce.com/blog/2016/06/leading-the-low-code-revolution.html">low code revolution</a>.</p> <p>Successful business and IT leaders alike recognize that “complexity kills”, and they look for simple solutions that both enable speed and agility (see my previous <a href="https://www.insum.ca/oracle-apex-and-bimodal-it/">bimodal or two speed speed IT post</a>). And, they also recognize the tremendous value in unleashing the collective knowledge and creativity of their teams. Since low code platforms hold promise on both fronts, it’s no wonder we are seeing more and more adoption.</p> <h2>What are low code platforms?</h2> <p>A low code platform is an application development framework typically consisting of visual based, “drag and drop”, type development tools, which enable technically inclined non-programmers, (aka “citizen developers”), to build surprisingly functional business applications without having to write a lot of complex code.</p> <p>Forrester describes low-code platforms as “<em>platforms that enable rapid delivery of business applications with a minimum of hand-coding and minimal upfront investment in setup, training, and deployment</em>.”</p> <p>Two good examples are <a href="https://ifttt.com/">IFFTT </a>and <a href="https://zapier.com/">Zapier</a>, which are used to automate workflows by connecting services using pre-defined recipes. They enable non-programmers to develop quite involved workflows for everything from automating social media posts to managing email to building notifications and alerts when tickets go on sale or something is posted on craigslist.</p> <p>In the enterprise space, Salesforce.com is a good example, as is <a href="http://insum.ca/about-apex/">Oracle Application Express (APEX)</a>.  In fact, Oracle has recently announced<a href="https://www.oracle.com/corporate/pressrelease/low-code-development-092016.html"> a push towards low code tools</a>, and has ramped up efforts to make it as easy as possible for organizations to <a href="https://apex.oracle.com/lowcode/">get started with Oracle APEX</a>. To see the low code features of Oracle APEX, <a href="https://www.periscope.tv/w/1PlKQZzelVWGE">see a demo by </a><a href="https://www.periscope.tv/w/1PlKQZzelVWGE">Mike Hichwa</a>, VP of Software Development at Oracle.</p> <h1>Low Code Platforms &#8211; Why Now?</h1> <p>First, it’s worth noting that the adoption of low code tools is really just part of a larger trend we’ve been experiencing, which is the “<a href="https://en.wikipedia.org/wiki/Democratization_of_technology">democratization of IT</a>”.  Simply put, advancements in technology and user interface design are making powerful tools accessible to more and more people, meaning they are no longer restricted to specialized, highly trained experts.</p> <p><img class="size-full wp-image-7474 alignright" src="https://www.insum.ca/wp-content/uploads/2017/03/low-code-revolution-talent.png" alt="" width="480" height="332" srcset="https://www.insum.ca/wp-content/uploads/2017/03/low-code-revolution-talent.png 480w, https://www.insum.ca/wp-content/uploads/2017/03/low-code-revolution-talent-300x208.png 300w, https://www.insum.ca/wp-content/uploads/2017/03/low-code-revolution-talent-450x311.png 450w" sizes="(max-width: 480px) 100vw, 480px" /></p> <p>Aided and abetted by the democratization of IT, the primary reason for the low code revolution is rooted in the ever-increasing technology demands of modern businesses, combined with a general shortage of IT talent. In short, IT has become a major bottleneck in many organizations, and business leaders are scrambling for solutions. After all, today’s markets are not kind to those who move slowly with technology adoption &#8211; just ask Blockbuster.</p> <p>This of course is not surprising.  In this age of rapid digital transformation where it’s said that “every company is a technology company whether they want to be or not”, new initiatives typically have a technology component, resulting in a steadily rising demand for software developers. And, as highlighted in a recent Forbes article entitled “<a href="https://www.forbes.com/sites/panosmourdoukoutas/2017/03/02/wal-mart-target-and-cvs-need-software-talent-where-will-it-come-from/#865aff94bb4f">Wal-Mart, Target and CVS Need Software Talent; Where Will it come From?</a>”, not only are universities not churning out enough new grads, but the competition for software talent is becoming more fierce, especially from well funded Silicon Valley companies with highly sought-after workplaces. Oh, and did I mention the need to go fast?</p> <h1>How Low Code Platforms Help</h1> <h2>More Hands on Deck</h2> <p>Easily the biggest benefit of low code platforms is that they increase the number people who can be involved in delivering technical solutions. A recent <a href="https://www.salesforce.com/blog/2016/06/leading-the-low-code-revolution.html">article by Salesforce</a> explains that “<em>the ‘low-code revolution’ opens up an enormous opportunity to empower employees to get involved in the app-development process</em>” and means that “<em>the ability to build apps (and the responsibility for innovating) for a business becomes decentralized: anyone in any department can create software to solve a problem or address a need. Not only are problems being solved at the source, but coders are freed up to solve higher-order problems.</em>”</p> <p>A key point not to be missed here is “<em>problems being solved at the source</em>”.</p> <p>Intuitively, the closer someone is to the problem domain and solution context, the easier it will be for them to see and understand the types of optimizations required to improve efficiencies, and the more invested they will be in finding solutions. With their unique perspective and access to low code platforms, technically savvy business users can start servicing their own needs. This reduces dependency on overworked and potentially unsympathetic IT departments who are not only several steps removed from the problem, but who all too often deliver applications through a long, meandering process that begins with uninspired requirements gathering interviews and ends with “thanks, but that’s not really what we wanted.&#8221;</p> <p><img class="size-vntd-sidebar-auto wp-image-7478 aligncenter" src="https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-880x390.jpg" alt="ed-catmull-creativitiy" width="880" height="390" srcset="https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-880x390.jpg 880w, https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-300x133.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-768x340.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-450x199.jpg 450w, https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy.jpg 1000w" sizes="(max-width: 880px) 100vw, 880px" /></p> <p>&nbsp;</p> <h2>Breaking the Requirements Gathering Challenge</h2> <p>Speaking of requirements gathering, nailing down user requirements is one of the most challenging aspects of application development projects. Although the blame is often placed on dithering users who don’t know what they want, to be fair, it’s not easy or even always possible for users to specify everything they’ll need upfront. People don’t always know exactly what they want until they start to see something take shape, and requirements can also shift since projects are not completed in a vacuum. Low code platforms can be a big help as they enable power users to iterate on solutions in an exploratory manner, and constantly refine until they have something suited to their needs.</p> <p>Additionally, platforms like Oracle APEX not only enable low code development, they also support “full control” development, which means experienced developers can get under the hood and write as much code as they need. So, much initial work can be done by citizen developers using the low code features, and professional developers can step in where necessary to complete the more complex features using the full power of HTML, CSS, JavaScript, and PL/SQL. At the very least, applications built by the citizen developers can act as a prototypes that help flush out requirements.</p> <p>&nbsp;</p> <h2>Turbo Charging Professional Developers</h2> <p>Finally, it’s not just non-coders that can benefit for low code platforms – there are benefits for professional developers as well.</p> <p>First, with pre-built packages and components that can be assembled via “drag and drop” configured with “point and click” interfaces, low code platforms help reduce the time and complexity involved with building and deploying applications. This, of course, is a welcomed outcome given the relentless pressure to produce more in less time.</p> <p><img class="alignright wp-image-7472 size-medium" src="https://www.insum.ca/wp-content/uploads/2017/03/low-code-backend-developers-300x141.png" alt="" width="300" height="141" srcset="https://www.insum.ca/wp-content/uploads/2017/03/low-code-backend-developers-300x141.png 300w, https://www.insum.ca/wp-content/uploads/2017/03/low-code-backend-developers.png 440w" sizes="(max-width: 300px) 100vw, 300px" /></p> <p>Second, low code platforms also enable back end developers to “move up the stack” and build actual end user applications.  In the past, given the complexity of front-end application development platforms and the associated learning curves (see ADF and .Net), back end developers were effectively “locked out” of application development and were forced to defer to experienced front-end programmers.  However, with low code platforms, that changes.  Using Oracle APEX as an example again, back end database developers can leverage their existing SQL and PL/SQL skills and build robust and professional looking applications without having to dedicate hours and hours to learning front-end programming.  So again, low code platforms can broaden the number of people who can deliver applications, and especially those with existing systems knowledge.</p> <h1>Sounds good. What’s the catch?</h1> <p>The criticisms of low code platforms seem to fall into two areas.</p> <p>The first is the claim that low code platforms “over promise and under deliver”, meaning they are not yet mature enough to be deemed useful beyond simple applications. As a result, the argument is that citizen developers will quickly hit a ceiling or get in over their heads. They&#8217;ll then have to be bailed out by professionals who&#8217;ll need to rebuild everything from scratch, and who will no doubt do so with no shortage of colorful “tsk tsks” and “who the heck built this” type exclamations, muttered under their breath while madly posting submissions to codinghorror.com.</p> <p>Although it may be true that the low code platforms are not yet fully mature, (see Forrester’s study entitled “<a href="https://www.forrester.com/report/Vendor+Landscape+The+Fractured+Fertile+Terrain+Of+LowCode+Application+Platforms/-/E-RES122549">Vendor Landscape: The Fractured, Fertile Terrain of Low-Code Application Platforms</a>”), it’s important to note they are steadily getting better all the time.</p> <p>For example, consider how advances in word processors and desktop publishing tools completely disrupted the graphic design and publishing industries. With tools like <a href="https://prezi.com/">Preszi</a>, an amateur with an eye for design can create professional looking presentations quickly and cost effectively, which not too long ago would have been significant undertakings involving graphic design and/or video production agencies.  Or, for those familiar with Oracle APEX, consider the difference between APEX 4.0 and 5.1, and then imagine where things will be in another 3 to 5 years.</p> <p><img class="aligncenter wp-image-7496 size-vntd-portfolio-auto" src="https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-450x299.jpg" alt="" width="450" height="299" srcset="https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-450x299.jpg 450w, https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-300x199.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-768x510.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-1024x680.jpg 1024w, https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-880x584.jpg 880w" sizes="(max-width: 450px) 100vw, 450px" /></p> <p>Also, it’s important to note that what I’m discussing here are “low code” and not “no code” platforms. It’s still necessary for citizen developers to have a high level understanding of how systems are built, as well as the ability to string together at least a few lines of code. The point is that they do to not have to be professional programmers who’ve dedicated months or years to learning how to write software. Think of people who might have built complex Excel and Word macros in the past &#8211; these are the types of people who will “take flight” with low code platforms.</p> <h2>Risks of Shadow IT?</h2> <p>The second area of criticism is that low code platforms can make it easy for someone who “knows enough to be dangerous” to, well, do something dangerous. Yes, this is true too, and much has been written about “shadow IT” and business users adopting tools not sanctioned or supported by the IT department.</p> <p><img class="size-full wp-image-7475 alignright" src="https://www.insum.ca/wp-content/uploads/2017/03/oracle-apex-built-in-features.png" alt="oracle apex built in features" width="444" height="253" srcset="https://www.insum.ca/wp-content/uploads/2017/03/oracle-apex-built-in-features.png 444w, https://www.insum.ca/wp-content/uploads/2017/03/oracle-apex-built-in-features-300x171.png 300w" sizes="(max-width: 444px) 100vw, 444px" /></p> <p>However, much has also been written about the need to <a href="http://www.cio.com/article/3119588/cio-role/empower-your-employees-by-embracing-shadow-it.html"><em>embrace </em></a><a href="http://www.cio.com/article/3119588/cio-role/empower-your-employees-by-embracing-shadow-it.html">shadow IT</a>. While there certainly are risks to manage, low code platforms often provide guardrails and can in fact encapsulate and enforce “best practices”.  For example, Oracle APEX includes built-in features to help citizen developers make good design choices and be <a href="https://www.insum.ca/oracle-apex-security-where-do-start/">mindful of application security</a>. And, since APEX runs entirely in the database, any applications developed by citizen developers can be carefully monitored by experienced DBAs using tools like Oracle Enterprise Manager, and disabled if problems arise.</p> <p>Incidentally, this is also where you’ll hear critics bring up tools like Microsoft Access or FoxPro, along with amusing anecdotes about a monstrosity someone built that blew up and almost ended the world. Yes, this has happened, and in fact, I’ve built a few of those monstrosities myself. However, for every MS Access horror story out there, there also exists a story about how an MS Access application built by a citizen developer was of enormous benefit to a business (I’ve built a few of those too).</p> <p>Clearly, the net gain from tools like MS Access and FoxPro has been very positive for businesses overall, and I believe the same will prove to be true for low code platforms.</p> <h1>Being Left Behind</h1> <p>The biggest risk with low code platforms is that overly cautious IT managers will ban them altogether, and in doing so throw the proverbial baby out with the bath water. In banning such tools, they reduce their organization’s “solutions surface area”, and limit their ability to innovate and keep pace with more forward thinking competitors. (In fact, overly restrictive IT policies that kill innovation is the subject of my next post.)</p> <p><img class="size-full wp-image-7473 alignright" src="https://www.insum.ca/wp-content/uploads/2017/03/low-code-it-managers.png" alt="low code it managers" width="444" height="299" srcset="https://www.insum.ca/wp-content/uploads/2017/03/low-code-it-managers.png 444w, https://www.insum.ca/wp-content/uploads/2017/03/low-code-it-managers-300x202.png 300w" sizes="(max-width: 444px) 100vw, 444px" /></p> <p>The truth is, more and more organizations are seeing the benefit of low code platforms. Not only do they reduce complexity and improve delivery speed, but they also act as a “force multiplier” by unlocking the creativity and ingenuity of a broader group of people. If the history of companies who are slow to adopt new technology is our guide, not exploring the possibilities of low code platforms will prove to be a costly mistake.</p> <p>The post <a rel="nofollow" href="https://www.insum.ca/oracle-apex-low-code-high-innovation/">Oracle APEX: Low Code, High Innovation</a> appeared first on <a rel="nofollow" href="https://www.insum.ca">Insum</a>.</p> Frank Hoogendoorn https://www.insum.ca/?p=7468 Tue Mar 21 2017 17:12:12 GMT-0400 (EDT) EECS - Oracle Exadate Express Cloud Service, Step 4 : APEX ! http://roelhartman.blogspot.com/2017/03/eecs-oracle-exadate-express-cloud.html So what are my experiences using EECS doing some APEX work?<span class="fullpost"></span><br /><div><br /></div><div>First of all, it is not blazing fast. Probably caused by the latency (as mentioned in my previous post). It is not slow, it is just ok('ish).&nbsp;</div><div><br /></div><div>Second, and way more important, it runs <b><u>APEX 5.0.4</u></b>! So whatever Oracle advertises about "<i>Cloud first</i>" ... it doesn't seem to apply to APEX (or APEX on EECS). So this fact alone makes this environment <u>useless</u> for demo, development and presentation purposes at this moment. I heard through the grapevine that 5.1 will be available from April 25 - but that's still a month away. And that rumour could be false.</div><div><br /></div><div>Third, because you don't have access to a SYS account, you can't install something like <a href="http://www.oraopensource.com/apex-sert/" target="_blank">APEX-SERT</a>. Maybe the install scripts can be adapted for the PDB_ADMIN account - I haven't looked into that yet.</div><div><br /></div><div>Four : As mentioned in an earlier post, within an EECS PDB instance you get one and only one APEX Workspace. You can't add one (nor delete). You can create as much schema's as you wish, but you have to assign them all to that same Workspace. Thus if you need more Workspaces, you either buy multiple EECS instances or look into another - more expensive - Database Cloud offering.</div><div><br /></div><div>Five : The default Authentication Scheme is the new "Oracle Cloud Identity Management" scheme. If you have admin rights for the Service you can add users in that layer. If you would like to use "APEX Users" as an Authentication Scheme, you need admin rights as well to create those users. Or create your own scheme if you like that better.</div><div><br /></div><div>And finally, when you buy an EECS, you get a Customer Support (CSI) number. You should be able to use this number to access My Oracle Support (MOS) to get information, ask questions etc. But the first few weeks that number was not recognised by MOS. But as I tried it again today, it seems to "know" the number and registration is in progress.</div><div><br /></div><div>Reading the points above and the previous post, you might think EECS is not that good. But that all depends on what you expect to get for your money. Compared with other Oracle Cloud products, EECS is rather cheap. At some points it could do better, but especially when the service is upgraded to APEX 5.1, I will use it more for demo / development and presentations. Multiple Workspaces would be second on my wish list.&nbsp;</div><div><br /></div><div>And also Oracle announced a free APEX development environment a while ago - comparable to apex.oracle.com, but with that major difference that you are officially allowed to develop applications in that new environment (apex.oracle.com is targeted as a playground - despite all the development that is probably happening there....).&nbsp;</div> Roel Hartman tag:blogger.com,1999:blog-20567072.post-6644866443997566288 Tue Mar 21 2017 09:31:00 GMT-0400 (EDT) Using VS Code for PL/SQL development http://ora-00001.blogspot.com/2017/03/using-vs-code-for-plsql-development.html I've been using Sublime Text as my main editor for PL/SQL development for many years, but I'm now in the process of switching to <a href="https://code.visualstudio.com/">Visual Studio Code</a> (VS Code).<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-St5URa61wE8/WNAOn7qnBxI/AAAAAAAABQQ/QpnrTKxxhFU75yzGVlojRhRBIxURyN7iwCLcB/s1600/Screen%2BShot%2B2017-03-20%2Bat%2B18.16.26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="380" src="https://4.bp.blogspot.com/-St5URa61wE8/WNAOn7qnBxI/AAAAAAAABQQ/QpnrTKxxhFU75yzGVlojRhRBIxURyN7iwCLcB/s640/Screen%2BShot%2B2017-03-20%2Bat%2B18.16.26.png" width="640" /></a></div><br /><br />Some good reasons to use VS Code:<br /><ul><li>Multi-platform (Windows, OS X, Linux)</li><li>Free, open source</li><li>Lightweight, fast</li><li>Large ecosystem of <a href="https://marketplace.visualstudio.com/VSCode">extensions</a></li><li>Built-in <a href="https://code.visualstudio.com/docs/editor/versioncontrol">Git support</a></li><li>Can be adapted to PL/SQL coding via a <a href="https://marketplace.visualstudio.com/items?itemName=xyz.plsql-language">plsql language extension</a> (syntax highlighting, go to/peek definition, go to symbol) and PL/SQL compilation using sqlplus via a <a href="https://code.visualstudio.com/docs/editor/tasks">Task Runner</a> (see below for PL/SQL specifics)</li></ul><br /><span style="font-size: large;">Installing VS Code and extensions</span><br /><br />Download VS Code from <a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a> and run the installer. <br /><br />Start VS Code and click the Extensions icon.<br /><ul><li>Search for "plsql" and install the "xyz.plsql-language" extension</li></ul>&nbsp;The following are all optional but recommended: <br /><ul><li>Search for "git history" and install the "donjayamanne.githistory" extension</li><li>Search for "better merge" and install the "pprice.better-merge" extension</li><li>Search for "tag" and install the "formulahendry.auto-close-tag" extension</li><li>Search for "blackboard" and install the "gerane.Theme-Blackboard" extension</li><li>Search for "material icon" and install the "PKief.material-icon-theme" extension </li></ul>Click on "Reload" to restart VS Code with the new extensions loaded.<br /><br />Your list of extensions should now look something like this:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-4G_ik9PDLzQ/WNAQcHl2XSI/AAAAAAAABQc/srU-Qb39FS8Q7M_SWyn7bZ95QfmBASktQCLcB/s1600/Screen%2BShot%2B2017-03-20%2Bat%2B18.23.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-4G_ik9PDLzQ/WNAQcHl2XSI/AAAAAAAABQc/srU-Qb39FS8Q7M_SWyn7bZ95QfmBASktQCLcB/s1600/Screen%2BShot%2B2017-03-20%2Bat%2B18.23.48.png" /></a></div><br />Click File, Preferences, Color Theme and select the "Blackboard" theme.<br />Click File, Preferences, File Icon Theme and select the "Material Icon" theme.<br /><br /><span style="font-size: large;">Configuring a Task Runner to compile PL/SQL code</span><br /><br />Click File, Open Folder and open a folder containing your PL/SQL code.<br />Click View, Command Palette and enter "task" then select "Configure Task Runner", select "Others".<br /><br />Copy the following text and paste it into the <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">tasks.json</span> file:<br /><br /><script src="https://gist.github.com/mortenbra/9d7bd2147b02ae8fa2e14dbc38935e5e.js"></script><br /><br />Adjust the connection string as appropriate to your environment.<br /><br />Copy the following text and save it as <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">_show_errors.sql </span>in the project root folder:<br /><br /><script src="https://gist.github.com/mortenbra/3204a125e3da1008e19b36bf94586950.js"></script><br /><br />Linux and Mac: Copy the following text and save it as <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">_run_sqlplus.sh</span> in the project root folder (remember to <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">chmod +x</span> the file to make it executable).<br /><br /><script src="https://gist.github.com/mortenbra/9af4b0211782161619c0bab01ed7031a.js"></script><br /><br />Windows: Copy the following text and save it as <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">_run_sqlplus.bat</span> in the project root folder.<br /><br /><script src="https://gist.github.com/mortenbra/bda9b46f1af45ffa8a72d49739d7782e.js"></script> <br /><br />Optionally create a <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">login.sql</span> file in project root folder and add:<br /><br /><script src="https://gist.github.com/mortenbra/6a10aa6b09fb470e6b91bc3b5adb19af.js"></script><br /><br /><span style="font-size: large;">Editing code</span><br /><br />The <a href="https://marketplace.visualstudio.com/items?itemName=xyz.plsql-language">PL/SQL language extension by xyz</a> provides syntax highlighting for PL/SQL, as well as a couple of very useful code navigation features.<br /><br />You can go to a "symbol" (ie a function or procedure) inside a package by pressing Shift+Ctrl+O and typing the name of the symbol: <br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-h1FQ8fQdNhA/WNDf6LO-PjI/AAAAAAAABQ4/dTGH_gK3sXMcWBOzw4rJ4sQoNuL-AG_MwCLcB/s1600/DocumentSymbol.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="458" src="https://1.bp.blogspot.com/-h1FQ8fQdNhA/WNDf6LO-PjI/AAAAAAAABQ4/dTGH_gK3sXMcWBOzw4rJ4sQoNuL-AG_MwCLcB/s640/DocumentSymbol.gif" width="640" /></a></div><br />You can go to the definition of a function or procedure by pressing F12 when the cursor is on the function or procedure name (or right-click on the function or procedure name and select either "Go to definition", or "Peek definition" to see the definition in a popup window without leaving the current file).<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-bkP7jePkARI/WNDhImC0AoI/AAAAAAAABRA/buWmDJMVax0Uoe3sqKm9e8OGox0lGJnJACLcB/s1600/Definition.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="458" src="https://1.bp.blogspot.com/-bkP7jePkARI/WNDhImC0AoI/AAAAAAAABRA/buWmDJMVax0Uoe3sqKm9e8OGox0lGJnJACLcB/s640/Definition.gif" width="640" /></a></div><br /><br /><br /><span style="font-size: large;">Snippets</span><br /><br />You can define your own snippets for frequently used code; see <a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets">this how-to article</a>. I recommend that you create snippets for frequently used code blocks such as if/then/else statements, case statements, and larger code blocks such as the skeleton for a package, procedure or function.<br /><br /><span style="font-size: large;">Building code</span><br /><br />To build (compile) the current file into the database, press Shift+Ctrl+B (or click View, Command Palette, and type "build" to search for the relevant command).<br /><br />The build task runs sqlplus and passes it the filename of the current file. This creates or replaces the object in the database (you can see the commands being executed in the "Output" pane in VS Code). The build task then queries <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">user_errors</span> to get any errors and warnings from the database, and these are shown in the "Problems" pane in VS Code.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ojUO78KeArs/WNDbwYBe6ZI/AAAAAAAABQs/p6nbzS0CYwM70-JdATffK0MpedTBq29rACLcB/s1600/Screen%2BShot%2B2017-03-21%2Bat%2B08.50.30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://1.bp.blogspot.com/-ojUO78KeArs/WNDbwYBe6ZI/AAAAAAAABQs/p6nbzS0CYwM70-JdATffK0MpedTBq29rACLcB/s640/Screen%2BShot%2B2017-03-21%2Bat%2B08.50.30.png" width="617" /></a></div><br />You can click on each problem to jump to the relevant line of code. You'll also see squiggly lines under the errors in the code itself, and you can hover over the text to see a tooltip containing the error message.<br /><br />Note that since the build task queries the <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">user_errors</span> view without any filters, you get to see all errors in the schema, not just the errors for the current file. I actually like this, because it instantly shows me if there are any other problems in the schema that I might not otherwise be aware of.<br /><br />Also, the build task assumes that you have one file per database object (ie separate files for package specifications and package bodies), and that the filenames match the database object names. This makes sense to me and I assume that's how most people organize their files, but you can tweak the <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">_show_errors.sql</span> script to generate output appropriate to your setup.<br /><br /><br /><span style="font-size: large;">Version control with Git</span><br /><br />VS Code has great built-in support for Git. I recommend installing a couple of git-related extensions (see above), but other than that, I'll just refer you to <a href="https://code.visualstudio.com/docs/editor/versioncontrol">the official tutorial for using Git in VS Code</a>.<br /><br /><br />That's it, enjoy using VS Code for PL/SQL development! :-)<br /><br /><br /> Morten Braten tag:blogger.com,1999:blog-5215551487816981140.post-6246776665906215004 Tue Mar 21 2017 04:19:00 GMT-0400 (EDT) Kscope17 Preview: Your Destination Awaits http://www.odtug.com/p/bl/et/blogaid=685&source=1 Kscope12, my very first Kscope and the one that shares this year's location, was a superbly unique event. In last year's ODTUG Cinco de Mayo #tbt Twitter party ("tbt" = "ThrowBack Thursday" for those of you who don't use Twitter), pictures from Kscope12 kept surfacing attached to fond memories... ODTUG http://www.odtug.com/p/bl/et/blogaid=685&source=1 Mon Mar 20 2017 11:09:55 GMT-0400 (EDT) March ODTUG News http://www.odtug.com/p/bl/et/blogaid=687&source=1 ODTUG celebrated its 20th birthday! The ODTUG News will keep you up to date on ODTUG Kscope17 updates, events, and sponsorship opportunities. Read more to learn about Meetups and events in your area, and mark your calendars for our upcoming March and April webinars. ODTUG http://www.odtug.com/p/bl/et/blogaid=687&source=1 Mon Mar 20 2017 11:04:27 GMT-0400 (EDT) Oracle Analytics Cloud Release - Blog Hop Takeaways http://www.odtug.com/p/bl/et/blogaid=686&source=1 If you haven’t heard already, Oracle Analytics Cloud (OAC) is officially released! This includes the Essbase Cloud (EssCS), Business Intelligence Cloud (BICS), and Data Visualization Cloud (DVCS). Find out more here! ODTUG http://www.odtug.com/p/bl/et/blogaid=686&source=1 Fri Mar 17 2017 14:34:06 GMT-0400 (EDT) APEX 5.1 Master detail (with Interactive/Classic Detail Report) http://apexbyg.blogspot.com/2017/03/apex-51-master-detail-with.html <div dir="ltr" style="text-align: left;" trbidi="on">You probably know that in APEX 5.1 you can easily make a master-detail report regions declaratively by using an Interactive Grids (IG).<br /><br />But what if you don't want all those fancy IG stuff (I know, I know...you can hide/disable all of it) but plain old Classic (or Interactive) Report for a detail report. No problem, it's only few clicks away!<br /><br />Let's take a well known example with the dept and emp tables.<br /><br />First of all you have to create an Interactive Grid over the dept table (master):<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-LObbf0XjCQo/WMuajzKSpLI/AAAAAAAAEdM/wzk9JsgTYPICsLqwVXF9lgvujGIcKdB2gCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.12.41.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="185" src="https://2.bp.blogspot.com/-LObbf0XjCQo/WMuajzKSpLI/AAAAAAAAEdM/wzk9JsgTYPICsLqwVXF9lgvujGIcKdB2gCLcB/s640/Screen%2BShot%2B2017-03-17%2Bat%2B09.12.41.png" width="640" /></a></div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Don't forget to put the DEPTNO into SQL Query. It can be hidden, but you have to put it in.<br /><br />Next step is to create a hidden item (with Value Protected property set to No) where you will temporary store the DEPTNO of the selected grid row (in my case it's P28_DEPTNO):<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-TEaNlEclXI8/WMubz_MlM1I/AAAAAAAAEdY/dScy_BYNLP0WN-99RPwNCEIqDTX2weslwCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.18.06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-TEaNlEclXI8/WMubz_MlM1I/AAAAAAAAEdY/dScy_BYNLP0WN-99RPwNCEIqDTX2weslwCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.18.06.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br />Then you can create your detail report (Classic or Interactive) over the emp table with where condition that references your hidden item (don't forget to put it in Page Items to Submit):<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-CXoV9Ktjfws/WMugH76HivI/AAAAAAAAEdw/MH4RJrKPOBork0tJH8cj7tDfTx4Bu1fFQCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.36.13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-CXoV9Ktjfws/WMugH76HivI/AAAAAAAAEdw/MH4RJrKPOBork0tJH8cj7tDfTx4Bu1fFQCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.36.13.png" /></a></div><br /><br />Next step is to create a dynamic action with event Selection Change [Interactive Grid] over the dept region:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-HZTtQ4SyEs4/WMuch8LShOI/AAAAAAAAEdg/2ekQ_6cNlZEFsorAUKnjfODOwJHoP3KzgCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.20.59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-HZTtQ4SyEs4/WMuch8LShOI/AAAAAAAAEdg/2ekQ_6cNlZEFsorAUKnjfODOwJHoP3KzgCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.20.59.png" /></a></div><br />For first true action use Set Value with the Set Type Javascript Expression and define it as:<br /><br /><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;">this.data.selectedRecords.length != 1 ? '': this.data.model.getValue( this.data.selectedRecords[0], "DEPTNO")</pre>and for an Affected element choose your hidden item:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-UmQfM4S-84c/WMuhwduU9-I/AAAAAAAAEd8/8oztBbxuBQQbI_MrGYZXRXqJ9OOCSHEcQCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.43.25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-UmQfM4S-84c/WMuhwduU9-I/AAAAAAAAEd8/8oztBbxuBQQbI_MrGYZXRXqJ9OOCSHEcQCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.43.25.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The second true action should be a refresh of your detail region...and thats all.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Live demo is available&nbsp;<a href="https://apex.oracle.com/pls/apex/f?p=100309:28" target="_blank">here</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">You can use similar approach if you want this to work with a multiple selected rows (for example in editable grid) but then you should change Set Value DA and where condition of your emp query to support this.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Enjoy!</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><i style="background-color: white; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px;">Tested on APEX&nbsp;5.1.0.00.45</i></div><br /></div> Marko Gorički tag:blogger.com,1999:blog-1003209687173038896.post-87993622082839211 Fri Mar 17 2017 05:03:00 GMT-0400 (EDT) ODTUG Turns 20 http://www.odtug.com/p/bl/et/blogaid=684&source=1 ODTUG Turns 20On March 13, 2017, ODTUG celebrated its 20th birthday! Yes, there’s been a lot of changes over the years, but one thing remains the same: ODTUG’s commitment to keeping you on the cutting-edge of the constantly changing Oracle technology landscape. Check out these highlights: ODTUG http://www.odtug.com/p/bl/et/blogaid=684&source=1 Wed Mar 15 2017 09:32:08 GMT-0400 (EDT) Iceland, Iceland, Baby http://spendolini.blogspot.com/2017/03/iceland-iceland-baby.html <p>Alright, stop!  Collaborate and listen!  Ok, I’ll be the one to take my own advice here and stop...</p><p>Later this month, I’ll be heading to Reykjavík, Iceland to deliver our 3-day training class “Developing Desktop APEX Applications”.  This class will be open to the public and costs about $2500 per student, so anyone is welcome to sign up. You’ll have to make your way to Iceland, of course.</p><p><img style="display: block; margin-left: auto; margin-right: auto;" title="miracle_logo1.png" src="https://lh3.googleusercontent.com/-93e23u3Ysr4/WMqI1UcwCDI/AAAAAAAAAc8/75aaeY0Vap8/miracle_logo1.png?imgmax=1600" alt="Miracle logo1" width="147" height="28" border="0" /></p><p>Here’s a brief overview of what we’re going to cover:</p><p><em>This 3-day course is an introduction to developing web applications using Oracle Application Express, or simply APEX. The course starts out with an overview of data model of the application that student will build. It then transitions to the SQL Workshop portion of APEX, where basic database object management concepts are addressed.</em></p><p><em></em><em>The bulk of the remainder of the class focuses on building an APEX application, starting with the core components that make up the foundation of the application. Students will then build several forms and reports, which allow user interaction with the data. Next, additional types of forms and reports will be introduced, as well as more advanced techniques used when managing them. The course will conclude with a review of the basic security attributes of an application as well as how to prepare and deploy it to a production environment.</em></p><p>The course will run from March 28th through March 30th, and will be held in a location TBD in Reykjavík. More details, as well as the course outline and a link to register can be found on Miracle’s site here: <a href="http://miracle.is/en/building-apex-applications/">http://miracle.is/en/building-apex-applications/</a></p> Scott tag:blogger.com,1999:blog-8449039.post-8659831856170805387 Tue Mar 14 2017 19:37:00 GMT-0400 (EDT) Taste of KScope 2017 Webinars http://spendolini.blogspot.com/2017/03/taste-of-kscope-2017-webinars.html <p>This Thursday, I’ll be participating in the Taste of KScope 2017 webinar series by presenting GET POST ORDS JSON: Web Services for APEX Decoded.  The webinar will begin at noon EDT on Thursday, March 16th.  The webinar is completely free, and you don’t need to be an ODTUG member to attend.</p><p>Here’s a summary of the abstract:</p><p><em>Web Services in the APEX world are becoming more and more popular.  However, there is still a lot of confusion as to what they are and how they could benefit the APEX developer.  After a review of the syntax and jargon associated with web services, this session will review and boil down web services to their basic components.  It will then demonstrate how APEX developers can start to use these powerful components - both to send and receive data from other sites.  </em></p><p>Not only will I be presenting this session at KScope later this year, but I’ve also done it a few times already, so most of the kinks are (hopefully) worked out.</p><p>You can register for the webinar here: <a href="https://attendee.gotowebinar.com/register/2300788935263147265" target="blank">https://attendee.gotowebinar.com/register/2300788935263147265</a></p> Scott tag:blogger.com,1999:blog-8449039.post-4562458505101911573 Tue Mar 14 2017 18:05:00 GMT-0400 (EDT) 12cR1 RMAN Restore/Duplicate from ASM to Non ASM takes a longer time waiting for the ASMB process http://jaffardba.blogspot.com/2017/03/12cr1-rman-restoreduplicate-from-asm-to.html <div dir="ltr" style="text-align: left;" trbidi="on">Yet another exciting journey with Oracle bugs and challenges. Here is the story for you.<br /><br />One of our recent successful migrations was a single instance Oracle EBS 12cR1 database to Oracle Super Cluster M7 as a RAC database with 2 instances on the same DB version (12.1.0.2). Subsequently, the customer wants to run through EBS cloning and set up an Oracle active data guard configuration.<br /><br />The target systems are not Super Cluster. The requirement to clone and set up an Oracle data guard is to configure as a single-instance database onto a filesystem (non-ASM). After initiating the cloning procedure using the DUPLICATE TARGET DATABASE method trough RMAN, we noticed that RMAN is taking significant time to restore(ship) the data files to the remote server. Also, the following warning messages were appeared in the alert.log:<br /><br /><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"></span></span><br /><div></div><div><span style="font-size: x-small;"><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"></span></span></span><br /><div><span style="font-size: x-small;"><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">ASMB started with pid=63, OS id=18085</span></span></span></div><span style="font-size: x-small;"><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><div>WARNING: failed to start ASMB (connection failed) state=0x1 sid=''</div><div>WARNING: ASMB exiting with error</div><div>Starting background process ASMB</div><div>Sat Mar 11 13:53:24 2017</div><div>ASMB started with pid=63, OS id=18087</div><div>WARNING: failed to start ASMB (connection failed) state=0x1 sid=''</div><div>WARNING: ASMB exiting with error</div><div>Starting background process ASMB</div><div>Sat Mar 11 13:53:27 2017</div><div>ASMB started with pid=63, OS id=18089</div><div>WARNING: failed to start ASMB (connection failed) state=0x1 sid=''</div><div>WARNING: ASMB exiting with error</div><div>Starting background process ASMB</div></span></span>&nbsp;</span></div><br />The situation raised couple of concerns in our minds:<br /><ol style="text-align: left;"><li>Why is the restore is too slow from RMAN? (while there is no Network latency and DB files are not so big sized)</li><li>Why Oracle is looking for an ASM instance on a non-Cluster home? (not even a standard Grid home)</li></ol>After some initial investigation, we come across following MOS Docs: <br /><ul style="text-align: left;"><li>'<b>12c RMAN Operations from ASM To Non-ASM Slow (Doc ID 2081537.1)</b>'.<span style="font-size: x-small;">&nbsp;</span></li><li><span style="font-size: x-small;"><span class="xq" id="kmPgTpl:sd_r1:0:dv_rDoc:0:ol22" style="color: black; font-size: 130%; font-weight: bold;">WARNING: failed to start ASMB after RAC Database on ASM converted to Single Instance Non-ASM Database (Doc ID 2138520.1)</span> </span></li></ul>According to the above MOS Docs, this is an expected behavior&nbsp; due to an&nbsp; <span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">Unpublished&nbsp;<b>BUG 19503821: &nbsp;RMAN CATALOG EXTREMELY SLOW WHEN MIGRATING DATABASE FROM ASM TO FILE SYSTEM</b></span><br /><br />You need to apply a patch <b>19503821 </b>to overcome from the bug.<br /><br /><br />If you similar demand, make sure you apply the patch in your environmet before you proceed with the restore/duplicate procedure.<br /><br />-- Excerpt from the above notes:<br /><br /><u>APPLIES TO</u>:<br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">Oracle Database - Enterprise Edition - Version </span><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">12.1.0.1 to 12.1.0.2 [Release 12.1]</span></span><br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">&nbsp;</span>Information in this document applies to any platform.</span><br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">&nbsp; </span><br /><u>SYMPTOMS</u>:<br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"></span><br /><span style="font-size: x-small;">1*. RAC Database with ASM has been converted or restored to Standalone Single Instance Non-ASM Database.</span><br /><span style="font-size: x-small;">2*. From the RDBMS alert.log, it is showing continuous following messages.</span><br /><span style="font-size: x-small;"><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"></span></span><br />3*.RMAN Restore/Duplicate from ASM to Non ASM in 12.1 take a longer time waiting for the ASMB process. <br />4*.Any RMAN command at the mount state which involves Non ASM location can take more time.<br /><br /><span style="font-size: x-small;">&nbsp;</span><u>SOLUTION</u>:<br /><br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"></span><br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><span style="font-size: x-small;">Apply the patch 19503821, if not available for your version/OS then please log a SR with the support to get the patch for your version.</span></span><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><br /></span><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><br /></span></div> The Human Fly tag:blogger.com,1999:blog-19771507.post-116618770481114125 Tue Mar 14 2017 09:51:00 GMT-0400 (EDT) Speaking at DOAG and RMOUG rocked http://oradbdev.mathiasmagnusson.com/2017/03/14/speaking-report/ <p>As I wrote a while <a href="http://oradbdev.mathiasmagnusson.com/2016/11/06/signing-up-for-scary-stuff/">back</a> I was accepted to speak both at the User Group Leader summit at DOAG16 and at RMOUG Training Days.</p> <p>The first one was a short presentation where I talked about a large bug in Oracle security and the need to patch and upgrade to not have that exposure. It was great fun as it was limited to a four-minute talk. I learned a lot from preparing for it as that short time allows for no questions and no spur of the moment comments. Each slide has to be carefully timed to make sure the time is enough for all slides.</p> <p>The last one was about a customer case where a severe performance issue was handled where I talk about all the assumptions we challenged in the process of resolving it. The job took 36 hours and it could only use 8 and soon the amount of work was expected to double. It ended up taking just a few minutes when we were done. Part regular tuning and part using the &#8220;magic&#8221; of the EXADATA.</p> <p>While the talk ended up having few attendees &#8211; competing with <a href="https://twitter.com/sqlmaria?lang=en">Maria Colgan</a> and <a href="https://twitter.com/oraclegraham?lang=en">Graham Wood</a> is tough &#8211; it was a great experience. I have not presented at a conference this big before. Training Days is also a conference that scares me to present at. I lived in Denver and my respect for the conference, the presenters and the quality expected is almost at an unhealthy level. So being there to present was a way to slay a dragon of mine. I had a great time at the conference and I enjoyed presenting. Even though I did not have an oversubscribed room, those who came seems to have enjoyed the session as I was rewarded with a 9.0 rating for the talk.</p> <p>If you&#8217;re thinking about maybe going to Training Days next year, my advice is to do it. It is a great conference and it is extremely well-organized. It is small enough to know the layout and the rooms fast, while still being big enough to have a lot of great talks to choose from every session. There were several where I wanted to go to three and I still regret having missed those where 2-3 fantastic sessions were held at the same time.</p> <p>I really liked the effort made to make the biggest names available and approachable by everyone by having them have their own tables at lunch time and letting people sit at the table where one of the persons they respect the most sits. I really enjoyed my lunch at <a href="https://twitter.com/carymillsap?lang=en">Cary Millsap&#8217;s</a> table. It was a great group and a very inspiring discussion about performance and discussing old battles in the field.</p> <p>It is far away, but I&#8217;ll be back. I had a blast.</p> mathias http://oradbdev.mathiasmagnusson.com/?p=472 Tue Mar 14 2017 05:50:23 GMT-0400 (EDT) Show greyscale icon as red https://jeffkemponoracle.com/2017/03/14/show-greyscale-icon-as-red/ <p>I have an editable tabular form using Apex&#8217;s old greyscale edit link icons:</p> <p><img data-attachment-id="3776" data-permalink="https://jeffkemponoracle.com/2017/03/14/show-greyscale-icon-as-red/greyscale-icons/" data-orig-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=1108" data-orig-size="697,190" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="greyscale-icons" data-image-description="" data-medium-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=1108?w=300" data-large-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=1108?w=697" class="alignnone size-full wp-image-3776" src="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=1108" alt="greyscale-icons" srcset="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png 697w, https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=150 150w, https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=300 300w" sizes="(max-width: 697px) 100vw, 697px" /></p> <p>The users complained that they currently have to click each link to drill down to the detail records to find and fix any errors; they wanted the screen to indicate which detail records were already fine and which ones needed attention.</p> <p>Since screen real-estate is limited here, I wanted to indicate the problems by showing a red edit link instead of the default greyscale one; since this application is using an old theme I didn&#8217;t feel like converting it to use Font Awesome (not yet, at least) and neither did I want to create a whole new image and upload it. Instead, I tried a CSS trick to convert the greyscale image to a red shade.</p> <p>I used this informative post to work out what I needed: <a href="https://css-tricks.com/color-filters-can-turn-your-gray-skies-blue/">https://css-tricks.com/color-filters-can-turn-your-gray-skies-blue/</a></p> <p><em>WARNING: Unfortunately this trick does NOT work in IE (tested in IE11). Blast.</em></p> <p>Firstly, I added a column to the underlying query that determines if the error needs to be indicated or not:</p> <pre class="brush: sql; title: ; notranslate"> select ..., case when {error condition} then 'btnerr' end as year1_err from mytable... </pre> <p>I set the new column type to <strong>Hidden Column</strong>.</p> <p>The link column is rendered using a <strong>Link</strong>-type column, with <strong>Link Text</strong> set to:</p> <pre><code>&lt;img src="#IMAGE_PREFIX#e2.gif" alt=""&gt; </code></pre> <p>I changed this to:</p> <pre><code>&lt;img src="#IMAGE_PREFIX#e2.gif" alt="" class="#YEAR1_ERR#"&gt; </code></pre> <p>What this does is if there is an error for a particular record, the class <code>"btnerr"</code> is added to the img tag. Rows with no error will simply have <code>class=""</code> which does nothing.</p> <p>Now, to make the greyscale image show up as red, I need to add an SVG filter to the <strong>HTML Header</strong> in the page:</p> <pre class="brush: xml; title: ; notranslate"> &lt;svg style=&quot;display:none&quot;&gt;&lt;defs&gt; &lt;filter id=&quot;redshader&quot;&gt; &lt;feColorMatrix type=&quot;matrix&quot; values=&quot;0.7 0.7 0.7 0 0 0.2 0.2 0.2 0 0 0.2 0.2 0.2 0 0 0 0 0 1 0&quot;/&gt; &lt;/filter&gt; &lt;/defs&gt;&lt;/svg&gt; </pre> <p>I made up the values for the R G B lines with some trial and error. The filter is applied to the buttons with the btnerr class with this CSS in the <strong>Inline CSS</strong> property of the page:</p> <pre><code>img.btnerr {filter:url(#redshader);} </code></pre> <p>The result is quite effective:</p> <p><img data-attachment-id="3799" data-permalink="https://jeffkemponoracle.com/2017/03/14/show-greyscale-icon-as-red/greyscale-colorize/" data-orig-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=1108" data-orig-size="699,186" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="greyscale-colorize" data-image-description="" data-medium-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=1108?w=300" data-large-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=1108?w=699" class="alignnone size-full wp-image-3799" src="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=1108" alt="greyscale-colorize" srcset="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png 699w, https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=150 150w, https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=300 300w" sizes="(max-width: 699px) 100vw, 699px" /></p> <p>But, as I noted earlier, this solution does not work in IE, so that&#8217;s a big fail.</p> <p><em>NOTE: if this application was using the Universal Theme I would simply apply a simple font color style to the icon since it would be using a font instead of an image icon.</em></p><br />Filed under: <a href='https://jeffkemponoracle.com/category/oracle/apex/'>APEX</a> Tagged: <a href='https://jeffkemponoracle.com/tag/apex/'>APEX</a>, <a href='https://jeffkemponoracle.com/tag/css/'>CSS</a>, <a href='https://jeffkemponoracle.com/tag/tips-tricks/'>tips-&amp;-tricks</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffkemponoracle.wordpress.com/3774/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jeffkemponoracle.com&#038;blog=12972578&#038;post=3774&#038;subd=jeffkemponoracle&#038;ref=&#038;feed=1" width="1" height="1" /> Jeffrey Kemp http://jeffkemponoracle.com/?p=3774 Tue Mar 14 2017 04:03:18 GMT-0400 (EDT) Font APEX between versions http://www.grassroots-oracle.com/2017/03/font-apex-between-versions.html Sometimes, it's the little things in an application that make users happy.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-G30evTbf3x4/WMaXwgThxAI/AAAAAAAAQtY/7dg8GUgfkrYEJl9v4lbqR034Dp1gNq0DQCLcB/s1600/icon_example2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-G30evTbf3x4/WMaXwgThxAI/AAAAAAAAQtY/7dg8GUgfkrYEJl9v4lbqR034Dp1gNq0DQCLcB/s1600/icon_example2.png" /></a></div><br />Sometimes, it's just the icon on a darn button, card, or menu that makes all the difference.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-BlDVJrjTLI4/WMaI3tkpVpI/AAAAAAAAQtE/PKbqFX36PxkYwZRzZHeYtqbKIPt9V13VACLcB/s1600/icon_example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-BlDVJrjTLI4/WMaI3tkpVpI/AAAAAAAAQtE/PKbqFX36PxkYwZRzZHeYtqbKIPt9V13VACLcB/s1600/icon_example.png" /></a></div><br />Surely by now you've encountered using icons within Oracle APEX, and we've come a long way since <a href="http://apex.shak.us/post/35134643503/icons-in-buttons-theme-25-blue-responsive" target="_blank">Theme 25</a>. To get anyone up to speed, APEX 5.0 saw the introduction of <a href="http://fontawesome.io/icons/" target="_blank">Font Awesome</a>&nbsp;baked into the builder, which is a reputable CSS icon library for such things.<br /><br /><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody><tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-rykIdKIiLuo/WMaI3nfquDI/AAAAAAAAQtA/0ZtqDfh3XxM1myu49HDVZFpFQF9JdMyrACLcB/s1600/fontapex.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://3.bp.blogspot.com/-rykIdKIiLuo/WMaI3nfquDI/AAAAAAAAQtA/0ZtqDfh3XxM1myu49HDVZFpFQF9JdMyrACLcB/s320/fontapex.png" width="35" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">5.1 vs 5.0</td></tr></tbody></table>As with other 'plugins', Font Awesome library releases new versions with new icons at a different schedule to APEX releases. It's easy to get your 5.0 instance up to speed with the latest library, thanks to Patrick's <a href="http://www.inside-oracle-apex.com/apex-5-0-upgrade-to-the-newest-fontawesome-icon-library/" target="_blank">simple write-up</a>.<br /><br />Now the same goes for the 1000+ icons that come with Font APEX, some of them database specific which for some reason excites me a little. If you need to catch up, Dick Dral has a great <a href="https://dickdral.blogspot.com.au/2016/12/new-icons-in-apex-51.html" target="_blank">low down</a>&nbsp;on what makes Font APEX awesome, so to speak, and for those who are familiar with Dick's work, that's a double down on <a href="http://www.grassroots-oracle.com/2015/11/apex-gaming-competition-submission-boggex.html" target="_blank">word play</a>&nbsp;-&nbsp;see his URL of his <a href="http://www.speech2form.com/ords/f?p=opfg:fonts51:0" target="_blank">sample application</a>, which is growing to quite a utility.<br /><br />But if you would like to use the latest library, or even use it within APEX 5.0, Max Tremblay gave us <a href="http://max-tremblay.blogspot.com.au/2017/02/using-font-apex-in-apex-50.html" target="_blank">this great post</a>. It's a little more involved than Patrick's, but things aren't as easy.<br /><br />The long snapshot of menu icons shows the difference between 5.1 on the left, and 5.0 on the right. They've cleaner, they scale better, and we can no doubt all thank Shakeeb.<br /><br />Max provided some CSS that's required to suit adjust usage to Font APEX, but having an app with icons found all over the place, I encountered some other components that needed adjustment. With some further back &amp; forth on the <a href="https://orclapex.slack.com/" target="_blank">APEX slack channel</a>, Max helped me come up with these.<br /><pre class="brush:plain">/* Font APEX <br />CSS required to make Font APEX from 5.1 work in 5.0<br />Headstart provided by Max Tremblay<br />https://max-tremblay.blogspot.com.au/2017/02/using-font-apex-in-apex-50.html<br />*/<br /><br />/* Most icons around the place */<br />.t-Icon[class*=' fa-'],.t-Icon[class^=fa-]{<br /> font-family: font-apex!important;<br /> font-size: initial;<br />}<br /><br />/* Left side menu */<br />.t-TreeNav .a-TreeView-node--topLevel&gt;.a-TreeView-content .fa{<br /> font-size: initial;<br />}<br /><br />/* Left side sub menu */<br />#t_TreeNav ul ul .a-TreeView-content .fa {<br /> font-size: 12px;<br /> padding: 10px 0;<br />}<br /><br />/* Navbar dropdown */<br />.t-NavigationBar-menu .a-Menu-content .a-Menu-item .fa {<br /> font-size: 12px;<br />}<br /><br />/* Navbar top row */<br />.t-NavigationBar-item span.t-Icon {<br /> padding-right: 5px;<br /> padding-top: 0px;<br /> font-size: 14px;<br />}<br /><br />/* Slide tooltip plugin */<br />.a-DetailedContentList-icon {<br /> padding-top: 10px;<br />}<br /><br />/* Custom icon usage within breadcrumb */<br />.t-Breadcrumb-label .fa {<br /> padding-top: 3px; <br />}</pre>I think this once again shows the versatility APEX has between versions, quite literally replacing one plugin with another, with a little help from the community.<br /><br />#letswreckthistogether Scott Wesley tag:blogger.com,1999:blog-4818542164384221282.post-785818643346272452 Mon Mar 13 2017 10:43:00 GMT-0400 (EDT) Customising chart colours in APEX 5.1 http://www.explorer-development.uk.com/customising-chart-colours-apex-5-1/ <p>Customising chart colours in APEX 5.1 One of the new features of APEX 5.1 is the introduction of Jet Charts which are highly customisable using JavaScript and CSS. One particular issue I recently came across was the removal of two chart region attributes that allowed easy customisation of a chart, namely COLOR SCHEME and CUSTOM</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/customising-chart-colours-apex-5-1/">Customising chart colours in APEX 5.1</a> appeared first on <a rel="nofollow" href="http://www.explorer-development.uk.com">Oracle Application Express (APEX) Consultants, developers and APEX training courses UK</a>.</p> Explorer Development UK http://www.explorer-development.uk.com/?p=4134 Mon Mar 13 2017 08:13:12 GMT-0400 (EDT) Recover accidentally deleted APEX components: Flashback Export https://blogs.oracle.com/apex/entry/recover_accidentally_deleted_apex_components <p><img src="https://blogs.oracle.com/apex/resource/logo-export-flashback.png" alt="Flashback Export of APEX Components" align="right" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">Accidentally deleting an Application Express page or shared component (or even a complete application) can be a real pain for the developer. Even a simple component, like an LOV, might rely on a complex SQL query, which is hard to recover manually.</font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2">The good news is: If you act quickly, you can recover your application or component yourself. The Flashback Option within the Application Express export functionality, helps you with this. Our <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/5921/index-en.html" target="_blank" title="Application Express tip &quot;Recover accidentally deleted APEX components: Flashback Export&quot;">latest Application Express tip</a> shows, how this works.</font></p> <p> </p> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/recover_accidentally_deleted_apex_components Mon Mar 13 2017 08:00:00 GMT-0400 (EDT) Recover accidentally deleted APEX components: Flashback Export https://blogs.oracle.com/apex/entry/recover_accidentally_deleted_apex_components <p><img src="https://blogs.oracle.com/apex/resource/logo-export-flashback.png" alt="Flashback Export of APEX Components" align="right" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">Accidentally deleting an Application Express page or shared component (or even a complete application) can be a real pain for the developer. Even a simple component, like an LOV, might rely on a complex SQL query, which is hard to recover manually.</font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2">The good news is: If you act quickly, you can recover your application or component yourself. The Flashback Option within the Application Express export functionality, helps you with this. Our <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/5921/index-en.html" target="_blank" title="Application Express tip &quot;Recover accidentally deleted APEX components: Flashback Export&quot;">latest Application Express tip</a> shows, how this works.</font></p> <p> </p> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/recover_accidentally_deleted_apex_components Mon Mar 13 2017 08:00:00 GMT-0400 (EDT) Versehentlich gelöschte Komponenten wiederherstellen https://blogs.oracle.com/apexcommunity_deutsch/entry/versehentlich_gel%C3%B6schte_anwendung_oder_komponenten <p><font face="Arial, Helvetica, sans-serif" style="font-size: 16px;"><img src="https://blogs.oracle.com/apexcommunity_deutsch/resource/logo-export-flashback.png" alt="Export mit der Flashback Option" align="right" hspace="5" vspace="5" /></font><font size="2"><font face="tahoma, arial, helvetica, sans-serif">Es kommt nicht oft vor, wenn es jedoch passiert, ist der Ärger groß: Eine Anwendung, eine Seite oder eine Gemeinsame Komponente wurde versehentlich gelöscht. Wenn man schnell ist, kann man den Fehler ganz einfach beheben - und zwar mit der&nbsp;</font><font face="tahoma, arial, helvetica, sans-serif"><span class="italicbodycopy" style="line-height: 16pt; font-style: italic;">Flashback-Option</span>&nbsp;beim&nbsp;<span class="boldbodycopy" style="line-height: 16pt; font-weight: bold;">Export&nbsp;</span>einer Anwendung, Seite oder Komponente.&nbsp;Erfahren Sie in unserem <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/5921/index.html" target="_blank" title="Community Tipp &quot;Versehentlich gelöschte Anwendung oder Komponenten wiederherstellen&quot;">aktuellen Community-Tipp</a>, wie das geht.</font></font></p> Carsten Czarski-Oracle https://blogs.oracle.com/apexcommunity_deutsch/entry/versehentlich_gel%C3%B6schte_anwendung_oder_komponenten Mon Mar 13 2017 03:00:00 GMT-0400 (EDT) Fixing Skillbuilders Super LOV (v3) in APEX 5.1 http://b-apex.blogspot.com/2017/03/fixing-skillbuilders-super-lov-v3-in.html <div>We have already migrated some of the existing applications to a new version of Oracle Application Express - 5.1. After few weeks in production I can just say...do it :). But when doing an upgrade there is always a possibility that you will hit some issues. For me one of the issue was Skillbuilders Super LOV (v3), and it looks like I'm not alone (<a href="https://community.oracle.com/thread/4010580">https://community.oracle.com/thread/4010580</a>)</div><div><br /></div><div>So what is the issue?&nbsp;</div><div><br /></div><div>When you select a value (Super LOV item) and try to save a form then the value is not submitted. Now if you are lucky, then your item is mandatory and you will see the error - end users will tell you right away that something is not working. If your item is not mandatory then you might see this error much later, with complaints that some data is not saved correctly.</div><div><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-waq-SrcSRPs/WMY37Box3qI/AAAAAAAASEw/IoUAq7vbam8mT8A4dLMK6v_nJpss8d4RACLcB/s1600/fslov_1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="179" src="https://1.bp.blogspot.com/-waq-SrcSRPs/WMY37Box3qI/AAAAAAAASEw/IoUAq7vbam8mT8A4dLMK6v_nJpss8d4RACLcB/s640/fslov_1.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Value is selected</td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-OLQb-AjN7pQ/WMY4X0BRulI/AAAAAAAASE0/Ecm2WIqhQHg_D5Le-dHqJ69RjI4kyv-IwCLcB/s1600/fslov_2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="192" src="https://1.bp.blogspot.com/-OLQb-AjN7pQ/WMY4X0BRulI/AAAAAAAASE0/Ecm2WIqhQHg_D5Le-dHqJ69RjI4kyv-IwCLcB/s640/fslov_2.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">After submit, value is cleared and we see an error</td></tr></tbody></table><div><br /></div><div>After a bit of research I have found a quick fix, that you can use, until the plugin is fixed by original authors. What has to be done is just one small change in plugin's render function. Search in the source for line with <b>disabled="disabled"</b> (should be somewhere in line 157, if you haven't done some changes)</div><div><br /></div><div style="text-align: center;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">THEN '<span style="color: red;">disabled="disabled"</span> onfocus="this.blur();"'</span></div><div><br /></div><div>and change it to:</div><div><br /></div><div style="text-align: center;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">THEN '<span style="color: red;">readonly="readonly"</span> onfocus="this.blur();"'</span></div><div style="text-align: center;"><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-Ufgpkr8eqeU/WMY6fJOsANI/AAAAAAAASFE/qDpRQqgFFQEOmPuMWieJ4DRn76FkbWXWgCLcB/s1600/fslov_3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="338" src="https://1.bp.blogspot.com/-Ufgpkr8eqeU/WMY6fJOsANI/AAAAAAAASFE/qDpRQqgFFQEOmPuMWieJ4DRn76FkbWXWgCLcB/s640/fslov_3.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Notice the change is line 157 and 158</td></tr></tbody></table><div><br /></div><div>It looks like that something has changed from version 5.0 to 5.1. If you have an item with a property <span style="color: red;">disabled="disabled"</span>, then after submitting the page you will not see value for this item.</div><div><br /></div><div>To test this, I have created an After Submit Process with the code:</div><div><br /></div><div style="text-align: center;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">apex_debug.error('Value of P2_LOV : %s', :P2_LOV);</span></div><div style="text-align: center;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><br /></span></div><div style="text-align: left;">I have tried this on version 5.0.4 and 5.1 and after checking the debug there is a clear difference:</div><div style="text-align: left;"><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-hgEDeZrpa1A/WMY-Se-v95I/AAAAAAAASFc/ihtzeuRt9K8agHzZAUefcL06eAA5s-aaQCLcB/s1600/fslov_4.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="220" src="https://4.bp.blogspot.com/-hgEDeZrpa1A/WMY-Se-v95I/AAAAAAAASFc/ihtzeuRt9K8agHzZAUefcL06eAA5s-aaQCLcB/s640/fslov_4.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Debug in APEX 5.0</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-50x4I_CRr9Y/WMY-SPZ9ebI/AAAAAAAASFY/wYSV08aPaVoL16QplLgDsZiSqlr7AMFxQCLcB/s1600/fslov_5.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="218" src="https://2.bp.blogspot.com/-50x4I_CRr9Y/WMY-SPZ9ebI/AAAAAAAASFY/wYSV08aPaVoL16QplLgDsZiSqlr7AMFxQCLcB/s640/fslov_5.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Debug in APEX 5.1</td></tr></tbody></table><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">Aljaz</span></div> Aljaž Mali tag:blogger.com,1999:blog-6273129051310972036.post-7124579738375600426 Mon Mar 13 2017 02:44:00 GMT-0400 (EDT) Get your virtual mojo on http://oradbdev.mathiasmagnusson.com/2017/03/11/get-your-virtual-mojo-on/ <p>I have for a few years created a play environment in a similar way. Getting a database installed in a VM is not too hard. But I found that I did it fairly often and not always in the same way and not always without having to resolve problems I know I had solved before but since forgotten the solution for.</p> <p>Right, write everything down. Yes, it was time for that.</p> <p>So I now have my notes in order so I can run through the creation of a new VM when a new version of any software I want to have installed becomes available.</p> <p>Since 12c is out and more importantly 12.2 was released just a week ago it was time to include multitennant in the model.</p> <p>This is what I want to have in my VM  I use to test and evaluate Oracle Database stuff.</p> <ul> <li><a href="http://www.oracle.com/technetwork/server-storage/linux/overview/index.html">Oracle Linux 7.3</a></li> <li><a href="https://www.oracle.com/database/index.html">Oracle Database 12.2 </a> <ul> <li>CDB</li> <li>PDB dev</li> <li>PDB test</li> <li>PDB prod</li> </ul> </li> <li><a href="http://www.oracle.com/technetwork/developer-tools/apex/overview/index.html">Oracle APEX 5.1</a> installed in each PDB</li> <li><a href="http://www.oracle.com/technetwork/developer-tools/rest-data-services/overview/index.html">ORDS 3.0</a></li> <li><a href="http://www.oracle.com/technetwork/middleware/glassfish/overview/index.html">Glassfish 3.1</a></li> </ul> <p>Thus, with this I have three PDBs simulating dev, test , and prod when I want to model  migrating things through an environment. Each of them has APEX so that too can be tested for migrating through an environment.</p> <p>Including ORDS and glassfish makes then installation complete and not only allows using all features of APEX but also prepares the VM to be used for REST services.</p> <p>For database work this is to me a very complete VM to test and learn new things with.</p> <p>I&#8217;d recommend that you do the same for what you want. There is the Oracle Developer VM you can get and lots of other ones too. But I find you learn a lot by creating your own. If you install yourself you also get it to be set up the way you want it.</p> <p>The one I create, I set up as a template and then I clone it to have one that I con make changes to. That allows me to have a pristine version to clone from. Yes, I could use snapshots to achieve much of the same. Having a separate template makes maintaining it much easier in my experience.</p> <p>When you do install, remember to make a snapshot at least after each individual product has been installed and configured. You will end up going back and redoing it when you run into problems or think of improvements to your install.</p> <p>The template I create I share with friends and coworkers who may not want to do their own installation. While installing teaches you lots, for some it is not worth it. They just want to play. For those people using mine or the Oracle App Development VM is a quick way to do that. Oracle provides a lot of different ones for that or when you want to try something new. All of them can be found <a href="http://www.oracle.com/technetwork/community/developer-vm/index.html">here</a>.</p> <p>To finish up, I just have to link to <a href="https://twitter.com/oraclebase">Tim Hall</a>. He has a fantastic number of articles and for this stuff his writeup of <a href="https://oracle-base.com/articles/12c/oracle-db-12cr2-installation-on-oracle-linux-6-and-7">installing Oracle DB 12.2</a>. When I find a problem it is most of the time already covered in his article. Even more impressing is that he gets it out before you even get your VirtualBox  loaded. I think he had the 12.2 version of this updated and posted within four hours of the release of 12.2.</p> <p>GO! Create your own VM and get hacking. 12.2 has too much cool stuff in it to not keep you hacking for a long time.</p> <p>Make hacking a legal sport. <img src="https://s.w.org/images/core/emoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> mathias http://oradbdev.mathiasmagnusson.com/?p=423 Sat Mar 11 2017 01:01:27 GMT-0500 (EST) Low http://spendolini.blogspot.com/2017/03/low.html <div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-P6wm3UBis80/WMFnLETZi1I/AAAAAAAAAcg/dVDNoc0Ku00UYqBiezBQ9vWED3Cw6FXBgCLcB/s1600/Low_fr_tp.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="https://1.bp.blogspot.com/-P6wm3UBis80/WMFnLETZi1I/AAAAAAAAAcg/dVDNoc0Ku00UYqBiezBQ9vWED3Cw6FXBgCLcB/s1600/Low_fr_tp.JPG" /></a></div><br />Recently, there has been a lot of buzz about "low code" development platforms. &nbsp;Even the Oracle APEX team has embraced this term (see&nbsp;<a href="https://apex.oracle.com/lowcode/">https://apex.oracle.com/lowcode/</a> for details). This approach allows the "citizen developer" - someone without a traditional IT background - to build basic applications with little to no code. Platforms such as QuickBase, Appian, Mendix and even SalesForce.com have popup up, offering the promise to quickly build applications with little to no code. &nbsp;Users from all walks of life can now build and deploy applications to some sort of cloud in just minutes!<br /><br />But is it possible to build a truly useful application with little to no code? &nbsp;Perhaps. &nbsp;Perhaps not. &nbsp;I suppose that all depends on what you want the application to do and what data it will use. &nbsp;It probably also depends on the security of the application, and how easy it will be to integrate into a corporate identity management system behind a firewall. &nbsp;It also probably depends on what type of availability and reliability you need. &nbsp;And it will definitely depend on how much any of these solutions cost, especially if your application gets popular and more users need to use it. &nbsp;While some of these companies are solid and not going anywhere soon, a few of these names are new to me, and if they were to fold, it would not be the first time a startup failed.<br /><br />While I have not tried any of the products that I mentioned, I do have a bit of experience with Oracle APEX, so I'll speak from that angle. APEX does fit into the "low code" profile, as you can easily build an application that manages data, provides visualizations, and even facilitates some basic workflows. &nbsp;You can do all of this without writing any code, save for maybe a query or two. &nbsp;There’s even an “App Store” of sorts - called Packaged Applications - that can get you create a fully functional point-solution application with a single click. &nbsp;I’ve seen people from skilled developers with multiple IT-related degrees to vice presidents with limited IT experience build and deploy APEX applications. &nbsp;The "citizen developer" term truly fits in here.<br /><br />However, there is a limit as to what you can make any application do without writing code. &nbsp;Over the years, APEX has done a great job of pushing this limit out further and further. &nbsp;You can create a much better looking, more secure, more functional APEX application with APEX 5.1 in much less time than you could with versions as recent as APEX 4.0. &nbsp;But even with the latest and greatest release, if you want to add some business rules or put basic conditions on a region, you’re likely going to have to use a little bit of code.<br /><br />Think about this: if you had a couple of citizen developers build a basic project management tool in APEX, and then as it becomes more popular, more people in the organization start to use it. &nbsp;Thus, the citizen developers enhance and modify it to support multiple teams, multiple users and roles, etc. &nbsp;All along, there is no oversight from IT about how the application is enhanced and managed. &nbsp;No standards are followed, as it’s totally up to the citizen developers to choose how it looks and works. &nbsp;It’s fairly likely that at some point, bad decisions were made. &nbsp;Perhaps a few security vulnerabilities were introduced, or a couple of poorly-written SQL statements were created. &nbsp;It’s not all that different from the MS Access mess, but at least this one is backed up...<br /><br />Low code is fine when it’s just that: low code. &nbsp;As soon as applications cross some threshold and become a critical component of an enterprise, it’s time to stop calling them low code and transition their ownership to the professionals. With most of the online tools, I don’t believe that this is an option, or at least not a simple one. &nbsp;If you exceed the capabilities of the platform which you’re building on, it’s going to be a good amount of work to migrate to another one.<br />This is where APEX differs. While APEX does seem to fit the low code moniker, it’s so much more capable than that. &nbsp;Calling APEX low code makes me think of other “low” branded things: low fat, low carb, <a href="https://www.youtube.com/watch?v=7poACHOknfY">low T</a>, etc. &nbsp;It’s perfectly possible to start citizen developers in APEX, and show them how to build basic applications that meet some of their less critical business needs. &nbsp;Some applications will remain somewhat simple, and that’s just fine. &nbsp;But for the ones that don’t - it doesn’t take much at all to transition ownership of that application to IT, or perhaps just monitor and manage it a bit while still allowing the citizen developer to own it. <br /><br />Those who have used APEX for years know this: it’s one of the few development platforms that you can become productive with in just a few days, but it will take your entire career to master all it can do. &nbsp;It’s an ideal platform that meets the criteria of low code. &nbsp;But it’s so much more - offering one of the most seamless transition paths from low code to enterprise applications. Scott tag:blogger.com,1999:blog-8449039.post-4107790677205309594 Fri Mar 10 2017 08:00:00 GMT-0500 (EST) A nice Descending Index Range Scan https://jeffkemponoracle.com/2017/03/10/a-nice-descending-index-range-scan/ <p>I&#8217;ve been aware of some of the ways that Oracle database optimises index accesses for queries, but I&#8217;m also aware that you have to test each critical query to ensure that the expected optimisations are taking effect.</p> <p>I had this simple query, the requirement of which is to get the &#8220;previous status&#8221; for a record from a journal table. Since the journal table records all inserts, updates and deletes, and this query is called immediately <em>after</em> an update, to get the previous status we need to query the journal for the record most recently <em>prior to </em>the most recent record. Since the &#8220;version_id&#8221; column is incremented for each update, we can use that as the sort order.</p> <pre class="brush: sql; title: ; notranslate"> select status_code from (select rownum rn, status_code from xxtim_requests$jn jn where jn.trq_id = :trq_id order by version_id desc) where rn = 2; </pre> <p>The xxtim_requests$jn table has an ordinary index on (trq_id, version_id). This query is embedded in some PL/SQL with an INTO clause &#8211; so it will only fetch one record (plus a 2nd fetch to detect TOO_MANY_ROWS which we know won&#8217;t happen).</p> <p>The table is relatively small (in dev it only has 6K records, and production data volumes are expected to grow very slowly) but regardless, I was pleased to find that (at least, in Oracle 12.1) it uses a nice optimisation so that it not only uses the index, it is choosing to use a Descending scan on it &#8211; which means it avoids a SORT operation, and should very quickly return the 2nd record that we desire.</p> <p><img data-attachment-id="3755" data-permalink="https://jeffkemponoracle.com/2017/03/10/a-nice-descending-index-range-scan/index_scan_range_descending/" data-orig-file="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=1108" data-orig-size="613,175" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="index_scan_range_descending" data-image-description="" data-medium-file="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=1108?w=300" data-large-file="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=1108?w=613" class="alignnone size-full wp-image-3755" src="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=1108" alt="index_scan_range_descending.PNG" srcset="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png 613w, https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=150 150w, https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=300 300w" sizes="(max-width: 613px) 100vw, 613px" /></p> <p>It looks quite similar in effect to the &#8220;COUNT STOPKEY&#8221; optimisation you can see on &#8220;ROWNUM=1&#8221; queries. If this was a much larger table and this query needed to be faster or was being run more frequently, I&#8217;d probably consider appending status_code to the index in order to avoid the table access. In this case, however, I don&#8217;t think it&#8217;s necessary.</p><br />Filed under: <a href='https://jeffkemponoracle.com/category/oracle/sql/'>SQL</a> Tagged: <a href='https://jeffkemponoracle.com/tag/oracle12c/'>oracle12c</a>, <a href='https://jeffkemponoracle.com/tag/sql/'>SQL</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffkemponoracle.wordpress.com/3739/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jeffkemponoracle.com&#038;blog=12972578&#038;post=3739&#038;subd=jeffkemponoracle&#038;ref=&#038;feed=1" width="1" height="1" /> Jeffrey Kemp http://jeffkemponoracle.com/?p=3739 Thu Mar 09 2017 21:06:04 GMT-0500 (EST) APEX: Updating Interactive Grid Cells https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/ <p>Moving from the old tabular form to the interactive grid takes some getting used to. Especially when trying to manually update cells with JavaScript.</p> <p>Here is an example of how to access and modify particular cells in an interactive grid with JavaScript. The example promotes an employee when the <em>Promote</em> link is clicked, which doubles the employee&#8217;s salary, and assigns him a new job.</p> <p>First I built an interactive grid on the EMP table. I&#8217;ve used all the defaults except:<br /> Enable editing with <em>Update Row</em>.<br /> Set the region&#8217;s static ID to <em>emps</em>.<br /> Added a link column with target type: <em>URL,</em> URL: <em>#</em></p> <p><img data-attachment-id="2111" data-permalink="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/ir-link/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=550" data-orig-size="511,92" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ir-link" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=550?w=511" class="alignnone size-full wp-image-2111" src="https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=550" alt="ir-link" srcset="https://ruepprich.files.wordpress.com/2017/03/ir-link.png 511w, https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=300 300w" sizes="(max-width: 511px) 100vw, 511px" /></p> <p>The link text is set to <em>Promote</em>, and I added class (ig-link) so that I can connect a dynamic action to it:</p> <p><img data-attachment-id="2127" data-permalink="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/ig-link2/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=550" data-orig-size="545,64" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ig-link2" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=550?w=545" class="alignnone size-full wp-image-2127" src="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=550" alt="ig-link2" srcset="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png 545w, https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=300 300w" sizes="(max-width: 545px) 100vw, 545px" /></p> <p>Next I created a dynamic action that fires when the <em>Promote</em> link is clicked.</p> <p><img data-attachment-id="2122" data-permalink="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/ig-da1/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=550" data-orig-size="541,236" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ig-da1" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=550?w=541" class="alignnone size-full wp-image-2122" src="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=550" alt="ig-da1" srcset="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png 541w, https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=300 300w" sizes="(max-width: 541px) 100vw, 541px" /></p> <p>The true action is a <em>Execute JavaScript Code</em> action, with the following code:</p> <pre class="brush: jscript; title: ; notranslate"> //Get the link element that was clicked var $te = $(this.triggeringElement); //Get the ID of the row var rowId = $te.closest('tr').data('id'); //Identify the particular interactive grid var ig$ = apex.region(&quot;emps&quot;).widget(); //Fetch the model for the interactive grid var model = ig$.interactiveGrid(&quot;getViews&quot;,&quot;grid&quot;).model; //Fetch the record for the particular rowId var record = model.getRecord(rowId); //Access the cell value via the column name var sal = model.getValue(record,&quot;SAL&quot;); //Set the values for the JOB and SAL cells model.setValue(record,&quot;JOB&quot;,'MANAGER'); model.setValue(record,&quot;SAL&quot;,sal*2); </pre> <p>Here is the working example:</p> <p><img data-attachment-id="2139" data-permalink="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/emps/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/emps.gif?w=550" data-orig-size="615,329" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="emps" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/emps.gif?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/emps.gif?w=550?w=550" class="alignnone size-full wp-image-2139" src="https://ruepprich.files.wordpress.com/2017/03/emps.gif?w=550" alt="emps" /></p> <p>It is worth noting that the &lt;tr&gt; element of the interactive grid row contains the row&#8217;s unique identifier. This could be a row ID or a primary key value, depending on how you configured the grid.</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2102/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2102&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2102 Thu Mar 09 2017 17:34:14 GMT-0500 (EST) Understanding Slashes and Semicolons in Oracle DDL Scripts https://www.insum.ca/understanding-slashes-semicolons-oracle-ddl-scripts/ <h1>Understanding Slashes and Semicolons in Oracle DDL Scripts</h1> <h2>Data Definition Language Problems</h2> <p>Oracle developers are often asked to create Data Definition Language (DDL) scripts to support an application. These scripts create database objects like tables, views, triggers, and PL/SQL packages.</p> <p>The developer uses a favorite database GUI tool (ex. Oracle’s <em>SQL Developer</em>) to create and test the scripts. Rigorous tests show that everything works.</p> <p>The developer then sends the script to a Database Analyst (DBA) so that the scripts can be run into a production database. The DBA does not do this; instead, the script is immediately sent back to the developer to get fixed. The developer is confused because explicit tests have proven that the script works flawlessly.</p> <p>So what’s up with this?</p> <h2>Cause of the Issue</h2> <p>Here is the simplified workflow that leads to the problem.</p> <p>1. The developer creates a table with a trigger by using the following SQL code.</p> <blockquote><p>drop table foo;</p> <p>/</p> <p>create table foo</p> <p>( id number</p> <p>,code varchar2(10)</p> <p>,description varchar2(100)</p> <p>) ;</p> <p>/</p> <p>create or replace trigger foo_trig_bi</p> <p>before insert on foo</p> <p>for each row</p> <p>begin</p> <p>:new.id := nvl(:new.id,foo_seq.nextval) ;</p> <p>end ;</p> <p>/</p></blockquote> <p>2. The developer runs this code repeatedly in <strong>SQL Developer</strong> to make sure it works flawlessly. SQL Developer’s output indicates that all is good.</p> <p>&nbsp;</p> <p><img class="size-full wp-image-7424" src="https://www.insum.ca/wp-content/uploads/2017/03/sql-developer.png" alt="sql developer" width="310" height="186" srcset="https://www.insum.ca/wp-content/uploads/2017/03/sql-developer.png 310w, https://www.insum.ca/wp-content/uploads/2017/03/sql-developer-300x180.png 300w" sizes="(max-width: 310px) 100vw, 310px" /></p> <p>&nbsp;</p> <p style="text-align: left;">3. The developer then sends the “flawless” script to the DBA who runs the “flawless” script using <strong>SQL*Plus</strong>. The result is <strong><u>not</u></strong> “flawless”. The code tries to drop the table twice and create the table twice. Errors are not good when the script will be run in a production database.</p> <h2><img class="alignnone size-full wp-image-7425" src="https://www.insum.ca/wp-content/uploads/2017/03/sql-plus-production-database.png" alt="sql plus production database" width="332" height="470" srcset="https://www.insum.ca/wp-content/uploads/2017/03/sql-plus-production-database.png 332w, https://www.insum.ca/wp-content/uploads/2017/03/sql-plus-production-database-212x300.png 212w" sizes="(max-width: 332px) 100vw, 332px" /></h2> <p>&nbsp;</p> <h2>Mastering Your Slashes and Semicolons</h2> <p>The solution is simple. Do one of the following in the script file:</p> <ul> <li>Remove the <strong>slashes</strong> that come after the <strong>drop</strong> and the <strong>table create</strong> Leave the <strong>semicolons</strong> in place.</li> </ul> <p>OR</p> <ul> <li>Remove the <strong>semicolons</strong> that come after the <strong>drop</strong> and the <strong>table create</strong> Leave the <strong>slashes</strong> in place.</li> </ul> <p>The solution works because <strong>SQL*Plus</strong> runs a simple SQL statement when it sees a trailing <strong>semicolon</strong>. It also runs the code that it finds in its buffer when it sees the trailing <strong>slash</strong>. Thus, the simple statements are run twice.</p> <p>The trigger, which is a block of PL/SQL code, needs both the <strong>semicolon</strong> and the <strong>slash</strong> at the end of the block. In this case, the <strong>semicolon</strong> is actually part of the PL/SQL syntax and is stored with the PL/SQL in the buffer; the last <strong>semicolon</strong> in the PL/SQL block is not part of the SQL statement that runs the code. The <strong>slash</strong> runs the code in the buffer.</p> <p>The rules for <strong>SQL*Plus</strong> are summarized as:</p> <ol> <li>Simple SQL statements can be terminated by a <strong>semicolon</strong> <u>OR</u> a <strong>slash</strong>.</li> <li>PL/SQL blocks must be terminated by a <strong>slash</strong>.</li> </ol> <p>The rules are illustrated in the following <strong>SQL*Plus</strong> snippets.</p> <p><img class="alignnone size-full wp-image-7423" src="https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements.png" alt="slashes sql statements" width="314" height="311" srcset="https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements.png 314w, https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements-150x150.png 150w, https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements-300x297.png 300w, https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements-100x100.png 100w" sizes="(max-width: 314px) 100vw, 314px" />   <img class="alignnone size-full wp-image-7422" src="https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql.png" alt="semicolons sql lpsql" width="313" height="310" srcset="https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql.png 313w, https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql-150x150.png 150w, https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql-300x297.png 300w, https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql-100x100.png 100w" sizes="(max-width: 313px) 100vw, 313px" /></p> <p><strong>SQL Developer</strong> is a bit friendlier because it automatically does the correct action no matter how the SQL statements are terminated.</p> <p>&nbsp;</p> <h1>Comments on the Tools</h1> <p><strong>SQL Developer</strong> and similar products are rich GUI tools that developers love; however, in the past, the early versions were buggy. The buggy history makes DBAs uneasy with these tools.</p> <p><strong>SQL*Plus</strong>, by comparison, has a very “old school” command line interface; however, it has a long history and many DBAs consider it to be the “gold standard” of stability and reliability.</p> <p>As a result, many DBAs run scripts into their production databases with <strong>SQL*Plus</strong>, a tool that they trust. This conservative point of view reflects the fact that when a production database goes down, the DBA is hanged, not the developer.</p> <p>Once we all understand the situation and code accordingly, everyone is happy.</p> <p>The post <a rel="nofollow" href="https://www.insum.ca/understanding-slashes-semicolons-oracle-ddl-scripts/">Understanding Slashes and Semicolons in Oracle DDL Scripts</a> appeared first on <a rel="nofollow" href="https://www.insum.ca">Insum</a>.</p> Patrick Cimolini https://www.insum.ca/?p=7421 Thu Mar 09 2017 14:37:30 GMT-0500 (EST) jQuery, Security and Web Services - Oh My! http://spendolini.blogspot.com/2017/03/jquery-security-and-web-services-oh-my.html <br />It's going to be a hectic couple of weeks for me, as I get ready to head to Utah this weekend for the annual <a href="http://www.utoug.org/TrainingDays" target="_blank">UTOUG Training Days</a> conference next week. &nbsp;I love Salt Lake City, and the UTOUG conference is just the right size - not too large, but large enough that most of the rooms are full of attendees.<br /><div><br /></div><div>This year, I've got three slots, each as different as the next:</div><div><br /></div><div><u>jQuery &amp; APEX Primer</u></div><div>This session is aimed at the APEX developer who has just never had the time to get into the detils of jQuery. &nbsp;It starts with an overview of the basics, and then proceeds to demonstrate these concepts using a simple HTML page. &nbsp;After that, it will show some more practical examples of how jQuery can work in an APEX application.</div><div><br /></div><div><u>Secure Your APEX Applications with APEX-SERT</u></div><div>Security is as important as ever, and this session will show you how APEX-SERT - a free, open source tool - can be integrated into your development process. &nbsp;Once installed, APEX-SERT is instantly available to any and all workspace developers. &nbsp;Evaluations can also be scheduled to run daily, so your application is constantly being checked for potential threats.</div><div><br /></div><div><u>GET POST ORDS JSON: Web Services for APEX Decoded</u></div><div>Lastly, web services are also one of the things that APEX developers may not have a lot of experience with. &nbsp;They are becoming more and more critical in modern web development, and it's a matter of when you'll need to learn them, not if. &nbsp;This session covers the basics then walks through how to take a standard APEX form and modify it to use web services instead of the built-in DML &nbsp;processes.</div><div><br /></div><div>If that wasn't enough, I'll also be a part of the APEX panel on Tuesday - but will likely have to bail out a bit early to make my flights back home.</div><div><br /></div><div>The full schedule can be found here:&nbsp;<a href="http://www.utoug.org/Schedule">http://www.utoug.org/Schedule</a></div><div><br /></div><div>See you in SLC!<br /><br /></div> Scott tag:blogger.com,1999:blog-8449039.post-3397484583696757096 Thu Mar 09 2017 12:33:00 GMT-0500 (EST) Happy 20th Birthday ODTUG http://www.odtug.com/p/bl/et/blogaid=680&source=1 On March 13, 2017, ODTUG celebrates its 20th birthday! 20 years of evolving technology and ODTUG is still the user group that keeps you on the cutting-edge of the constantly changing Oracle technology landscape. In honor of ODTUG’s birthday you can save $200 off your ODTUG Kscope17 registration. ODTUG http://www.odtug.com/p/bl/et/blogaid=680&source=1 Thu Mar 09 2017 11:22:59 GMT-0500 (EST) Welcome to Ghost http://vmorneau.me/welcome-to-ghost/ <p>You're live! Nice. We've put together a little post to introduce you to the Ghost editor and get you started. You can manage your content by signing in to the admin area at <code>&lt;your blog URL&gt;/ghost/</code>. When you arrive, you can select this post from a list on the left and see a preview of it on the right. Click the little pencil icon at the top of the preview to edit this post and read the next section!</p> <h2 id="gettingstarted">Getting Started</h2> <p>Ghost uses something called Markdown for writing. Essentially, it's a shorthand way to manage your post formatting as you write!</p> <p>Writing in Markdown is really easy. In the left hand panel of Ghost, you simply write as you normally would. Where appropriate, you can use <em>shortcuts</em> to <strong>style</strong> your content. For example, a list:</p> <ul> <li>Item number one</li> <li>Item number two <ul><li>A nested item</li></ul></li> <li>A final item</li> </ul> <p>or with numbers!</p> <ol> <li>Remember to buy some milk </li> <li>Drink the milk </li> <li>Tweet that I remembered to buy the milk, and drank it</li> </ol> <h3 id="links">Links</h3> <p>Want to link to a source? No problem. If you paste in a URL, like <a href="http://ghost.org">http://ghost.org</a> - it'll automatically be linked up. But if you want to customise your anchor text, you can do that too! Here's a link to <a href="http://ghost.org">the Ghost website</a>. Neat.</p> <h3 id="whataboutimages">What about Images?</h3> <p>Images work too! Already know the URL of the image you want to include in your article? Simply paste it in like this to make it show up:</p> <p><img src="https://ghost.org/images/ghost.png" alt="The Ghost Logo"></p> <p>Not sure which image you want to use yet? That's ok too. Leave yourself a descriptive placeholder and keep writing. Come back later and drag and drop the image in to upload:</p> <h3 id="quoting">Quoting</h3> <p>Sometimes a link isn't enough, you want to quote someone on what they've said. Perhaps you've started using a new blogging platform and feel the sudden urge to share their slogan? A quote might be just the way to do it!</p> <blockquote> <p>Ghost - Just a blogging platform</p> </blockquote> <h3 id="workingwithcode">Working with Code</h3> <p>Got a streak of geek? We've got you covered there, too. You can write inline <code>&lt;code&gt;</code> blocks really easily with back ticks. Want to show off something more comprehensive? 4 spaces of indentation gets you there.</p> <pre><code>.awesome-thing { display: block; width: 100%; } </code></pre> <h3 id="readyforabreak">Ready for a Break?</h3> <p>Throw 3 or more dashes down on any new line and you've got yourself a fancy new divider. Aw yeah.</p> <hr> <h3 id="advancedusage">Advanced Usage</h3> <p>There's one fantastic secret about Markdown. If you want, you can write plain old HTML and it'll still work! Very flexible.</p> <p><input type="text" placeholder="I'm an input field!"></p> <p>That should be enough to get you started. Have fun - and let us know what you think :)</p> Ghost Owner a6e7c691-d9b8-478e-bbfb-1315f185ef5a Thu Mar 09 2017 10:55:38 GMT-0500 (EST) Theme Roller not saving changes http://www.explorer-development.uk.com/theme-roller-not-saving-changes/ <p>Theme Roller not saving changes on a 5.1 ORDS standalone environment A very quick entry so we have this written down and so that it may help anyone in the future who faces the same problem.. We were having a problem on some of our new 5.1 environments where when using the theme roller and</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/theme-roller-not-saving-changes/">Theme Roller not saving changes</a> appeared first on <a rel="nofollow" href="http://www.explorer-development.uk.com">Oracle Application Express (APEX) Consultants, developers and APEX training courses UK</a>.</p> Explorer Development UK http://www.explorer-development.uk.com/?p=4119 Thu Mar 09 2017 06:06:09 GMT-0500 (EST) Upcoming ODTUG Webinars http://www.odtug.com/p/bl/et/blogaid=679&source=1 ODTUG Online EducationBelow is the list of upcoming webinars. If there is a topic you would like covered that is not on our current list, or if you would like to present a webinar, please email alicia@odtug.com. Did you miss a webinar? Our Webinar File Library lists all of our webinars and ODTUG http://www.odtug.com/p/bl/et/blogaid=679&source=1 Wed Mar 08 2017 13:31:48 GMT-0500 (EST) NATCAP OUG Reboot http://spendolini.blogspot.com/2017/03/natcap-oug-reboot.html NATCAP OUG - or the National Capitol Region Oracle Users Group - has a long history of providing Oracle-related content to those in the DC metro area. &nbsp;I remember presenting there back in my Oracle days (early 2000's) on multiple occasions.<div><br /></div><div>Over the last few months, a few of us have been trying to resurrect this group, as there are likely more Oracle developers &amp; DBAs in the DC area than any other area in the US, perhaps even the world! &nbsp;This region has long been underserved, and we hope to change that.</div><div><br /></div><div>We have had a couple of meeting at Oracle's campus in Reston, and attendance has been, well, not where we need it to be. &nbsp;So, if you're in the DC area, please consider joining this group. &nbsp;It's free, and our goal is to have quarterly meetings where both experienced presenters and NATCAP members alike provide the content.</div><div><br /></div><div>If interested, please sign up on the NATCAP website here:&nbsp;<a href="http://natcapoug.org/">http://natcapoug.org</a></div><div><br /></div><div>Let's grow this group and give the DC metro area the user group it so badly needs!</div> Scott tag:blogger.com,1999:blog-8449039.post-6502792823297121193 Wed Mar 08 2017 08:03:00 GMT-0500 (EST) Oracle Forms and Firefox 52 http://talk2gerd.blogspot.com/2017/03/oracle-forms-and-firefox-52.html This morning was the last day for Oracle Forms in Firefox, I thought...<br /><br />At 9:00 AM I had no problems starting my Forms-Runtime. Firefox 51.0 was the actual version at that point.<br /><br />After lunch and restarting my Firefox I was running 52.0 with the new feature "no JAVA please" :-)<br /><br />Very bad is, that firefox didn't give you any hint, when starting a Forms-URL. The only thing you see is an empty screen.<br /><br /><br />If you have this problem, here is the workaround:<br /><br />Start the URL "about:config" in your Firefox. After the message, that from now on you are responsible for all things you are doing in the settings, you see all Firefox config-parameters.<br /><br />Here you have to right mouse click and use "New"-"Boolean"<br /><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a aiotitle="" href="https://2.bp.blogspot.com/-7aBX95dcBp8/WMACi0UWZ5I/AAAAAAAAMp8/Rs-QXQYdi5M0E74oihdeOiDoYCINFmRzwCLcB/s1600/firefox_52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-7aBX95dcBp8/WMACi0UWZ5I/AAAAAAAAMp8/Rs-QXQYdi5M0E74oihdeOiDoYCINFmRzwCLcB/s1600/firefox_52.png" /></a></div><br />The name of the new parameter is: <b>plugin.load_flash_only</b><br />The value of the new parameter is: <b>false</b><br /><br />Now you have a new Firefox-parameter, which lets you run Oracle Forms as before!<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ZaUpdu0Bx-Y/WMAElglNJqI/AAAAAAAAMqI/TyNz3F1leaIIgvUP7FV5W-9VCnerZkAngCLcB/s1600/firefox_52_config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-ZaUpdu0Bx-Y/WMAElglNJqI/AAAAAAAAMqI/TyNz3F1leaIIgvUP7FV5W-9VCnerZkAngCLcB/s1600/firefox_52_config.png" /></a></div><br />Have fun<br />Gerd<br /><br /><br /><b><br /></b> Gerd Volberg tag:blogger.com,1999:blog-17069431.post-6904060251518406709 Wed Mar 08 2017 06:00:00 GMT-0500 (EST) SQLcl جايگزين مناسب براي SQL Plus http://oracleapex.blogfa.com/post/44 </p> <p><img src="http://www.upload-photos.ir/images/05737487309232927767.png" alt="" width="437" height="115" /></p> <p> </p> oracleapex http://oracleapex.blogfa.com/post/44 Sun Mar 05 2017 08:18:00 GMT-0500 (EST) Swift 3 – Das umfassende Handbuch http://feedproxy.google.com/~r/CC13com/~3/bX16COt39AU/ <p>Nicht nur die Versionsnummer hat sich geändert, auch der <a href="http://www.cc13.com/wordpress_21/2015/12/05/swift-2-das-umfassende-praxisbuch/" class="liinternal">Untertitel</a> wurde vom Autor angepasst. Dass sich Swift, die &#8222;neue&#8220; <a href="http://www.apple.com/de/swift/" target="_blank" class="liexternal">Programmiersprache von Apple</a> schnell entwickelt, kann man u.a. daran sehen, dass fast im Jahresrhythmus eine neue Version erscheint. Und somit habe ich nun wieder die Möglichkeit, mich mit dem vorliegenden Buch über Swift 3 zu informieren.</p> <h3>Titel: <strong><a href="https://www.rheinwerk-verlag.de/swift-3_4115/" target="_blank" class="liexternal">Swift 3 &#8211; Das umfassende Handbuch</a></strong><br /> Autor: <strong>Michael Kofler</strong><br /> Verlag: <strong><a href="https://www.rheinwerk-verlag.de/" class="liexternal" target="_blank">Rheinwerk-Verlag</a></strong><br /> Erscheinungsdatum: <strong>Ende</strong><span style="color: #000000;"><b> 2016</b></span><br /> ISBN: 978-3-8362-4127-4<span class="s1"><br /> Seitenzahl: <strong>1174</strong></span></h3> <p>Und nicht nur das, mit knapp 1200 Seiten hat das Buch zum <a href="http://www.cc13.com/wordpress_21/2015/12/05/swift-2-das-umfassende-praxisbuch/" target="_blank" class="liinternal">Vorgänger</a> um ganze 400 Seiten zugelegt. Auch diesmal ist das Buch nicht für Anfänger der Programmierung geeignet. Ein paar Grundlagen in modernen, objektorientierten Sprachen sollte der Leser schon mitbringen.</p> <div id="attachment_870" style="width: 160px" class="wp-caption aligncenter"><a href="https://www.rheinwerk-verlag.de/swift-3_4115/" class="liimagelink"><img class="size-thumbnail wp-image-870" src="http://www.cc13.com/wordpress_21/wp-content/uploads/2017/03/Swift3-150x150.png" alt="Swift 3 - Buch" width="150" height="150" /></a><p class="wp-caption-text">Swift 3 &#8211; Das umfassende Handbuch</p></div> <p>Aufgeteilt ist das Buch in die Teile &#8222;Swift&#8220;, &#8222;App-Programmierung&#8220;, &#8222;Programmier- und Arbeitstechniken&#8220; und &#8222;Beispielprojekte&#8220;. Im ersten Teil geht der Autor auf die Programmiersprache selber ein. Der Leser erfährt die Neuerungen der Version 3 und bekommt Hilfestellungen für die weiteren Teile an die Hand.</p> <p>Der Abschnitt zur &#8222;App-Programmierung&#8220; war im zuvor erschienenen Buch noch in zwei getrennten Teilen aufgeführt. Das ist aber nicht von Nachteil, da es Themenübergreifende Erklärungen gibt. Zusätzlich zur iOS- und macOS-Programmierung zeigt der aktuelle Band die Erstellung von tvOS Anwendungen. Auf spezielle Anforderungen in der täglichen Programmierung geht der dritte Teil des Buches ein. Der Leser erfährt u.a. Techniken zur Netzwerkprogrammierung, wie man GPS- und Kompassfunktionen in seinen Programmen, oder den App Store nutzt.</p> <p>Im vierten und letzten Teil behandelt der Autor anhand von Beispielprogrammen Themen ab, die man für eigene Projekte sehr gut verwenden kann. Sei es ein Währungskalkulator, oder kleine Spiele wie <a href="https://de.wikipedia.org/wiki/Breakout_(Computerspiel)" target="_blank" rel="nofollow" class="liwikipedia">Breakout</a>, <a href="https://de.wikipedia.org/wiki/Pac-Man" target="_blank" rel="nofollow" class="liwikipedia">Pac-Man</a> oder Asteroids, welche dann auf einem <a href="http://www.apple.com/de/iphone/" target="_blank" class="liexternal">iOS</a> oder <a href="http://www.apple.com/de/tv/" target="_blank" class="liexternal">tvOS</a> Gerät lauffähig sind.</p> <h2>Zusammenfassung</h2> <p>Wie immer kann ich das Buch Lesern empfehlen, die Grundlagen der Programmierung mitbringen und sich über die Programmiersprache von Apple informieren möchten. Da Apple die Sprache als Open Source <a href="https://www.heise.de/developer/meldung/Programmiersprachen-Apples-Swift-ist-jetzt-Open-Source-und-fuer-Linux-verfuegbar-3031557.html" target="_blank" class="liexternal">freigegeben</a> hat und die ersten Portierungen für Linux verfügbar sind, ist man nicht mehr auf die Marke mit dem angebissenen Apfel beschränkt, um mit Swift arbeiten zu können. Programmieranfänger empfehle ich zuvor, sich mit einem Grundlagenbuch zu beschäftigen und dann das hier besprochene Buch zur Hand zu nehmen.</p> <h5><em>Disclaimer: Das Buch wurde mir vom Rheinwerk Computing Verlag kostenfrei zur Verfügung gestellt.</em></h5> <p>Der Beitrag <a rel="nofollow" href="http://www.cc13.com/wordpress_21/2017/03/05/swift-3-das-umfassende-handbuch/">Swift 3 &#8211; Das umfassende Handbuch</a> erschien zuerst auf <a rel="nofollow" href="http://www.cc13.com/wordpress_21">CC13.com</a>.</p> cc13 http://www.cc13.com/wordpress_21/?p=869 Sun Mar 05 2017 05:35:19 GMT-0500 (EST) Using APIs to set Application and Build Status in Oracle Application Express 5.1 http://b-apex.blogspot.com/2017/03/using-api-to-set-application.html In Oracle Application Express it is possible to specify application-level attributes: Build Status and Application Status. With Build Status we can prevent that an application is being modified by other developers. With Application Status we can specify whether an application is available or unavailable for use.<br /><div><br /></div><div>Topic of this blog post is not to talk in detail about this two attributes (if you want to know more, then check the&nbsp;<a href="http://docs.oracle.com/database/apex-5.1/AEADM/changing-build-status-for-multiple-applications.htm#AEADM165" target="_blank">official documentation</a>), but to mention how we can use APIs to manage this attributes in Oracle Application Express 5.1</div><div><br /></div><div><b>Build Status</b></div><div><br /></div><div>For setting build status we can use the following procedure:</div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><br /></span><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp; <i>apex_util.set_app_build_status(&nbsp;</i></span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp;p_application_id IN NUMBER,</i></span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp;p_build_status IN VARCHAR2);</i></span><br /><div><div><br /></div><div>For <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>p_build_status</i></span> we can specify <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>RUN_ONLY</i></span> &nbsp;and <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>RUN_AND_BUILD</i></span>. &nbsp;More details about this API can be found <a href="http://docs.oracle.com/database/apex-5.1/AEAPI/SET_APP_BUILD_STATUS_Procedure.htm" target="_blank">here</a>.</div></div><div><br /></div><div><b>Application Status</b></div><div><b><br /></b></div><div>For changing the status of the application, we can use the following procedure:</div><div><br /></div><div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp; <i>apex_util.set_application_status(</i></span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp; &nbsp; p_application_id IN NUMBER,</i></span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp; &nbsp; p_application_status IN VARCHAR2,</i></span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp; &nbsp; p_unavailable_value IN VARCHAR2,</i></span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp; &nbsp; p_restricted_user_list IN VARCHAR2);&nbsp;</i></span></div></div><div><br /></div><div>I don't want to do a copy/paste from the official documentation, so please check this <a href="http://docs.oracle.com/database/apex-5.1/AEAPI/SET_APPLICATION_STATUS-Procedure.htm" target="_blank">link</a> for parameters description and examples.&nbsp;</div><div><br />Aljaz</div><div><div></div></div> Aljaž Mali tag:blogger.com,1999:blog-6273129051310972036.post-6752446765667037928 Sat Mar 04 2017 17:17:00 GMT-0500 (EST) 12cR2 new features for Developers and DBAs - Here is my pick (Part 2) http://jaffardba.blogspot.com/2017/03/12cr2-new-features-for-developers-and_4.html <div dir="ltr" style="text-align: left;" trbidi="on"><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">In&nbsp;<a href="http://jaffardba.blogspot.com/2017/03/12cr2-new-features-for-developers-and.html" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: #8c68cb; cursor: pointer; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: none; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Part 1</a>, I have outlined a few (my pick) 12cR2 new features useful for Developers and DBAs. In the part 2, I am going to discuss a few more new features.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.85098); font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Read/Write and Read-Only Instances</strong></div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Read-write and read-only database instances of the same primary database can coexist in an Oracle Flex Cluster.</div><h3 style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.85098); font-family: &quot;Source Sans Pro&quot;, Helvetica, Arial, sans-serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 28px; margin: 2.4rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Advanced Index Compression</h3><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Prior to this release, the only form of advanced index compression was low compression. Now you can also specify high compression. High compression provides even more space savings than low compression.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">PDBs Enhancements</strong></div><ul style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; list-style-image: initial; list-style-position: initial; margin: 3.2rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">I/O Rate Limits for PDBs</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Different character sets of PDBs in a CDB</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">PDB refresh to periodically propagate changes from a source PDB to its cloned copy</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">CONTAINERS</strong>&nbsp;hint : When a&nbsp;CONTAINERS ()query is submitted, recursive SQL statements are generated and executed in each PDB. Hints can be passed to these recursive SQL statements by using the&nbsp;CONTAINERS&nbsp;statement-level hint.&nbsp;</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Cloning PDB no longer to be in R/W mode&nbsp;</strong>: Cloning of a pluggable database (PDB) resolves the issue of setting the source system to read-only mode before creating a full or snapshot clone of a PDB.</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Near Zero Downtime PDB Relocation</strong>:This new feature significantly reduces downtime by leveraging the clone functionality to relocate a pluggable database (PDB) from one multitenant container database (CDB) to another CDB. The source PDB is still open and fully functional while the actual cloning operation is taking place.</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Proxy PDB</strong>: A proxy pluggable database (PDB) provides fully functional access to another PDB in a remote multitenant container database (CDB). This feature enables you to build location-transparent applications that can aggregate data from multiple sources that are in the same data center or distributed across data centers.</li></ul><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Oracle Data Pump Parallel Export of Metadata</strong>: The&nbsp;PARALLEL&nbsp;parameter for Oracle Data Pump, which previously applied only to data, is extended to include metadata export operations. The performance of Oracle Data Pump export jobs is improved by enabling the use of multiple processes working in parallel to export metadata.</div><h3 style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.85098); font-family: &quot;Source Sans Pro&quot;, Helvetica, Arial, sans-serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 28px; margin: 2.4rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Renaming Data Files During Import</h3><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><u style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Oracle RAC :</u></div><ul style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; list-style-image: initial; list-style-position: initial; margin: 3.2rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Server Weight-Based Node Eviction</strong>&nbsp;:Server weight-based node eviction acts as a tie-breaker mechanism in situations where Oracle Clusterware needs to evict a particular node or a group of nodes from a cluster, in which all nodes represent an equal choice for eviction. In such cases, the server weight-based node eviction mechanism helps to identify the node or the group of nodes to be evicted based on additional information about the load on those servers. Two principle mechanisms, a system inherent automatic mechanism and a user input-based mechanism exist to provide respective guidance.</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Load-Aware Resource Placement</strong>&nbsp;: Load-aware resource placement prevents overloading a server with more applications than the server is capable of running. The metrics used to determine whether an application can be started on a given server, either as part of the startup or as a result of a failover, are based on the anticipated resource consumption of the application as well as the capacity of the server in terms of CPU and memory.</li></ul><h3 style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.85098); font-family: &quot;Source Sans Pro&quot;, Helvetica, Arial, sans-serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 28px; margin: 2.4rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Enhanced Rapid Home Provisioning and Patch Management</h3><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">TDE Tablespace Live Conversion</strong>: You can now encrypt, decrypt, and rekey existing tablespaces with Transparent Data Encryption (TDE) tablespace live conversion. A TDE tablespace can be easily deployed, performing the initial encryption that migrates to an encrypted tablespace with zero downtime. This feature also enables automated deep rotation of data encryption keys used by TDE tablespace encryption in the background with zero downtime.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Fully Encrypted Database:</strong>&nbsp;Transparent Data Encryption (TDE) tablespace encryption is applied to database internals including&nbsp;SYSTEM,&nbsp;SYSAUX, and&nbsp;UNDO.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">TDE Tablespace Offline Conversion</strong>: This release introduces new SQL commands to encrypt tablespace files in place with no storage overhead. You can do this on multiple instances across multiple cores. Using this feature requires downtime, because you must take the tablespace temporarily offline. With Data Guard configurations, you can either encrypt the physical standby first and switchover, or encrypt the primary database, one tablespace at a time.</div></div> The Human Fly tag:blogger.com,1999:blog-19771507.post-8887351906997145893 Sat Mar 04 2017 11:29:00 GMT-0500 (EST) APEX 5.1 quick fix: Closing modal page before confirm/alert dialog http://apexbyg.blogspot.com/2017/03/apex-51-quick-fix-closing-modal-page.html <div dir="ltr" style="text-align: left;" trbidi="on"><div class="p1"><span class="s1">When I have to do some things repeatedly it’s good indication that I should share this in a blog post. This time it's quick one and I’m sure that it will be fixed by Shakeeb in next the APEX (Universal theme) version.</span></div><div class="p1"><span class="s1"><br /></span></div><div class="p1"><span class="s1">There’s a problem in APEX 5.1.0.00.45 UT when you call confirm/alert dialog with apex.message JS API from modal page. The problem is that you can close modal page before closing confirm/alert dialog.</span></div><div class="p1"><span class="s1"><br /></span></div><div class="p1"><span class="s1">You can fix this by adding this CSS block to your custom CSS files or to Theme Roller’s Custom&nbsp;</span>CSS property:</div><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">body .ui-front ~ .ui-front{<br /> z-index:902 <br />}</span></code></pre><div class="p1"><span class="s1">Demo is available <a href="https://apex.oracle.com/pls/apex/f?p=100309:23:" target="_blank">here</a>.</span></div><div class="p1"><span class="s1"><br /></span></div><style type="text/css">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica; -webkit-text-stroke: #000000} span.s1 {font-kerning: none} </style> <br /><div class="p1"><span class="s1">Enjoy!</span></div></div> Marko Gorički tag:blogger.com,1999:blog-1003209687173038896.post-2569777739035201066 Fri Mar 03 2017 03:25:00 GMT-0500 (EST) 12cR2 new features for Developers and DBAs - Here is my pick (Part 1) http://jaffardba.blogspot.com/2017/03/12cr2-new-features-for-developers-and.html <div dir="ltr" style="text-align: left;" trbidi="on"><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">Since the announcement of 12cR2 on-premises availability, the Oracle community become energetic and busy tweeting/blogging the new features, demonstrating installation &amp; upgrades. Hence, I have decided to pick my favorite list of 12cR2 new features for Developers and &amp; DBAs. Here is the high-level summary, until I write a detailed post for each feature (<em style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-family: Georgia, &quot;Source Serif Pro&quot;, serif; font-size: 0.975em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><u style="box-sizing: border-box;">excerpt from Oracle 12cR2 new features document</u></em>).</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Command history for SQL * Plus</span>: Pre 12cR2, this could be achieved through a workaround, now, the <em style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-family: Georgia, &quot;Source Serif Pro&quot;, serif; font-size: 0.975em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">history</em> command would do the magic for you.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Materialized Views: Real-Time Materialized Views</span>: Materialized views can be used for query rewrite even if they are not fully synchronized with the base tables and are considered stale. Using materialized view logs for delta computation together with the stale materialized view, the database can compute the query and return correct results in real time.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">For materialized views that can be used for query rewrite all of the time, with the accurate result being computed in real time, the result is optimized and fast query processing for best performance. This alleviates the stringent requirement of always having to have fresh materialized views for the best performance.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Materialized Views: Statement-Level Refresh</span>: In addition to&nbsp;ON COMMIT&nbsp;and&nbsp;ON DEMAND&nbsp;refresh, the materialized join views can be refreshed when a DML operation takes place, without the need to commit such a transaction. This is predominantly relevant for star schema deployments.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">The new&nbsp;ON STATEMENT&nbsp;refresh capability provides more flexibility to the application developers to take advantage of the materialized view rewrite, especially for complex transactions involving multiple DML statements. It offers built-in refresh capabilities that can replace customer-written trigger-based solutions, simplifying an application while offering higher performance.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Oracle Data Guard Database Compare:</span> This new tool compares data blocks stored in an Oracle Data Guard primary database and its physical standby databases. Use this tool to find disk errors (such as lost write) that cannot be detected by other tools like the&nbsp;DBVERIFY&nbsp;utility.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Subset Standby</span>: A subset standby enables users of Oracle Multitenant to designate a subset of the pluggable databases (PDBs) in a multitenant container database (CDB) for replication to a standby database.&nbsp;</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Automatically Synchronize Password Files in Oracle Data Guard Configurations:</span> This feature automatically synchronizes password files across Oracle Data Guard configurations. When the passwords of&nbsp;SYS,&nbsp;SYSDG, and so on, are changed, the password file at the primary database is updated and then the changes are propagated to all standby databases in the configuration.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Preserving Application Connections to An Active Data Guard Standby During Role Changes</span>: Currently, when a role change occurs and an Active Data Guard standby becomes the primary, all read-only user connections are disconnected and must reconnect, losing their state information. This feature enables a role change to occur without disconnecting the read-only user connections. Instead, the read-only user connections experience a pause while the state of the standby database is changed to primary. Read-only user connections that use a service designed to run in both the primary and physical standby roles are maintained. Users connected through a physical standby only role continue to be disconnected.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Oracle Data Guard for Data Warehouses</span>: The use of&nbsp;NOLOGGING&nbsp;for direct loads on a primary database has always been difficult to correct on an associated standby database. On a physical standby database the data blocks were marked unrecoverable and any SQL operation that tried to read them would return an error. Or, for a logical standby database, SQL apply would stop upon encountering the invalidation redo.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Rolling Back Redefinition:</span> There is a new&nbsp;ROLLBACK&nbsp;parameter for the&nbsp;FINISH_REDEF_TABLE&nbsp;procedure that tracks DML on a newly redefined table so that changes can be easily synchronized with the original table using the&nbsp;SYNC_INTERIM_TABLE&nbsp;procedure.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">The new&nbsp;V$ONLINE_REDEF&nbsp;view displays runtime information related to the current redefinition procedure being executed based on a redefinition session identifier.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Online Conversion of a Nonpartitioned Table to a Partitioned Table</span>: Nonpartitioned tables can be converted to partitioned tables online. Indexes are maintained as part of this operation and can be partitioned as well. The conversion has no impact on the ongoing DML operations.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Online SPLIT Partition and Subpartition</span>: The partition maintenance operations&nbsp;SPLIT PARTITION&nbsp;and&nbsp;SPLIT SUBPARTITION&nbsp;can now be executed as online operations for heap organized tables, allowing the concurrent DML operations with the ongoing partition maintenance operation.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Online Table Move</span>: Nonpartitioned tables can be moved as an online operation without blocking any concurrent DML operations. A table move operation now also supports automatic index maintenance as part of the move.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Oracle Database Sharding</span>: Sharding with Oracle Database 12c&nbsp;Release 2 (12.2) is an architecture for suitable online transaction processing (OLTP) applications where data is horizontally partitioned across multiple discrete Oracle databases, called shards, which share no hardware or software. The collection of shards is presented to an application as a single logical Oracle database.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">Stay tuned for Part 2..</div></div> The Human Fly tag:blogger.com,1999:blog-19771507.post-3525777023764041884 Thu Mar 02 2017 15:07:00 GMT-0500 (EST) Acaba de salir la nueva directiva para APEX 5.2!!! http://feedproxy.google.com/~r/DescubriendoElMundoDeOracle/~3/abt0js_ralc/acaba-de-salir-la-nueva-directiva-para.html <div class="m-Section"><div class="m-Section-title">David Peake, Product Manager de Application Express compartió la nueva directiva para Apex 5.2.</div><div class="m-Section-title"><br /></div><div class="m-Section-title">Estas serán serán las mejoras que se realizarán!!!</div><div class="m-Section-title"></div><h3 class="m-Section-title">Oracle Application Express 5.2</h3><div class="m-Section-text">Oracle Application Express 5.2 will focus on both new features and enhancements to existing functionality, and is planned to incorporate the following:</div><ul class="m-List m-List--arrows"><li class="m-List-item">Remote SQL Data Access ‐ Extend common components such as Interactive Grids, Classic Reports and Charts to interface with data stored in remote databases using ORDS and REST.</li><li class="m-List-item">REST Service Consumption ‐ Provide declarative methods to define references to external REST APIs and generic JSON data feeds and to use these references as data sources for Interactive Grids, Reports and Forms.</li><li class="m-List-item">Declarative App Features ‐ Introduce a new Create App Wizard that allows for adding components and app features to new and existing applications.</li><li class="m-List-item">Interactive Grid enhancements ‐ Add additional reporting capabilities such as Group-By and Pivot, support for subscriptions and computations, flexible row height and general UI improvements.</li><li class="m-List-item">Page Designer ‐ Provide client-side wizards for the creation of more complex components like Dynamic Actions, Forms and Shared Components, User interface improvements.</li><li class="m-List-item">Upgrade Oracle JET and jQuery ‐ Adopt the most recent versions of the integrated JavaScript libraries to take advantage of new Data Visualizations such as Gantt charts and new Form widgets and controls.</li><li class="m-List-item">New REST Workshop ‐ Provide declarative methods to support the development of ORDS enabled REST web services, taking advantage of the latest features and functionality of ORDS.</li><li class="m-List-item">Packaged Applications ‐ Improved framework and enhancements to the packaged applications.</li></ul>Para descargar la directiva lo puedes hacer desde este <a href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/oracle-application-express-sod-1596338.pdf" target="_blank">link</a>.</div><img src="http://feeds.feedburner.com/~r/DescubriendoElMundoDeOracle/~4/abt0js_ralc" height="1" width="1" alt=""/> Clarisa J. Maman Orfali tag:blogger.com,1999:blog-1315583943401206186.post-4903945441001730179 Wed Mar 01 2017 19:28:00 GMT-0500 (EST) Un poco de mi historia ha sido publicada en la revista Miniondas and Farandula USA en este mes!! http://feedproxy.google.com/~r/DescubriendoElMundoDeOracle/~3/zXQwaU4mdXQ/un-poco-de-mi-historia-ha-sido.html <span class="ember-view" id="ember4857"><span>Estoy muy feliz!!! la revista Hispana Miniondas and Farandula USA han dedicado 2 páginas a mi historia, festejando este mes el "Día Internacional de la Mujer". Gracias por tan hermoso reportaje y por compartir fragmentos de mi vida con la comunidad hispana del Sur de California!!! mi hijo Nicolas es el chef!!!! </span><a class="hashtag-link ember-view" data-control-name="update_hashtag" href="https://www.linkedin.com/search/results/content/?keywords=%23loveminiondas&amp;origin=HASH_TAG_FROM_FEED" id="ember4860">#loveminiondas</a><span> </span><a class="hashtag-link ember-view" data-control-name="update_hashtag" href="https://www.linkedin.com/search/results/content/?keywords=%23shareminiondas&amp;origin=HASH_TAG_FROM_FEED" id="ember4863">#shareminiondas</a><span> Les dejo el enalce para que vean la nota completa: <a href="http://miniondas.com/edicion-electronica/" target="_blank">http://miniondas.com/edicion-electronica/ </a></span></span><br /><span class="ember-view" id="ember4857"><span><br /></span></span><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-75_8rcqwWb4/WLdDAcjXB6I/AAAAAAAAB0s/j1dNHYM5caUkRsL9EKSKUBUMCEE3jbgTwCLcB/s1600/clarisa-entrevista.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="253" src="https://3.bp.blogspot.com/-75_8rcqwWb4/WLdDAcjXB6I/AAAAAAAAB0s/j1dNHYM5caUkRsL9EKSKUBUMCEE3jbgTwCLcB/s400/clarisa-entrevista.jpg" width="400" /></a></div><span class="ember-view" id="ember4857"><span><br /></span></span><img src="http://feeds.feedburner.com/~r/DescubriendoElMundoDeOracle/~4/zXQwaU4mdXQ" height="1" width="1" alt=""/> Clarisa J. Maman Orfali tag:blogger.com,1999:blog-1315583943401206186.post-8561789456967701524 Wed Mar 01 2017 16:56:00 GMT-0500 (EST) APEX 5.2 - czyli co jest planowane http://apex.dbe.pl/2017/03/apex-52-czyli-co-jest-planowane.html Dopiero co weszła wersja 5.1 a już można poznać więcej szczegółów dotyczących przyszłej wersji 5.2. Widać wyraźny nacisk na webservice-y co mnie osobiście bardzo cieszy : )<br /><br /> <div style="text-align: center;"> Kto zainteresowany odsyłam do tego <a href="http://www.oracle.com/technetwork/developer-tools/apex/learnmore/apex-sod-087560.html">WPISU.</a></div> ) tag:blogger.com,1999:blog-7531463720728239813.post-8655548433520238174 Wed Mar 01 2017 15:53:00 GMT-0500 (EST) Make tomcat wait until oracle database is available http://warp11.nl/2017/03/make-tomcat-wait-until-oracle-database-is-available/ <p>Recently I&#8217;ve been installing the OATOA (Oracle APEX on Tomcat with ORDS behind Apache) stack a number of times on both Oracle Linux 7 and CentOS7.</p> <p>In the past this was no problem, Tomcat came up and a request to http://myserver:8080/ords/ gave me the expected APEX login screen.</p> <p>However since Oracle Linux 7 and CentOS7, it seemed that Tomcat started before it could find the Oracle database. A simple restart of the tomcat service would do the trick. On my virtual machine (recently switched from VirtualBox to parallels btw) meant for doing presentations no problem at all.</p> <p><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">systemctl restart tomcat</span></p> <p>Now I&#8217;m playing around with &#8220;droplets&#8221; at DigitalOcean, just another name for virtual servers in my opinion, but they have great features at a reasonable price. Take a look: <a href="https://m.do.co/c/187c0416a2b3">https://m.do.co/c/187c0416a2b3</a>.</p> <p>But my droplets showed the same behaviour as my parallels virtual machine. I first had to restart tomcat to get a working system.</p> <p>You all should know that I&#8217;m not a linux guru (really I&#8217;m not), so broke my brains about this for a looooong time.</p> <p>Yesterday I finally managed to get this working. The idea is to make the tomcat start-script wait until it can see &#8220;something&#8221; on port 1521 (the db listener) and only then continue to start.</p> <p>Open the file /usr/libexec/tomcat/server</p> <p><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">nano /usr/libexec/tomcat/server</span></p> <p>now add some lines of code _before_ the line that starts with MAIN_CLASS like this:</p> <p><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">#!/bin/bash</span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">. /usr/libexec/tomcat/preamble</span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"># .=.=.=.=.= START Make tomcat wait on oracle .=.=.=.=.=<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">i=1<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">while netstat -lnt | awk &#8216;$4 ~ /:1521$/ {exit 1}&#8217;0<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">do<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  sleep 10<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  let i+=1<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  if [ &#8220;$i&#8221; -gt &#8220;5&#8221; ]<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  then<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">    break    #Abandon the loop.<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  fi<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">done<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"># give Oracle some slack to also start the database<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">sleep 10<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"># .=.=.=.=.= END Make tomcat wait on oracle .=.=.=.=.=</p> <p></span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">MAIN_CLASS=org.apache.catalina.startup.Bootstrap</span></p> <p>add the obvious lines to your script.</p> <p>What is happening?</p> <p>The line &#8220;netstat -lnt | awk &#8230;&#8221; tries to find the string &#8220;:1521&#8221; in the result of a &#8220;netstat -lnt&#8221; command. This would indicate that something is listening on that port. In our case it will be the Oracle Listener.</p> <p>If it does not find an open port 1521, it will sleep for 10 seconds, increment a counter (&#8220;i&#8221;) by 1 and do the loop again. The loop will loop a maximum of five times to prevent an endless loop.</p> <p>After the loop completes we give the Oracle database another 10 seconds to get started.</p> <p>That should do the trick. It does for me (I use the same code at digitalocean as well as my parallels virtual linux server.</p> <p>I&#8217;m sure linux must have some system in place that could do the trick as well (make one service dependable on the other) but I haven&#8217;t found an easy one to use. If someone could help me out here, feel free to leave a comment.</p> <p>Regards,</p> <p>Richard</p> Richard Martens http://warp11.nl/?p=1498 Wed Mar 01 2017 09:32:26 GMT-0500 (EST)