<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PL/SQL Unwrapper Archives - Philipp Salvisberg&#039;s Blog</title>
	<atom:link href="https://www.salvis.com/blog/tag/pl-sql-unwrapper/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.salvis.com/blog/tag/pl-sql-unwrapper/</link>
	<description>Database-centric development</description>
	<lastBuildDate>Mon, 10 Mar 2025 07:40:53 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.salvis.com/blog/wp-content/uploads/2014/04/favicon.png</url>
	<title>PL/SQL Unwrapper Archives - Philipp Salvisberg&#039;s Blog</title>
	<link>https://www.salvis.com/blog/tag/pl-sql-unwrapper/</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://www.salvis.com/blog/tag/pl-sql-unwrapper/feed/"/>
	<item>
		<title>Wrapping and Unwrapping PL/SQL</title>
		<link>https://www.salvis.com/blog/2025/03/08/wrapping-and-unwrapping-pl-sql/</link>
					<comments>https://www.salvis.com/blog/2025/03/08/wrapping-and-unwrapping-pl-sql/#comments</comments>
		
		<dc:creator><![CDATA[Philipp Salvisberg]]></dc:creator>
		<pubDate>Sat, 08 Mar 2025 17:00:56 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[PL/SQL Unwrapper]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">https://www.salvis.com/blog/?p=13831</guid>

					<description><![CDATA[<p>Introduction Today I released a PL/SQL Unwrapper for VS Code. You can find it in the VS Code Marketplace, along with instructions on how to use it. It&#8217;s super easy and works the same way as the extension I wrote 10 years ago for SQL Developer in Java. If you&#8217;re curious about<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://www.salvis.com/blog/2025/03/08/wrapping-and-unwrapping-pl-sql/">Wrapping and Unwrapping PL/SQL</a> appeared first on <a href="https://www.salvis.com/blog">Philipp Salvisberg&#039;s Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="introduction">Introduction</h2>



<p>Today I released a PL/SQL Unwrapper for VS Code. You can find it in the <a href="https://marketplace.visualstudio.com/items?itemName=Grisselbav.plsql-unwrapper">VS Code Marketplace</a>, along with instructions on how to use it. It&#8217;s super easy and works the same way as the extension I wrote 10 years ago for SQL Developer in Java. If you&#8217;re curious about why I created an Unwrapper in the first place, then read this <a href="https://www.salvis.com/blog/2015/05/17/introducing-plsql-unwrapper-for-sql-developer/">blog post </a>. The post also includes the original Python code by Niels Teusink. I basically translated that code to the target language and added a bit of UI sugar.</p>



<h2 class="wp-block-heading" id="and-code-wrapped-with-the-9i-wrap-utility">And Code Wrapped with the 9i Wrap Utility?</h2>



<p>I often get asked whether I plan to enhance the Unwrapper to support code that was wrapped with a wrap utility from Oracle Database version 7, 8, or 9. The answer is no. I don&#8217;t plan on doing that. Why? &#8211; Well, there are a few reasons.</p>



<ol class="wp-block-list">
<li><strong>Different Algorithm</strong><br />The way the wrapping algorithm works in 9i and later versions is totally different. The 9i algorithm is a bit complicated. If you want the full story, check out Pete Finnigan’s&nbsp;<a href="https://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Finnigan.pdf">How to Unwrap PL/SQL</a>. In other words, It&#8217;ll take a lot of effort to create a comprehensive 9i Unwrapper. If you need one, Pete&#8217;s your guy.<br /></li>



<li><strong>Not widely used</strong><br />Since unwrapping &gt;=10g wrapped code is super easy, a few companies decided to use the 9i algorithm with or without a <a href="https://en.wikipedia.org/wiki/Minification_(programming)">minifier</a> to protect their intellectual property. However, I do not find that very often in the wild.<br /></li>



<li><strong>For Legacy Applications Only</strong><br />IMO the 9i algorithm is only feasible for legacy applications. Because modern PL/SQL and SQL cannot be processed by the 9i wrap utility. As a result, legit requests for an Unwrapper are applications to be migrated that contain wrapped code without matching source code. In those cases, it is a good idea to contact Pete for help.</li>
</ol>



<p>Let&#8217;s explore this last point a little further.</p>



<ul class="wp-block-list">
<li><a href="#wrap-modern-sql-with-oracledb-23ai">Wrap Modern SQL with OracleDB 23ai</a></li>



<li><a href="#wrap-modern-sql-with-oracledb-9ir2">Wrap Modern SQL with OracleDB 9iR2</a></li>



<li><a href="#wrap-modern-plsql-with-oracledb-9ir2">Wrap Modern PL/SQL with OracleDB 9iR2</a></li>



<li><a href="#conclusion">Conclusion</a></li>
</ul>



<h2 class="wp-block-heading" id="wrap-modern-sql-with-oracledb-23ai">Wrap Modern SQL with OracleDB 23ai</h2>



<p>The following procedure uses a table value constructor. That is a 23ai feature.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">1) print_emp_modern_sql.sql</span><span role="button" tabindex="0" data-code="create or replace procedure print_emp (in_deptno in number default null) is
begin
   -- print column headers
   sys.dbms_output.put_line('DEPTNO EMPNO ENAME   SAL');
   sys.dbms_output.put_line('------ ----- ------ ----');
   &lt;&lt;print_emps_of_selected_dept&gt;&gt;
   for r in (
      with
         -- table value constructor is a 23ai feature
         emp (empno, ename, sal, deptno) as (values
            (7839, 'KING',  5000, 10),
            (7566, 'JONES', 2975, 20),
            (7788, 'SCOTT', 3000, 20)
         )
      select deptno, empno, ename, sal
        from emp
       where deptno = in_deptno or in_deptno is null
       order by deptno, sal desc
   ) loop
      sys.dbms_output.put(lpad(r.deptno, 6));
      sys.dbms_output.put(lpad(r.empno, 6));
      sys.dbms_output.put(' ');
      sys.dbms_output.put(rpad(r.ename, 7));
      sys.dbms_output.put_line(lpad(r.sal, 4));
   end loop print_emps_of_selected_dept;
end print_emp;
/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">create or replace</span><span style="color: #D4D4D4"> procedure print_emp (in_deptno </span><span style="color: #569CD6">in</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">number</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">default</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">is</span></span>
<span class="line"><span style="color: #569CD6">begin</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #6A9955">-- print column headers</span></span>
<span class="line"><span style="color: #D4D4D4">   sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put_line</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39;DEPTNO EMPNO ENAME   SAL&#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put_line</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39;------ ----- ------ ----&#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   &lt;&lt;print_emps_of_selected_dept&gt;&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> r </span><span style="color: #569CD6">in</span><span style="color: #D4D4D4"> (</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">with</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #6A9955">-- table value constructor is a 23ai feature</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">         emp (empno, ename, sal, deptno) </span><span style="color: #569CD6">as</span><span style="color: #D4D4D4"> (</span><span style="color: #569CD6">values</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7839</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;KING&#39;</span><span style="color: #D4D4D4">,  </span><span style="color: #B5CEA8">5000</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">),</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7566</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;JONES&#39;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">2975</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4">),</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7788</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;SCOTT&#39;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">3000</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4">)</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">         )</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">select</span><span style="color: #D4D4D4"> deptno, empno, ename, sal</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">from</span><span style="color: #D4D4D4"> emp</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #569CD6">where</span><span style="color: #D4D4D4"> deptno = in_deptno </span><span style="color: #569CD6">or</span><span style="color: #D4D4D4"> in_deptno </span><span style="color: #569CD6">is null</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #569CD6">order by</span><span style="color: #D4D4D4"> deptno, sal </span><span style="color: #569CD6">desc</span></span>
<span class="line"><span style="color: #D4D4D4">   ) </span><span style="color: #C586C0">loop</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">lpad</span><span style="color: #D4D4D4">(r.deptno, </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">lpad</span><span style="color: #D4D4D4">(r.empno, </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39; &#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">rpad</span><span style="color: #D4D4D4">(r.ename, </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put_line</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">lpad</span><span style="color: #D4D4D4">(r.sal, </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #C586C0">end loop</span><span style="color: #D4D4D4"> print_emps_of_selected_dept;</span></span>
<span class="line"><span style="color: #569CD6">end</span><span style="color: #D4D4D4"> print_emp;</span></span>
<span class="line"><span style="color: #D4D4D4">/</span></span></code></pre></div>



<p>We can wrap this code with the wrap utility of the Oracle Database.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">2) wrap v23.6 print_modern_sql.sql</span><span role="button" tabindex="0" data-code="wrap iname=print_emp_modern_sql.sql oname=print_emp_modern_sql_wrapped.sql" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">wrap iname=print_emp_modern_sql.sql oname=print_emp_modern_sql_wrapped.sql</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="PL/SQL Wrapper: Release 23.0.0.0.0 - Production on Sat Mar 8 13:20:22 2025
Version 23.6.0.24.10

Copyright (c) 1982, 2024, Oracle and/or its affiliates.  All rights reserved.

Processing print_emp_modern_sql.sql to print_emp_modern_sql_wrapped.sql" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">PL/SQL Wrapper: Release 23.0.0.0.0 - Production on Sat Mar 8 13:20:22 2025</span></span>
<span class="line"><span style="color: #D4D4D4">Version 23.6.0.24.10</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">Copyright (c) 1982, 2024, Oracle and/or its affiliates.  All rights reserved.</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">Processing print_emp_modern_sql.sql to print_emp_modern_sql_wrapped.sql</span></span></code></pre></div>



<p>And the resulting file looks like this:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">3) print_emp_modern_sql_wrapped.sql</span><span role="button" tabindex="0" data-code="create or replace procedure print_emp wrapped 
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
357 207
ayazvHL/mg/US3DdDyNYwTqa68EwgwLxTK5qyo5A7RlkV79jvdE9vjLZi/E/UPQJEalFiuXq
hzBrk1+1JByeVW8X/KEOaUHHMK6a36OU2H4q1oax+MG//jNSNhUB6sLU8kRxrH4ebt4Wk40N
FQYr4wRTWF1+xkM2pmh8W4JiToP15Q0u9rBXe69s78wW2/zU12UKWGqC85UeCNsFIo/gM9DI
UzEh7AwFODhZ4ntqNtVW1RJDBTuExWM1mG/jBTiKvhCe2Q4FWzymJdUah2Yynj4wzX+ROYX2
G6PJ/60EFEz/K45RH9G/80R1SaHm7tH0KZZ+vFTKM9gUgoVVZCWt/7FURXFmyZ4BYuADvKvg
FydUkofWep7ql66IjSsN2hyHik8Ee6RWQkYDcvIPflMpTBzxidGzteS4RSgg3Q0+di/WaSdN
tQdYoiGTodL1hUzbGbxSe/XSKHY1ISPihH+1TCWz4PmwmbH+iyQ2QfrCu/Ng+cSB28xJcBBO
HZoylZ0=

/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line cbp-line-highlight"><span style="color: #569CD6">create or replace</span><span style="color: #D4D4D4"> procedure print_emp wrapped </span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">a000000</span></span>
<span class="line cbp-line-highlight"><span style="color: #B5CEA8">1</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #B5CEA8">7</span></span>
<span class="line"><span style="color: #B5CEA8">357</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">207</span></span>
<span class="line"><span style="color: #D4D4D4">ayazvHL/mg/US3DdDyNYwTqa68EwgwLxTK5qyo5A7RlkV79jvdE9vjLZi/E/UPQJEalFiuXq</span></span>
<span class="line"><span style="color: #D4D4D4">hzBrk1+1JByeVW8X/KEOaUHHMK6a36OU2H4q1oax+MG//jNSNhUB6sLU8kRxrH4ebt4Wk40N</span></span>
<span class="line"><span style="color: #D4D4D4">FQYr4wRTWF1+xkM2pmh8W4JiToP15Q0u9rBXe69s78wW2/zU12UKWGqC85UeCNsFIo/gM9DI</span></span>
<span class="line"><span style="color: #D4D4D4">UzEh7AwFODhZ4ntqNtVW1RJDBTuExWM1mG/jBTiKvhCe2Q4FWzymJdUah2Yynj4wzX+ROYX2</span></span>
<span class="line"><span style="color: #D4D4D4">G6PJ/60EFEz/K45RH9G/80R1SaHm7tH0KZZ+vFTKM9gUgoVVZCWt/7FURXFmyZ4BYuADvKvg</span></span>
<span class="line"><span style="color: #D4D4D4">FydUkofWep7ql66IjSsN2hyHik8Ee6RWQkYDcvIPflMpTBzxidGzteS4RSgg3Q0+di/WaSdN</span></span>
<span class="line"><span style="color: #D4D4D4">tQdYoiGTodL1hUzbGbxSe/XSKHY1ISPihH+1TCWz4PmwmbH+iyQ2QfrCu/Ng+cSB28xJcBBO</span></span>
<span class="line"><span style="color: #D4D4D4">HZoylZ0=</span></span>
<span class="line cbp-line-highlight"></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">/</span></span></code></pre></div>



<p>Let&#8217;s unwrap the code. BTW: the highlighted lines 1 to 18 and 29 to 30 are not required to unwrap the code. </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">4) print_emp_modern_sql_unwrapped.sql</span><span role="button" tabindex="0" data-code="create or replace PROCEDURE print_emp (IN_DEPTNO IN NUMBER DEFAULT NULL) IS
BEGIN
   
   SYS.DBMS_OUTPUT.PUT_LINE('DEPTNO EMPNO ENAME   SAL');
   SYS.DBMS_OUTPUT.PUT_LINE('------ ----- ------ ----');
   &lt;&lt;PRINT_EMPS_OF_SELECTED_DEPT&gt;&gt;
   FOR R IN (
      WITH
         
         EMP (EMPNO, ENAME, SAL, DEPTNO) AS (VALUES
            (7839, 'KING',  5000, 10),
            (7566, 'JONES', 2975, 20),
            (7788, 'SCOTT', 3000, 20)
         )
      SELECT DEPTNO, EMPNO, ENAME, SAL
        FROM EMP
       WHERE DEPTNO = IN_DEPTNO OR IN_DEPTNO IS NULL
       ORDER BY DEPTNO, SAL DESC
   ) LOOP
      SYS.DBMS_OUTPUT.PUT(LPAD(R.DEPTNO, 6));
      SYS.DBMS_OUTPUT.PUT(LPAD(R.EMPNO, 6));
      SYS.DBMS_OUTPUT.PUT(' ');
      SYS.DBMS_OUTPUT.PUT(RPAD(R.ENAME, 7));
      SYS.DBMS_OUTPUT.PUT_LINE(LPAD(R.SAL, 4));
   END LOOP PRINT_EMPS_OF_SELECTED_DEPT;
END PRINT_EMP;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">create or replace</span><span style="color: #D4D4D4"> PROCEDURE print_emp (IN_DEPTNO </span><span style="color: #569CD6">IN</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">NUMBER</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">DEFAULT</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">NULL</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">IS</span></span>
<span class="line"><span style="color: #569CD6">BEGIN</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">   </span></span>
<span class="line"><span style="color: #D4D4D4">   SYS.</span><span style="color: #DCDCAA">DBMS_OUTPUT.</span><span style="color: #4EC9B0">PUT_LINE</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39;DEPTNO EMPNO ENAME   SAL&#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   SYS.</span><span style="color: #DCDCAA">DBMS_OUTPUT.</span><span style="color: #4EC9B0">PUT_LINE</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39;------ ----- ------ ----&#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   &lt;&lt;PRINT_EMPS_OF_SELECTED_DEPT&gt;&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #C586C0">FOR</span><span style="color: #D4D4D4"> R </span><span style="color: #569CD6">IN</span><span style="color: #D4D4D4"> (</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">WITH</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">         </span></span>
<span class="line"><span style="color: #D4D4D4">         EMP (EMPNO, ENAME, SAL, DEPTNO) </span><span style="color: #569CD6">AS</span><span style="color: #D4D4D4"> (</span><span style="color: #569CD6">VALUES</span></span>
<span class="line"><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7839</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;KING&#39;</span><span style="color: #D4D4D4">,  </span><span style="color: #B5CEA8">5000</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7566</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;JONES&#39;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">2975</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7788</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;SCOTT&#39;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">3000</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">         )</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">SELECT</span><span style="color: #D4D4D4"> DEPTNO, EMPNO, ENAME, SAL</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">FROM</span><span style="color: #D4D4D4"> EMP</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #569CD6">WHERE</span><span style="color: #D4D4D4"> DEPTNO = IN_DEPTNO </span><span style="color: #569CD6">OR</span><span style="color: #D4D4D4"> IN_DEPTNO </span><span style="color: #569CD6">IS NULL</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #569CD6">ORDER BY</span><span style="color: #D4D4D4"> DEPTNO, SAL </span><span style="color: #569CD6">DESC</span></span>
<span class="line"><span style="color: #D4D4D4">   ) </span><span style="color: #C586C0">LOOP</span></span>
<span class="line"><span style="color: #D4D4D4">      SYS.</span><span style="color: #DCDCAA">DBMS_OUTPUT.</span><span style="color: #4EC9B0">PUT</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">LPAD</span><span style="color: #D4D4D4">(R.DEPTNO, </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">      SYS.</span><span style="color: #DCDCAA">DBMS_OUTPUT.</span><span style="color: #4EC9B0">PUT</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">LPAD</span><span style="color: #D4D4D4">(R.EMPNO, </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">      SYS.</span><span style="color: #DCDCAA">DBMS_OUTPUT.</span><span style="color: #4EC9B0">PUT</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39; &#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">      SYS.</span><span style="color: #DCDCAA">DBMS_OUTPUT.</span><span style="color: #4EC9B0">PUT</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">RPAD</span><span style="color: #D4D4D4">(R.ENAME, </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">      SYS.</span><span style="color: #DCDCAA">DBMS_OUTPUT.</span><span style="color: #4EC9B0">PUT_LINE</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">LPAD</span><span style="color: #D4D4D4">(R.SAL, </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #C586C0">END LOOP</span><span style="color: #D4D4D4"> PRINT_EMPS_OF_SELECTED_DEPT;</span></span>
<span class="line"><span style="color: #569CD6">END</span><span style="color: #D4D4D4"> PRINT_EMP;</span></span></code></pre></div>



<p>Interesting are the empty lines 3 and 9. The original comments are lost. Furthermore, all keywords and identifiers are in uppercase. The only exception is the name of the procedure. The Unwrapper added the <code>create or replace</code> clause to make the statement executable.</p>



<h2 class="wp-block-heading" id="wrap-modern-sql-with-oracledb-9ir2">Wrap Modern SQL with OracleDB 9iR2</h2>



<p>Now let&#8217;s try to wrap <code>print_emp_modern_sql.sql</code> with the wrap utility in the Oracle Database 9.2.0.8.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">5) wrap v9.2 print_modern_sql.sql</span><span role="button" tabindex="0" data-code="wrap iname=print_emp_modern_sql.sql oname=print_emp_modern_sql_wrapped9i.sql" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">wrap iname=print_emp_modern_sql.sql oname=print_emp_modern_sql_wrapped9i.sql</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="PL/SQL Wrapper: Release 9.2.0.8.0- 64bit Production on Sat Mar 08 14:55:28 2025

Copyright (c) Oracle Corporation 1993, 2001.  All Rights Reserved.

Processing print_emp_modern_sql.sql to print_emp_modern_sql_wrapped9i.sql
PSU(103,1,8,7):Encountered the symbol &quot;WITH&quot; when expecting one of the following:

   ( - + case mod new not null others select &lt;an identifier&gt;
   &lt;a double-quoted delimited-identifier&gt; &lt;a bind variable&gt; avg
   count current exists max min prior sql stddev sum variance
   execute forall merge time timestamp interval date
   &lt;a string literal with character set specification&gt;
   &lt;a number&gt; &lt;a single-quoted SQL string&gt; pipe
The symbol &quot;WITH&quot; was ignored.

PSU(103,1,10,42):Encountered the symbol &quot;AS&quot; when expecting one of the following:

   . ( ) , * % &amp; | = - + &lt; / &gt; at in is mod not range rem =&gt; ..
   &lt;an exponent (**)&gt; &lt;&gt; or != or ~= &gt;= &lt;= &lt;&gt; and or like
   between ||

PL/SQL Wrapper error: Compilation error(s) for:
create or replace procedure print_emp
Outputting source and continuing." style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">PL/SQL Wrapper: Release 9.2.0.8.0- 64bit Production on Sat Mar 08 14:55:28 2025</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">Copyright (c) Oracle Corporation 1993, 2001.  All Rights Reserved.</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">Processing print_emp_modern_sql.sql to print_emp_modern_sql_wrapped9i.sql</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">PSU(103,1,8,7):Encountered the symbol &quot;WITH&quot; when expecting one of the following:</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">   ( - + case mod new not null others select &lt;an identifier&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">   &lt;a double-quoted delimited-identifier&gt; &lt;a bind variable&gt; avg</span></span>
<span class="line"><span style="color: #D4D4D4">   count current exists max min prior sql stddev sum variance</span></span>
<span class="line"><span style="color: #D4D4D4">   execute forall merge time timestamp interval date</span></span>
<span class="line"><span style="color: #D4D4D4">   &lt;a string literal with character set specification&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">   &lt;a number&gt; &lt;a single-quoted SQL string&gt; pipe</span></span>
<span class="line"><span style="color: #D4D4D4">The symbol &quot;WITH&quot; was ignored.</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">PSU(103,1,10,42):Encountered the symbol &quot;AS&quot; when expecting one of the following:</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">   . ( ) , * % &amp; | = - + &lt; / &gt; at in is mod not range rem =&gt; ..</span></span>
<span class="line"><span style="color: #D4D4D4">   &lt;an exponent (**)&gt; &lt;&gt; or != or ~= &gt;= &lt;= &lt;&gt; and or like</span></span>
<span class="line"><span style="color: #D4D4D4">   between ||</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">PL/SQL Wrapper error: Compilation error(s) for:</span></span>
<span class="line"><span style="color: #D4D4D4">create or replace procedure print_emp</span></span>
<span class="line"><span style="color: #D4D4D4">Outputting source and continuing.</span></span></code></pre></div>



<p>We got two errors due to the use of modern SQL. However, we can use the parameter <code>edebug=wrap_new_sql</code> to support newer SQL grammar.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">6) wrap v9.2 print_modern_sql.sql with edebug=wrap_new_sql</span><span role="button" tabindex="0" data-code="wrap iname=print_emp_modern_sql.sql oname=print_emp_modern_sql_wrapped9i.sql edebug=wrap_new_sql" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">wrap iname=print_emp_modern_sql.sql oname=print_emp_modern_sql_wrapped9i.sql edebug=wrap_new_sql</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="PL/SQL Wrapper: Release 9.2.0.8.0- 64bit Production on Sat Mar 08 14:56:01 2025

Copyright (c) Oracle Corporation 1993, 2001.  All Rights Reserved.

Processing print_emp_modern_sql.sql to print_emp_modern_sql_wrapped9i.sql" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">PL/SQL Wrapper: Release 9.2.0.8.0- 64bit Production on Sat Mar 08 14:56:01 2025</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">Copyright (c) Oracle Corporation 1993, 2001.  All Rights Reserved.</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">Processing print_emp_modern_sql.sql to print_emp_modern_sql_wrapped9i.sql</span></span></code></pre></div>



<p>And the resulting file looks like this:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(3 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">7) print_emp_modern_sql_wrapped9i.sql</span><span role="button" tabindex="0" data-code="create or replace procedure print_emp wrapped 
0
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
3
7
9200000
1
4
0 
18
2 :e:
1PRINT_EMP:
1IN_DEPTNO:
1NUMBER:
1SYS:
1DBMS_OUTPUT:
1PUT_LINE:
1DEPTNO EMPNO ENAME   SAL:
1------ ----- ------ ----:
1PRINT_EMPS_OF_SELECTED_DEPT:
1R:
1EMP:
1EMPNO:
1ENAME:
1SAL:
1DEPTNO:
1LOOP:
1with:n         -- table value constructor is a 23ai feature:n         emp (em+
1pno, ename, sal, deptno) as (values:n            (7839, 'KING',  5000, 10),:n+
1            (7566, 'JONES', 2975, 20),:n            (7788, 'SCOTT', 3000, 20)+
1:n         ):n      select deptno, empno, ename, sal:n        from emp:n     +
1  where deptno = in_deptno or in_deptno is null:n       order by deptno, sal +
1desc:n   :
1PUT:
1LPAD:
16:
1 :
1RPAD:
17:
14:
0

0
0
7e
2
0 9a 8f a0 4d b0 3d b4
55 6a :2 a0 6b a0 6b 6e a5
57 :2 a0 6b a0 6b 6e a5 57
93 91 :10 a0 12a 37 :2 a0 6b a0
6b :3 a0 6b 51 a5 b a5 57
:2 a0 6b a0 6b :3 a0 6b 51 a5
b a5 57 :2 a0 6b a0 6b 6e
a5 57 :2 a0 6b a0 6b :3 a0 6b
51 a5 b a5 57 :2 a0 6b a0
6b :3 a0 6b 51 a5 b a5 57
b7 :2 a0 47 b0 46 b7 a4 a0
b1 11 68 4f 1d 17 b5 
7e
2
0 3 20 1b 1f 1a 28 17
2d 31 35 39 3d 40 44 47
4c 4d 52 56 5a 5d 61 64
69 6a 6f 77 7b 7f 83 87
8b 8f 93 97 9b 9f a3 a7
ab af b3 b7 bb c7 c9 cd
d1 d4 d8 db df e3 e7 ea
ed ee f0 f1 f6 fa fe 101
105 108 10c 110 114 117 11a 11b
11d 11e 123 127 12b 12e 132 135
13a 13b 140 144 148 14b 14f 152
156 15a 15e 161 164 165 167 168
16d 171 175 178 17c 17f 183 187
18b 18e 191 192 194 195 19a 19c
1a0 1a4 1ab 1ac 1af 1b1 1b5 1b9
1bb 1c7 1cb 1cd 1ce 1d7 
7e
2
0 b 16 23 32 :2 16 15 :2 1
4 :2 8 :2 14 1d :3 4 :2 8 :2 14 1d
:2 4 6 8 a f 16 1d 22
e 16 1d 24 :2 e 17 24 11
19 6 d 4 7 :2 b :2 17 1b
20 :2 22 2a :2 1b :3 7 :2 b :2 17 1b
20 :2 22 29 :2 1b :3 7 :2 b :2 17 1b
:3 7 :2 b :2 17 1b 20 :2 22 29 :2 1b
:3 7 :2 b :2 17 20 25 :2 27 2c :2 20
:2 7 6 8 d 4 :4 1 5 :7 1

7e
4
0 :9 1 :8 4 :8 5
6 7 :5 a :4 f
10 :3 11 :2 12 13
:2 7 :e 14 :e 15 :8 16
:e 17 :e 18 13 :2 19
7 :4 2 1a :7 1

1d9
4
:3 0 1 :a 0 79
1 :7 0 5 :2 0
:2 3 :4 0 2 :7 0
5 3 4 :2 0
7 :2 0 79 1
8 :2 0 4 :3 0
5 :3 0 a b
0 6 :3 0 c
d 0 7 :4 0
7 e 10 :2 0
74 4 :3 0 5
:3 0 12 13 0
6 :3 0 14 15
0 8 :4 0 9
16 18 :2 0 74
9 :5 0 72 2
a :3 0 b :3 0
c :3 0 d :3 0
e :3 0 f :3 0
f :3 0 c :3 0
d :3 0 e :3 0
b :3 0 f :3 0
2 :3 0 2 :3 0
f :3 0 e :3 0
10 :4 0 11 1
:8 0 2d 1b 2c
4 :3 0 5 :3 0
2e 2f 0 12
:3 0 30 31 0
13 :3 0 a :3 0
f :3 0 34 35
0 14 :2 0 b
33 38 e 32
3a :2 0 6e 4
:3 0 5 :3 0 3c
3d 0 12 :3 0
3e 3f 0 13
:3 0 a :3 0 c
:3 0 42 43 0
14 :2 0 10 41
46 13 40 48
:2 0 6e 4 :3 0
5 :3 0 4a 4b
0 12 :3 0 4c
4d 0 15 :4 0
15 4e 50 :2 0
6e 4 :3 0 5
:3 0 52 53 0
12 :3 0 54 55
0 16 :3 0 a
:3 0 d :3 0 58
59 0 17 :2 0
17 57 5c 1a
56 5e :2 0 6e
4 :3 0 5 :3 0
60 61 0 6
:3 0 62 63 0
13 :3 0 a :3 0
e :3 0 66 67
0 18 :2 0 1c
65 6a 1f 64
6c :2 0 6e 21
71 10 :3 0 9
:3 0 2d 6e :4 0
73 27 72 71
74 29 78 :3 0
78 1 :4 0 78
77 74 75 :6 0
79 :2 0 1 8
78 7c :3 0 7b
79 7d :8 0 
2d
4
:3 0 1 2 1
6 1 f 1
17 2 36 37
1 39 2 44
45 1 47 1
4f 2 5a 5b
1 5d 2 68
69 1 6b 5
3b 49 51 5f
6d 1 1a 3
11 19 73 
1
4
0 
7c
0
1
14
2
4
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 
2 1 0
1a 1 2
1 0 1
1b 2 0
0

/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">create or replace</span><span style="color: #D4D4D4"> procedure print_emp wrapped </span></span>
<span class="line"><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #D4D4D4">abcd</span></span>
<span class="line"><span style="color: #B5CEA8">3</span></span>
<span class="line"><span style="color: #B5CEA8">7</span></span>
<span class="line"><span style="color: #B5CEA8">9200000</span></span>
<span class="line"><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #B5CEA8">4</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #B5CEA8">18</span></span>
<span class="line"><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> :e:</span></span>
<span class="line"><span style="color: #D4D4D4">1PRINT_EMP:</span></span>
<span class="line"><span style="color: #D4D4D4">1IN_DEPTNO:</span></span>
<span class="line"><span style="color: #D4D4D4">1NUMBER:</span></span>
<span class="line"><span style="color: #D4D4D4">1SYS:</span></span>
<span class="line"><span style="color: #D4D4D4">1DBMS_OUTPUT:</span></span>
<span class="line"><span style="color: #D4D4D4">1PUT_LINE:</span></span>
<span class="line"><span style="color: #D4D4D4">1DEPTNO EMPNO ENAME   SAL:</span></span>
<span class="line"><span style="color: #B5CEA8">1</span><span style="color: #6A9955">------ ----- ------ ----:</span></span>
<span class="line"><span style="color: #D4D4D4">1PRINT_EMPS_OF_SELECTED_DEPT:</span></span>
<span class="line"><span style="color: #D4D4D4">1R:</span></span>
<span class="line"><span style="color: #D4D4D4">1EMP:</span></span>
<span class="line"><span style="color: #D4D4D4">1EMPNO:</span></span>
<span class="line"><span style="color: #D4D4D4">1ENAME:</span></span>
<span class="line"><span style="color: #D4D4D4">1SAL:</span></span>
<span class="line"><span style="color: #D4D4D4">1DEPTNO:</span></span>
<span class="line"><span style="color: #D4D4D4">1LOOP:</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">1with:n         </span><span style="color: #6A9955">-- table value constructor is a 23ai feature:n         emp (em+</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">1pno, ename, sal, deptno) </span><span style="color: #569CD6">as</span><span style="color: #D4D4D4"> (</span><span style="color: #569CD6">values</span><span style="color: #D4D4D4">:n            (</span><span style="color: #B5CEA8">7839</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;KING&#39;</span><span style="color: #D4D4D4">,  </span><span style="color: #B5CEA8">5000</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">),:n+</span></span>
<span class="line cbp-line-highlight"><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7566</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;JONES&#39;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">2975</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4">),:n            (</span><span style="color: #B5CEA8">7788</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;SCOTT&#39;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">3000</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4">)+</span></span>
<span class="line cbp-line-highlight"><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">:n         ):n      </span><span style="color: #569CD6">select</span><span style="color: #D4D4D4"> deptno, empno, ename, sal:n        </span><span style="color: #569CD6">from</span><span style="color: #D4D4D4"> emp:n     +</span></span>
<span class="line cbp-line-highlight"><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">  </span><span style="color: #569CD6">where</span><span style="color: #D4D4D4"> deptno = in_deptno </span><span style="color: #569CD6">or</span><span style="color: #D4D4D4"> in_deptno </span><span style="color: #569CD6">is null</span><span style="color: #D4D4D4">:n       </span><span style="color: #569CD6">order by</span><span style="color: #D4D4D4"> deptno, sal +</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">1desc:n   :</span></span>
<span class="line"><span style="color: #D4D4D4">1PUT:</span></span>
<span class="line"><span style="color: #D4D4D4">1LPAD:</span></span>
<span class="line"><span style="color: #B5CEA8">16</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> :</span></span>
<span class="line"><span style="color: #D4D4D4">1RPAD:</span></span>
<span class="line"><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #B5CEA8">14</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #B5CEA8">0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">7e</span></span>
<span class="line"><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 9a 8f a0 4d b0 3d b4</span></span>
<span class="line"><span style="color: #B5CEA8">55</span><span style="color: #D4D4D4"> 6a :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> a0 6b a0 6b 6e a5</span></span>
<span class="line"><span style="color: #B5CEA8">57</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> a0 6b a0 6b 6e a5 </span><span style="color: #B5CEA8">57</span></span>
<span class="line"><span style="color: #B5CEA8">93</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">91</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4"> a0 12a </span><span style="color: #B5CEA8">37</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> a0 6b a0</span></span>
<span class="line"><span style="color: #D4D4D4">6b :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> a0 6b </span><span style="color: #B5CEA8">51</span><span style="color: #D4D4D4"> a5 b a5 </span><span style="color: #B5CEA8">57</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> a0 6b a0 6b :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> a0 6b </span><span style="color: #B5CEA8">51</span><span style="color: #D4D4D4"> a5</span></span>
<span class="line"><span style="color: #D4D4D4">b a5 </span><span style="color: #B5CEA8">57</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> a0 6b a0 6b 6e</span></span>
<span class="line"><span style="color: #D4D4D4">a5 </span><span style="color: #B5CEA8">57</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> a0 6b a0 6b :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> a0 6b</span></span>
<span class="line"><span style="color: #B5CEA8">51</span><span style="color: #D4D4D4"> a5 b a5 </span><span style="color: #B5CEA8">57</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> a0 6b a0</span></span>
<span class="line"><span style="color: #D4D4D4">6b :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> a0 6b </span><span style="color: #B5CEA8">51</span><span style="color: #D4D4D4"> a5 b a5 </span><span style="color: #B5CEA8">57</span></span>
<span class="line"><span style="color: #D4D4D4">b7 :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> a0 </span><span style="color: #B5CEA8">47</span><span style="color: #D4D4D4"> b0 </span><span style="color: #B5CEA8">46</span><span style="color: #D4D4D4"> b7 a4 a0</span></span>
<span class="line"><span style="color: #D4D4D4">b1 </span><span style="color: #B5CEA8">11</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">68</span><span style="color: #D4D4D4"> 4f 1d </span><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> b5 </span></span>
<span class="line"><span style="color: #D4D4D4">7e</span></span>
<span class="line"><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4"> 1b 1f 1a </span><span style="color: #B5CEA8">28</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">17</span></span>
<span class="line"><span style="color: #D4D4D4">2d </span><span style="color: #B5CEA8">31</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">35</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">39</span><span style="color: #D4D4D4"> 3d </span><span style="color: #B5CEA8">40</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">44</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">47</span></span>
<span class="line"><span style="color: #D4D4D4">4c 4d </span><span style="color: #B5CEA8">52</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">56</span><span style="color: #D4D4D4"> 5a 5d </span><span style="color: #B5CEA8">61</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">64</span></span>
<span class="line"><span style="color: #B5CEA8">69</span><span style="color: #D4D4D4"> 6a 6f </span><span style="color: #B5CEA8">77</span><span style="color: #D4D4D4"> 7b 7f </span><span style="color: #B5CEA8">83</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">87</span></span>
<span class="line"><span style="color: #D4D4D4">8b 8f </span><span style="color: #B5CEA8">93</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">97</span><span style="color: #D4D4D4"> 9b 9f a3 a7</span></span>
<span class="line"><span style="color: #D4D4D4">ab af b3 b7 bb c7 c9 cd</span></span>
<span class="line"><span style="color: #D4D4D4">d1 d4 d8 db df e3 e7 ea</span></span>
<span class="line"><span style="color: #D4D4D4">ed ee f0 f1 f6 fa fe </span><span style="color: #B5CEA8">101</span></span>
<span class="line"><span style="color: #B5CEA8">105</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">108</span><span style="color: #D4D4D4"> 10c </span><span style="color: #B5CEA8">110</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">114</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">117</span><span style="color: #D4D4D4"> 11a 11b</span></span>
<span class="line"><span style="color: #D4D4D4">11d 11e </span><span style="color: #B5CEA8">123</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">127</span><span style="color: #D4D4D4"> 12b 12e </span><span style="color: #B5CEA8">132</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">135</span></span>
<span class="line"><span style="color: #D4D4D4">13a 13b </span><span style="color: #B5CEA8">140</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">144</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">148</span><span style="color: #D4D4D4"> 14b 14f </span><span style="color: #B5CEA8">152</span></span>
<span class="line"><span style="color: #B5CEA8">156</span><span style="color: #D4D4D4"> 15a 15e </span><span style="color: #B5CEA8">161</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">164</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">165</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">167</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">168</span></span>
<span class="line"><span style="color: #D4D4D4">16d </span><span style="color: #B5CEA8">171</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">175</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">178</span><span style="color: #D4D4D4"> 17c 17f </span><span style="color: #B5CEA8">183</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">187</span></span>
<span class="line"><span style="color: #D4D4D4">18b 18e </span><span style="color: #B5CEA8">191</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">192</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">194</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">195</span><span style="color: #D4D4D4"> 19a 19c</span></span>
<span class="line"><span style="color: #D4D4D4">1a0 1a4 1ab 1ac 1af 1b1 1b5 1b9</span></span>
<span class="line"><span style="color: #D4D4D4">1bb 1c7 1cb 1cd 1ce 1d7 </span></span>
<span class="line"><span style="color: #D4D4D4">7e</span></span>
<span class="line"><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> b </span><span style="color: #B5CEA8">16</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">23</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">32</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">16</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">15</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">14</span><span style="color: #D4D4D4"> 1d :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">14</span><span style="color: #D4D4D4"> 1d</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> a f </span><span style="color: #B5CEA8">16</span><span style="color: #D4D4D4"> 1d </span><span style="color: #B5CEA8">22</span></span>
<span class="line"><span style="color: #D4D4D4">e </span><span style="color: #B5CEA8">16</span><span style="color: #D4D4D4"> 1d </span><span style="color: #B5CEA8">24</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> e </span><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">24</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">11</span></span>
<span class="line"><span style="color: #B5CEA8">19</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4"> d </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> b :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> 1b</span></span>
<span class="line"><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">22</span><span style="color: #D4D4D4"> 2a :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> 1b :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> b :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> 1b</span></span>
<span class="line"><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">22</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">29</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> 1b :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> b :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> 1b</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> b :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> 1b </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">22</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">29</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> 1b</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> b :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">25</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">27</span><span style="color: #D4D4D4"> 2c :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">20</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> d </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">7e</span></span>
<span class="line"><span style="color: #B5CEA8">4</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">9</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">5</span></span>
<span class="line"><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> a :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> f</span></span>
<span class="line"><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">11</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">12</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">13</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :e </span><span style="color: #B5CEA8">14</span><span style="color: #D4D4D4"> :e </span><span style="color: #B5CEA8">15</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">16</span></span>
<span class="line"><span style="color: #D4D4D4">:e </span><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> :e </span><span style="color: #B5CEA8">18</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">13</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">19</span></span>
<span class="line"><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> 1a :</span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">1d9</span></span>
<span class="line"><span style="color: #B5CEA8">4</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> :a </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">79</span></span>
<span class="line"><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">79</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> a b</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">c</span></span>
<span class="line"><span style="color: #D4D4D4">d </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4"> e </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">74</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">5</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">12</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">13</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">14</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">15</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9</span></span>
<span class="line"><span style="color: #B5CEA8">16</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">18</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">74</span></span>
<span class="line"><span style="color: #B5CEA8">9</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">72</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #D4D4D4">a :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> b :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #569CD6">c</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> d :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">e :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> f :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">f :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">c</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">d :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> e :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">b :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> f :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">f :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> e :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">11</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 2d 1b 2c</span></span>
<span class="line"><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">2e 2f </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">12</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">30</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">31</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">13</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> a :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">f :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">34</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">35</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">14</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> b</span></span>
<span class="line"><span style="color: #B5CEA8">33</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">38</span><span style="color: #D4D4D4"> e </span><span style="color: #B5CEA8">32</span></span>
<span class="line"><span style="color: #D4D4D4">3a :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 6e </span><span style="color: #B5CEA8">4</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 3c</span></span>
<span class="line"><span style="color: #D4D4D4">3d </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">12</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">3e 3f </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">13</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> a :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">c</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">42</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">43</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">14</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">41</span></span>
<span class="line"><span style="color: #B5CEA8">46</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">13</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">40</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">48</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 6e </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 4a 4b</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">12</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 4c</span></span>
<span class="line"><span style="color: #D4D4D4">4d </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">15</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">15</span><span style="color: #D4D4D4"> 4e </span><span style="color: #B5CEA8">50</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">6e </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">5</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">52</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">53</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">12</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">54</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">55</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">16</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> a</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> d :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">58</span></span>
<span class="line"><span style="color: #B5CEA8">59</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">57</span><span style="color: #D4D4D4"> 5c 1a</span></span>
<span class="line"><span style="color: #B5CEA8">56</span><span style="color: #D4D4D4"> 5e :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 6e</span></span>
<span class="line"><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">60</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">61</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">6</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">62</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">63</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">13</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> a :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">e :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">66</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">67</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">18</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 1c</span></span>
<span class="line"><span style="color: #B5CEA8">65</span><span style="color: #D4D4D4"> 6a 1f </span><span style="color: #B5CEA8">64</span></span>
<span class="line"><span style="color: #D4D4D4">6c :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 6e </span><span style="color: #B5CEA8">21</span></span>
<span class="line"><span style="color: #B5CEA8">71</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 2d 6e :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">73</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">27</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">72</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">71</span></span>
<span class="line"><span style="color: #B5CEA8">74</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">29</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">78</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">78</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">78</span></span>
<span class="line"><span style="color: #B5CEA8">77</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">74</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">75</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">79</span><span style="color: #D4D4D4"> :</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8</span></span>
<span class="line"><span style="color: #B5CEA8">78</span><span style="color: #D4D4D4"> 7c :</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> 7b</span></span>
<span class="line"><span style="color: #B5CEA8">79</span><span style="color: #D4D4D4"> 7d :</span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">2d</span></span>
<span class="line"><span style="color: #B5CEA8">4</span></span>
<span class="line"><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> f </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #B5CEA8">17</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">36</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">37</span></span>
<span class="line"><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">39</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">44</span></span>
<span class="line"><span style="color: #B5CEA8">45</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">47</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #D4D4D4">4f </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> 5a 5b</span></span>
<span class="line"><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> 5d </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">68</span></span>
<span class="line"><span style="color: #B5CEA8">69</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> 6b </span><span style="color: #B5CEA8">5</span></span>
<span class="line"><span style="color: #D4D4D4">3b </span><span style="color: #B5CEA8">49</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">51</span><span style="color: #D4D4D4"> 5f</span></span>
<span class="line"><span style="color: #D4D4D4">6d </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> 1a </span><span style="color: #B5CEA8">3</span></span>
<span class="line"><span style="color: #B5CEA8">11</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">19</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">73</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #B5CEA8">4</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">7c</span></span>
<span class="line"><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #B5CEA8">14</span></span>
<span class="line"><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #B5CEA8">4</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">1a </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #D4D4D4">1b </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #B5CEA8">0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">/</span></span></code></pre></div>



<p>The query is visible in plain text on lines 42 to 47.</p>



<p>When we try to install this wrapped package in the OracleDB 23ai we get the following error:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">8) Error message with default settings</span><span role="button" tabindex="0" data-code="Procedure PRINT_EMP compiled

LINE/COL  ERROR
--------- -------------------------------------------------------------
0/0       PLS-01918: 9.2 and earlier wrap formats are not permitted
Errors: check compiler log" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">Procedure PRINT_EMP compiled</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">LINE/COL  ERROR</span></span>
<span class="line"><span style="color: #D4D4D4">--------- -------------------------------------------------------------</span></span>
<span class="line"><span style="color: #D4D4D4">0/0       PLS-01918: 9.2 and earlier wrap formats are not permitted</span></span>
<span class="line"><span style="color: #D4D4D4">Errors: check compiler log</span></span></code></pre></div>



<p>We have to enable <a href="https://docs.oracle.com/en/database/oracle/oracle-database/23/refrn/PERMIT_92_WRAP_FORMAT.html">permit_92_wrap_format</a> to overcome this issue. This is not possible on session or PDB level. So we have to change the settings as follows:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">9) enable permit_92_wrap_format</span><span role="button" tabindex="0" data-code="alter session set container=cdb$root;
alter system set permit_92_wrap_format=true scope=spfile;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">alter</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">session</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">set</span><span style="color: #D4D4D4"> container=cdb$</span><span style="color: #569CD6">root</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #569CD6">alter</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">system</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">set</span><span style="color: #D4D4D4"> permit_92_wrap_format=true scope=spfile;</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="Session altered.


System altered." style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">Session altered.</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">System altered.</span></span></code></pre></div>



<p>After a restart of the database, we can install <code>print_emp_modern_sql_wrapped9i.sql</code> successfully.</p>



<p>System parameters that you can&#8217;t set at the PDB level are very limiting. In fact, it makes installing PL/SQL code wrapped with the 9i wrap utility in an Autonomous Database pretty much impossible.</p>



<h2 class="wp-block-heading" id="wrap-modern-plsql-with-oracledb-9ir2">Wrap Modern PL/SQL with OracleDB 9iR2</h2>



<p>We have seen that it is possible to process arbitrary SQL within PL/SQL with the wrap utility in OracleDB 9.2. </p>



<p>Now let&#8217;s add some PL/SQL constructs that were introduced in later versions of the Oracle Database.</p>



<p>The highlighted lines show the changes to <code>print_emp_modern_sql</code>. We use a PL/SQL identifier <code>print_employees_of_a_selected_department</code> that is longer than 30 bytes. Also, we use the <code>continue</code> statement, which wasn&#8217;t available in version 9.2.0.8.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">10) print_emp_modern_plsql.sql</span><span role="button" tabindex="0" data-code="create or replace procedure print_emp (in_deptno in number default null) is
begin
   -- print column headers
   sys.dbms_output.put_line('DEPTNO EMPNO ENAME   SAL');
   sys.dbms_output.put_line('------ ----- ------ ----');
   &lt;&lt;print_employees_of_a_selected_department&gt;&gt;
   for r in (
      with
         -- table value constructor is a 23ai feature
         emp (empno, ename, sal, deptno) as (values
            (7839, 'KING',  5000, 10),
            (7566, 'JONES', 2975, 20),
            (7788, 'SCOTT', 3000, 20)
         )
      select deptno, empno, ename, sal
        from emp
       where deptno = in_deptno or in_deptno is null
       order by deptno, sal desc
   ) loop
      -- continue is a 11g feature
      continue when r.sal &lt; 1000;
      sys.dbms_output.put(lpad(r.deptno, 6));
      sys.dbms_output.put(lpad(r.empno, 6));
      sys.dbms_output.put(' ');
      sys.dbms_output.put(rpad(r.ename, 7));
      sys.dbms_output.put_line(lpad(r.sal, 4));
   end loop print_employees_of_a_selected_department;
end print_emp;
/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">create or replace</span><span style="color: #D4D4D4"> procedure print_emp (in_deptno </span><span style="color: #569CD6">in</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">number</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">default</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">is</span></span>
<span class="line"><span style="color: #569CD6">begin</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #6A9955">-- print column headers</span></span>
<span class="line"><span style="color: #D4D4D4">   sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put_line</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39;DEPTNO EMPNO ENAME   SAL&#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put_line</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39;------ ----- ------ ----&#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">   &lt;&lt;print_employees_of_a_selected_department&gt;&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> r </span><span style="color: #569CD6">in</span><span style="color: #D4D4D4"> (</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">with</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #6A9955">-- table value constructor is a 23ai feature</span></span>
<span class="line"><span style="color: #D4D4D4">         emp (empno, ename, sal, deptno) </span><span style="color: #569CD6">as</span><span style="color: #D4D4D4"> (</span><span style="color: #569CD6">values</span></span>
<span class="line"><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7839</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;KING&#39;</span><span style="color: #D4D4D4">,  </span><span style="color: #B5CEA8">5000</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7566</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;JONES&#39;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">2975</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">            (</span><span style="color: #B5CEA8">7788</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;SCOTT&#39;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">3000</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">         )</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">select</span><span style="color: #D4D4D4"> deptno, empno, ename, sal</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">from</span><span style="color: #D4D4D4"> emp</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #569CD6">where</span><span style="color: #D4D4D4"> deptno = in_deptno </span><span style="color: #569CD6">or</span><span style="color: #D4D4D4"> in_deptno </span><span style="color: #569CD6">is null</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #569CD6">order by</span><span style="color: #D4D4D4"> deptno, sal </span><span style="color: #569CD6">desc</span></span>
<span class="line"><span style="color: #D4D4D4">   ) </span><span style="color: #C586C0">loop</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #6A9955">-- continue is a 11g feature</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">      </span><span style="color: #C586C0">continue</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">when</span><span style="color: #D4D4D4"> r.sal &lt; </span><span style="color: #B5CEA8">1000</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">lpad</span><span style="color: #D4D4D4">(r.deptno, </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">lpad</span><span style="color: #D4D4D4">(r.empno, </span><span style="color: #B5CEA8">6</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39; &#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">rpad</span><span style="color: #D4D4D4">(r.ename, </span><span style="color: #B5CEA8">7</span><span style="color: #D4D4D4">));</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put_line</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">lpad</span><span style="color: #D4D4D4">(r.sal, </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4">));</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">   </span><span style="color: #C586C0">end loop</span><span style="color: #D4D4D4"> print_employees_of_a_selected_department;</span></span>
<span class="line"><span style="color: #569CD6">end</span><span style="color: #D4D4D4"> print_emp;</span></span>
<span class="line"><span style="color: #D4D4D4">/</span></span></code></pre></div>



<p>Let&#8217;s try to wrap this code with the wrap utility of the Oracle Database 9.2.0.8.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">11) wrap v9.2 print_modern_plsql.sql with edebug=wrap_new_sql</span><span role="button" tabindex="0" data-code=" wrap iname=print_emp_modern_plsql.sql oname=print_emp_modern_plsql_wrapped9i.sql edebug=wrap_new_sql" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4"> wrap iname=print_emp_modern_plsql.sql oname=print_emp_modern_plsql_wrapped9i.sql edebug=wrap_new_sql</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="PL/SQL Wrapper: Release 9.2.0.8.0- 64bit Production on Sat Mar 08 16:11:45 2025

Copyright (c) Oracle Corporation 1993, 2001.  All Rights Reserved.

Processing print_emp_modern_plsql.sql to print_emp_modern_plsql_wrapped9i.sql
PSU(114,1,6,6):identifier 'PRINT_EMPLOYEES_OF_A_SELECTED_' too long
PSU(103,1,21,16):Encountered the symbol &quot;WHEN&quot; when expecting one of the following:

   := . ( @ % ;

PSU(114,1,27,13):identifier 'PRINT_EMPLOYEES_OF_A_SELECTED_' too long
PL/SQL Wrapper error: Compilation error(s) for:
create or replace procedure print_emp
Outputting source and continuing." style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">PL/SQL Wrapper: Release 9.2.0.8.0- 64bit Production on Sat Mar 08 16:11:45 2025</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">Copyright (c) Oracle Corporation 1993, 2001.  All Rights Reserved.</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">Processing print_emp_modern_plsql.sql to print_emp_modern_plsql_wrapped9i.sql</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">PSU(114,1,6,6):identifier &#39;PRINT_EMPLOYEES_OF_A_SELECTED_&#39; too long</span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">PSU(103,1,21,16):Encountered the symbol &quot;WHEN&quot; when expecting one of the following:</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line"><span style="color: #D4D4D4">   := . ( @ % ;</span></span>
<span class="line"><span style="color: #D4D4D4"></span></span>
<span class="line cbp-line-highlight"><span style="color: #D4D4D4">PSU(114,1,27,13):identifier &#39;PRINT_EMPLOYEES_OF_A_SELECTED_&#39; too long</span></span>
<span class="line"><span style="color: #D4D4D4">PL/SQL Wrapper error: Compilation error(s) for:</span></span>
<span class="line"><span style="color: #D4D4D4">create or replace procedure print_emp</span></span>
<span class="line"><span style="color: #D4D4D4">Outputting source and continuing.</span></span></code></pre></div>



<p>It is impossible to wrap PL/SQL code with grammar constructs that are missing in the Oracle database version of the wrap utility. This is only true for Oracle Database versions before 10g, though.</p>



<p>In case of an error, the wrap utility writes the original code unchanged to the target file. So technically, the resulting file can be installed successfully.</p>



<h2 class="wp-block-heading" id="conclusion">Conclusion</h2>



<p>Still wrapping PL/SQL with Oracle 9i Release 2? It’s time to move on. Staying tied to 2007’s feature set means restricting your application’s potential and compatibility.</p>



<p>And if you’re absolutely sure you need a 9i Unwrapper, I’m not the person to ask &#8211; <a href="http://www.petefinnigan.com/services/unwrapping_plsql.htm">Pete</a> is.</p>



<p></p>
<p>The post <a href="https://www.salvis.com/blog/2025/03/08/wrapping-and-unwrapping-pl-sql/">Wrapping and Unwrapping PL/SQL</a> appeared first on <a href="https://www.salvis.com/blog">Philipp Salvisberg&#039;s Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.salvis.com/blog/2025/03/08/wrapping-and-unwrapping-pl-sql/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Moving to GitHub</title>
		<link>https://www.salvis.com/blog/2019/12/22/moving-to-github/</link>
		
		<dc:creator><![CDATA[Philipp Salvisberg]]></dc:creator>
		<pubDate>Sat, 21 Dec 2019 23:51:56 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL Analyzer]]></category>
		<category><![CDATA[PL/SQL Cop]]></category>
		<category><![CDATA[PL/SQL Unwrapper]]></category>
		<guid isPermaLink="false">https://www.salvis.com/blog/?p=9495</guid>

					<description><![CDATA[<p>Over the years, my blog has become one big mess. It was no longer a blog. It contained product pages, change logs, software downloads, FAQs and even a forum. That was a nice experiment. But now it&#8217;s time to move everything that doesn&#8217;t belong in my personal blog to another place. A<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://www.salvis.com/blog/2019/12/22/moving-to-github/">Moving to GitHub</a> appeared first on <a href="https://www.salvis.com/blog">Philipp Salvisberg&#039;s Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Over the years, my blog has become one big mess. It was no longer a blog. It contained product pages, change logs, software downloads, FAQs and even a forum. That was a nice experiment. But now it&#8217;s time to move everything that doesn&#8217;t belong in my personal blog to another place. A place where the content can be properly managed. GitHub.</p>



<h2 class="wp-block-heading">Moved</h2>



<p>I moved all product information including change logs and frequently asked questions to the following GitHub repositories:</p>



<ul class="wp-block-list">
<li><a href="https://github.com/Trivadis/plsql-analyzer">PL/SQL Analyzer</a></li>



<li><a href="https://github.com/Trivadis/plsql-cop-cli">PL/SQL Cop Command Line</a></li>



<li><a href="https://github.com/Trivadis/plsql-cop-validators">PL/SQL Cop Validators</a></li>



<li><a href="https://github.com/Trivadis/plsql-cop-sonar">PL/SQL Cop for SonarQube</a></li>



<li><a href="https://github.com/Trivadis/plsql-cop-sqldev">PL/SQL Cop for SQL Developer</a></li>



<li><a href="https://github.com/Trivadis/plsql-unwrapper-sqldev">PL/SQL Unwrapper for SQL Developer</a></li>



<li><a href="https://github.com/PhilippSalvisberg/plscope-utils/tree/main/sqldev">plscope-utils for SQL Developer</a></li>
</ul>



<p>These repositories contain the product information and the software releases including the release history. The idea is to manage all issues in GitHub repositories, regardless of the public availability of the product source code. I&#8217;m sure this will simplify the work of all involved parties.</p>



<h2 class="wp-block-heading">Stashed</h2>



<p>I removed the forum from the main menu. However, it is still there. If you know the URL (e.g. by guessing or because you have some forum e-mails) then you may access it. For the time being, I keep it in read-only mode. However, I plan to delete the forum without migrating the content.</p>



<h2 class="wp-block-heading">Kept</h2>



<p>The Download area is still there. However, all links including download links point to other websites.</p>



<h2 class="wp-block-heading">Summary</h2>



<p>The move to GitHub is complete. I registered a lot of redirects. So I expect all links to salvis.com to work still and show the expected content. Please leave a comment, If you experience dead links. Thank you.</p>
<p>The post <a href="https://www.salvis.com/blog/2019/12/22/moving-to-github/">Moving to GitHub</a> appeared first on <a href="https://www.salvis.com/blog">Philipp Salvisberg&#039;s Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PL/SQL Bulk Unwrap</title>
		<link>https://www.salvis.com/blog/2016/06/26/plsql-bulk-unwrap/</link>
					<comments>https://www.salvis.com/blog/2016/06/26/plsql-bulk-unwrap/#comments</comments>
		
		<dc:creator><![CDATA[Philipp Salvisberg]]></dc:creator>
		<pubDate>Sun, 26 Jun 2016 21:44:05 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[oddgen]]></category>
		<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[PL/SQL Unwrapper]]></category>
		<category><![CDATA[SQL Developer]]></category>
		<guid isPermaLink="false">https://www.salvis.com/blog/?p=7152</guid>

					<description><![CDATA[<p>406 days ago I released PL/SQL Unwrapper for SQL Developer version 0.1.1 and blogged about it. With this extension, you can unwrap the content of a SQL Developer window. Time for an update. With the new version 1.0 you can unwrap multiple selected objects with a few mouse clicks. In this blog<span class="excerpt-hellip"> […]</span></p>
<p>The post <a href="https://www.salvis.com/blog/2016/06/26/plsql-bulk-unwrap/">PL/SQL Bulk Unwrap</a> appeared first on <a href="https://www.salvis.com/blog">Philipp Salvisberg&#039;s Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>406 days ago I released PL/SQL Unwrapper for SQL Developer version 0.1.1 and blogged about it. With this extension, you can unwrap the content of a SQL Developer window. Time for an update. With the new version 1.0 you can unwrap multiple selected objects with a few mouse clicks. In this blog post, I show how.</p>



<h2 class="wp-block-heading">1. Install Extensions</h2>



<p>I assume that you are already using&nbsp;SQL Developer 4.0.2 or higher. If not then it is about time that you grab the latest version from <a href="https://docs.oracle.com/en/database/oracle/sql-developer/index.html">here</a>&nbsp;and install it. It&#8217;s important to note that the extensions won&#8217;t run in older versions&nbsp;of SQL Developer.</p>



<p>Configure the&nbsp;update center <a href="https://update.salvis.com/">https://update.salvis.com/</a> and <a href="https://update.oddgen.org/">https://update.oddgen.org/</a> to install the extensions for SQL Developer:</p>



<figure class="wp-block-image"><a href="https://www.salvis.com/blog/wp-content/uploads/2016/06/updates_oddgen_unwrapper.png"><img fetchpriority="high" decoding="async" width="385" height="141" src="https://www.salvis.com/blog/wp-content/uploads/2016/06/updates_oddgen_unwrapper.png" alt="updates_oddgen_unwrapper" class="wp-image-7155" srcset="https://www.salvis.com/blog/wp-content/uploads/2016/06/updates_oddgen_unwrapper.png 385w, https://www.salvis.com/blog/wp-content/uploads/2016/06/updates_oddgen_unwrapper-300x110.png 300w" sizes="(max-width:767px) 385px, 385px" /></a></figure>



<p>If you cannot use the update center because your company&#8217;s network restricts internet access then download <a href="https://github.com/oddgen/oddgen/releases">oddgen</a>,  <a href="https://github.com/Trivadis/plsql-unwrapper-sqldev/releases">unwrapper</a> and <a href="https://www.oddgen.org/download#installation_from_file">install them from file</a>.</p>



<p>Why download oddgen for SQL Developer? Because the bulk unwrap feature is implemented as oddgen plugin. Unwrapping an editor content works without oddgen, but for&nbsp;bulk unwrap you need <a href="https://www.oddgen.org/">oddgen</a>.</p>



<h2 class="wp-block-heading">2.&nbsp;Setup Test Environment</h2>



<p>If you have a schema in your Oracle database with wrapped code you may&nbsp;skip this step and use this schema for bulk unwrap.</p>



<p>For the test environment, I&#8217;ve used Morten Braten&#8217;s&nbsp;<a href="http://ora-00001.blogspot.de/2015/02/alexandria-plsql-utility-library-moved-to-github.html">Alexandria PL/SQL Utility Library</a>. Clone or download the library from <a href="https://github.com/mortenbra/alexandria-plsql-utils">GitHub</a>. To install the library you need a dedicated user. Create such a user as SYS on your Oracle database instance as follows:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Create User AX for Alexandria Library</span><span role="button" tabindex="0" data-code="CREATE USER ax IDENTIFIED BY ax 
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;

ALTER USER ax QUOTA UNLIMITED ON users;

GRANT connect, resource TO ax;
GRANT execute ON dbms_crypto TO ax;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">CREATE</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">USER</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">ax</span><span style="color: #D4D4D4"> IDENTIFIED </span><span style="color: #569CD6">BY</span><span style="color: #D4D4D4"> ax </span></span>
<span class="line"><span style="color: #569CD6">DEFAULT</span><span style="color: #D4D4D4"> TABLESPACE users</span></span>
<span class="line"><span style="color: #D4D4D4">TEMPORARY TABLESPACE temp;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">ALTER</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">USER</span><span style="color: #D4D4D4"> ax QUOTA </span><span style="color: #569CD6">UNLIMITED</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">ON</span><span style="color: #D4D4D4"> users;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">GRANT</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">connect</span><span style="color: #D4D4D4">, </span><span style="color: #569CD6">resource</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">TO</span><span style="color: #D4D4D4"> ax;</span></span>
<span class="line"><span style="color: #569CD6">GRANT</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">execute</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">ON</span><span style="color: #D4D4D4"> dbms_crypto </span><span style="color: #569CD6">TO</span><span style="color: #D4D4D4"> ax;</span></span></code></pre></div>



<p>Then run the install.sql script in the setup directory of the Alexandria PL/SQL Utility Library as user AX.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Install Alexandria PL/SQL Utility Library in Schema AX</span><span role="button" tabindex="0" data-code="@install.sql" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">@install.</span><span style="color: #569CD6">sql</span></span></code></pre></div>



<p>Wrap the PL/SQL code except package and type specifications in schema AX by running the script <a href="https://gist.github.com/PhilippSalvisberg/0e3b79e93f38af2fa530d4035e4d27ce#file-wrap_schema-sql">wrap_schema.sql</a>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:16;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Wrap PL/SQL Code</span><span role="button" tabindex="0" data-code="SET SERVEROUTPUT ON
DECLARE
   PROCEDURE wrap_and_install(in_code IN CLOB) IS
      co_chunksize INTEGER := 8196;
      l_array      dbms_sql.varchar2a;
      l_lb         INTEGER := 1;
      l_ub         INTEGER;
      l_cursor     PLS_INTEGER;
   BEGIN
      l_ub := ceil(sys.dbms_lob.getlength(in_code) / co_chunksize);
      &lt;&lt;clob_chunks&gt;&gt;
      FOR i IN l_lb .. l_ub
      LOOP
         l_array(i) := sys.dbms_lob.substr(lob_loc =&gt; in_code,
                                           offset  =&gt; (i - 1) * co_chunksize + 1,
                                           amount  =&gt; co_chunksize);
      END LOOP clob_chunks;
      l_cursor := sys.dbms_sql.open_cursor;
      sys.dbms_sql.parse(c             =&gt; l_cursor,
                         STATEMENT     =&gt; l_array,
                         lb            =&gt; l_lb,
                         ub            =&gt; l_ub,
                         lfflg         =&gt; FALSE,
                         language_flag =&gt; sys.dbms_sql.native);
      sys.dbms_ddl.create_wrapped(ddl =&gt; l_array, lb =&gt; l_lb, ub =&gt; l_ub);
      sys.dbms_sql.close_cursor(l_cursor);
   END wrap_and_install;
BEGIN
   &lt;&lt;unwrapped_sources&gt;&gt;
   FOR l_rec IN (SELECT TYPE AS original_type,
                        CASE TYPE
                           WHEN 'PACKAGE' THEN
                            'PACKAGE_SPEC'
                           WHEN 'PACKAGE BODY' THEN
                            'PACKAGE_BODY'
                           WHEN 'TYPE' THEN
                            'TYPE_SPEC'
                           WHEN 'TYPE BODY' THEN
                            'TYPE_BODY'
                           ELSE
                            TYPE
                        END AS object_type,
                        NAME AS object_name
                   FROM user_source
                  WHERE TYPE IN ('FUNCTION',
                                 'PROCEDURE',
                                 -- 'PACKAGE',
                                 'PACKAGE BODY',
                                 -- 'TYPE',
                                 'TYPE BODY',
                                 'LIBRARY')
                        AND line = 1
                        AND lower(text) NOT LIKE '% wrapped%'
                  ORDER BY type, name)
   LOOP
      &lt;&lt;try_to_wrap&gt;&gt;
      DECLARE
         l_ddl  CLOB;
         l_code CLOB;
      BEGIN
         l_ddl := sys.dbms_metadata.get_ddl(object_type =&gt; l_rec.object_type,
                                            NAME        =&gt; l_rec.object_name,
                                            SCHEMA      =&gt; USER);
         -- wrap with EDITIONABLE clause fails on 12.1.0.2.0 with: 
         --    ORA-24230: input to DBMS_DDL.WRAP is not a legal PL/SQL unit
         l_code := REPLACE(l_ddl, 'CREATE OR REPLACE EDITIONABLE ', 'CREATE OR REPLACE ');
         -- wrapping within database supported through DBMS_DDL since 10gR1
         wrap_and_install(in_code =&gt; l_code);
         sys.dbms_output.put_line(l_rec.original_type || ' ' || l_rec.object_name ||
                                  ' wrapped.');
      EXCEPTION
         WHEN OTHERS THEN
            sys.dbms_output.put_line(l_rec.original_type || ' ' || l_rec.object_name ||
                                     ' not wrapped because of ' || SQLERRM);
      END try_to_wrap;
   END LOOP unwrapped_sources;
END;
/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">SET</span><span style="color: #D4D4D4"> SERVEROUTPUT </span><span style="color: #569CD6">ON</span></span>
<span class="line"><span style="color: #569CD6">DECLARE</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">PROCEDURE</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">wrap_and_install</span><span style="color: #D4D4D4">(in_code </span><span style="color: #569CD6">IN</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">CLOB</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">IS</span></span>
<span class="line"><span style="color: #D4D4D4">      co_chunksize </span><span style="color: #569CD6">INTEGER</span><span style="color: #D4D4D4"> := </span><span style="color: #B5CEA8">8196</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">l_array</span><span style="color: #D4D4D4">      </span><span style="color: #DCDCAA">dbms_sql.</span><span style="color: #4EC9B0">varchar2a</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">l_lb</span><span style="color: #D4D4D4">         </span><span style="color: #569CD6">INTEGER</span><span style="color: #D4D4D4"> := </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">l_ub</span><span style="color: #D4D4D4">         </span><span style="color: #569CD6">INTEGER</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">l_cursor</span><span style="color: #D4D4D4">     </span><span style="color: #569CD6">PLS_INTEGER</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">BEGIN</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">l_ub</span><span style="color: #D4D4D4"> := </span><span style="color: #DCDCAA">ceil</span><span style="color: #D4D4D4">(sys.</span><span style="color: #DCDCAA">dbms_lob.</span><span style="color: #4EC9B0">getlength</span><span style="color: #D4D4D4">(in_code) / co_chunksize);</span></span>
<span class="line"><span style="color: #D4D4D4">      &lt;&lt;clob_chunks&gt;&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #C586C0">FOR</span><span style="color: #D4D4D4"> i </span><span style="color: #569CD6">IN</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">l_lb</span><span style="color: #D4D4D4"> .. </span><span style="color: #9CDCFE">l_ub</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #C586C0">LOOP</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #9CDCFE">l_array</span><span style="color: #D4D4D4">(i) := sys.</span><span style="color: #DCDCAA">dbms_lob.</span><span style="color: #4EC9B0">substr</span><span style="color: #D4D4D4">(lob_loc =&gt; in_code,</span></span>
<span class="line"><span style="color: #D4D4D4">                                           offset  =&gt; (i - </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">) * co_chunksize + </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                                           amount  =&gt; co_chunksize);</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #C586C0">END LOOP</span><span style="color: #D4D4D4"> clob_chunks;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">l_cursor</span><span style="color: #D4D4D4"> := sys.</span><span style="color: #DCDCAA">dbms_sql.</span><span style="color: #4EC9B0">open_cursor</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_sql.</span><span style="color: #4EC9B0">parse</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">c</span><span style="color: #D4D4D4">             =&gt; </span><span style="color: #9CDCFE">l_cursor</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                         STATEMENT     =&gt; </span><span style="color: #9CDCFE">l_array</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                         lb            =&gt; </span><span style="color: #9CDCFE">l_lb</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                         ub            =&gt; </span><span style="color: #9CDCFE">l_ub</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                         lfflg         =&gt; </span><span style="color: #569CD6">FALSE</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                         language_flag =&gt; sys.</span><span style="color: #DCDCAA">dbms_sql.</span><span style="color: #4EC9B0">native</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_ddl.</span><span style="color: #4EC9B0">create_wrapped</span><span style="color: #D4D4D4">(ddl =&gt; </span><span style="color: #9CDCFE">l_array</span><span style="color: #D4D4D4">, lb =&gt; </span><span style="color: #9CDCFE">l_lb</span><span style="color: #D4D4D4">, ub =&gt; </span><span style="color: #9CDCFE">l_ub</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">      sys.</span><span style="color: #DCDCAA">dbms_sql.</span><span style="color: #4EC9B0">close_cursor</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">l_cursor</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #569CD6">END</span><span style="color: #D4D4D4"> wrap_and_install;</span></span>
<span class="line"><span style="color: #569CD6">BEGIN</span></span>
<span class="line"><span style="color: #D4D4D4">   &lt;&lt;unwrapped_sources&gt;&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #C586C0">FOR</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">l_rec</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">IN</span><span style="color: #D4D4D4"> (</span><span style="color: #569CD6">SELECT</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">TYPE</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">AS</span><span style="color: #D4D4D4"> original_type,</span></span>
<span class="line"><span style="color: #D4D4D4">                        </span><span style="color: #C586C0">CASE</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">TYPE</span></span>
<span class="line"><span style="color: #D4D4D4">                           </span><span style="color: #569CD6">WHEN</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;PACKAGE&#39;</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">THEN</span></span>
<span class="line"><span style="color: #D4D4D4">                            </span><span style="color: #CE9178">&#39;PACKAGE_SPEC&#39;</span></span>
<span class="line"><span style="color: #D4D4D4">                           </span><span style="color: #569CD6">WHEN</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;PACKAGE BODY&#39;</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">THEN</span></span>
<span class="line"><span style="color: #D4D4D4">                            </span><span style="color: #CE9178">&#39;PACKAGE_BODY&#39;</span></span>
<span class="line"><span style="color: #D4D4D4">                           </span><span style="color: #569CD6">WHEN</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;TYPE&#39;</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">THEN</span></span>
<span class="line"><span style="color: #D4D4D4">                            </span><span style="color: #CE9178">&#39;TYPE_SPEC&#39;</span></span>
<span class="line"><span style="color: #D4D4D4">                           </span><span style="color: #569CD6">WHEN</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;TYPE BODY&#39;</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">THEN</span></span>
<span class="line"><span style="color: #D4D4D4">                            </span><span style="color: #CE9178">&#39;TYPE_BODY&#39;</span></span>
<span class="line"><span style="color: #D4D4D4">                           </span><span style="color: #C586C0">ELSE</span></span>
<span class="line"><span style="color: #D4D4D4">                            </span><span style="color: #569CD6">TYPE</span></span>
<span class="line"><span style="color: #D4D4D4">                        </span><span style="color: #569CD6">END</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">AS</span><span style="color: #D4D4D4"> object_type,</span></span>
<span class="line"><span style="color: #D4D4D4">                        </span><span style="color: #569CD6">NAME</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">AS</span><span style="color: #D4D4D4"> object_name</span></span>
<span class="line"><span style="color: #D4D4D4">                   </span><span style="color: #569CD6">FROM</span><span style="color: #D4D4D4"> user_source</span></span>
<span class="line"><span style="color: #D4D4D4">                  </span><span style="color: #569CD6">WHERE</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">TYPE</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">IN</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&#39;FUNCTION&#39;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                                 </span><span style="color: #CE9178">&#39;PROCEDURE&#39;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                                 </span><span style="color: #6A9955">-- &#39;PACKAGE&#39;,</span></span>
<span class="line"><span style="color: #D4D4D4">                                 </span><span style="color: #CE9178">&#39;PACKAGE BODY&#39;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                                 </span><span style="color: #6A9955">-- &#39;TYPE&#39;,</span></span>
<span class="line"><span style="color: #D4D4D4">                                 </span><span style="color: #CE9178">&#39;TYPE BODY&#39;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">                                 </span><span style="color: #CE9178">&#39;LIBRARY&#39;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">                        </span><span style="color: #569CD6">AND</span><span style="color: #D4D4D4"> line = </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #D4D4D4">                        </span><span style="color: #569CD6">AND</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">lower</span><span style="color: #D4D4D4">(text) </span><span style="color: #569CD6">NOT</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">LIKE</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;% wrapped%&#39;</span></span>
<span class="line"><span style="color: #D4D4D4">                  </span><span style="color: #569CD6">ORDER BY</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">type</span><span style="color: #D4D4D4">, </span><span style="color: #569CD6">name</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #C586C0">LOOP</span></span>
<span class="line"><span style="color: #D4D4D4">      &lt;&lt;try_to_wrap&gt;&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">DECLARE</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #9CDCFE">l_ddl</span><span style="color: #D4D4D4">  </span><span style="color: #569CD6">CLOB</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #9CDCFE">l_code</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">CLOB</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">BEGIN</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #9CDCFE">l_ddl</span><span style="color: #D4D4D4"> := sys.</span><span style="color: #DCDCAA">dbms_metadata.</span><span style="color: #4EC9B0">get_ddl</span><span style="color: #D4D4D4">(object_type =&gt; </span><span style="color: #9CDCFE">l_rec</span><span style="color: #D4D4D4">.object_type,</span></span>
<span class="line"><span style="color: #D4D4D4">                                            </span><span style="color: #569CD6">NAME</span><span style="color: #D4D4D4">        =&gt; </span><span style="color: #9CDCFE">l_rec</span><span style="color: #D4D4D4">.object_name,</span></span>
<span class="line"><span style="color: #D4D4D4">                                            SCHEMA      =&gt; </span><span style="color: #DCDCAA">USER</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #6A9955">-- wrap with EDITIONABLE clause fails on 12.1.0.2.0 with: </span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #6A9955">--    ORA-24230: input to DBMS_DDL.WRAP is not a legal PL/SQL unit</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #9CDCFE">l_code</span><span style="color: #D4D4D4"> := </span><span style="color: #DCDCAA">REPLACE</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">l_ddl</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;CREATE OR REPLACE EDITIONABLE &#39;</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;CREATE OR REPLACE &#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #6A9955">-- wrapping within database supported through DBMS_DDL since 10gR1</span></span>
<span class="line"><span style="color: #D4D4D4">         wrap_and_install(in_code =&gt; </span><span style="color: #9CDCFE">l_code</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">         sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put_line</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">l_rec</span><span style="color: #D4D4D4">.original_type || </span><span style="color: #CE9178">&#39; &#39;</span><span style="color: #D4D4D4"> || </span><span style="color: #9CDCFE">l_rec</span><span style="color: #D4D4D4">.object_name ||</span></span>
<span class="line"><span style="color: #D4D4D4">                                  </span><span style="color: #CE9178">&#39; wrapped.&#39;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">EXCEPTION</span></span>
<span class="line"><span style="color: #D4D4D4">         </span><span style="color: #569CD6">WHEN</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">OTHERS</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">THEN</span></span>
<span class="line"><span style="color: #D4D4D4">            sys.</span><span style="color: #DCDCAA">dbms_output.</span><span style="color: #4EC9B0">put_line</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">l_rec</span><span style="color: #D4D4D4">.original_type || </span><span style="color: #CE9178">&#39; &#39;</span><span style="color: #D4D4D4"> || </span><span style="color: #9CDCFE">l_rec</span><span style="color: #D4D4D4">.object_name ||</span></span>
<span class="line"><span style="color: #D4D4D4">                                     </span><span style="color: #CE9178">&#39; not wrapped because of &#39;</span><span style="color: #D4D4D4"> || </span><span style="color: #DCDCAA">SQLERRM</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">END</span><span style="color: #D4D4D4"> try_to_wrap;</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #C586C0">END LOOP</span><span style="color: #D4D4D4"> unwrapped_sources;</span></span>
<span class="line"><span style="color: #569CD6">END</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">/</span></span></code></pre></div>



<h2 class="wp-block-heading">3. Bulk Unwrap</h2>



<p>Start SQL Developer and open a connection as user AX on your database.</p>



<p>If the oddgen window is not visible then select &#8220;Generators&#8221; from the &#8220;View&#8221; menu as shown in the following picture:</p>



<figure class="wp-block-image"><a href="https://www.salvis.com/blog/wp-content/uploads/2016/05/menu_view_generators.png"><img decoding="async" width="252" height="155" src="https://www.salvis.com/blog/wp-content/uploads/2016/05/menu_view_generators.png" alt="menu_view_generators" class="wp-image-7074"/></a></figure>



<p>Afterwards, the Generators window appears in the lower left corner within SQL Developer.</p>



<figure class="wp-block-image"><a href="https://www.salvis.com/blog/wp-content/uploads/2016/06/generators.png"><img decoding="async" width="293" height="132" src="https://www.salvis.com/blog/wp-content/uploads/2016/06/generators.png" alt="generators" class="wp-image-7170"/></a></figure>



<p>Select the open connection in the combo box of the Generator window.&nbsp;Open the &#8220;PL/SQL Unwrapper&#8221; node and the &#8220;Package Bodies&#8221; node to show all wrapped package body names.</p>



<figure class="wp-block-image"><a href="https://www.salvis.com/blog/wp-content/uploads/2016/06/generators2.png"><img loading="lazy" decoding="async" width="294" height="461" src="https://www.salvis.com/blog/wp-content/uploads/2016/06/generators2.png" alt="generators2" class="wp-image-7171" srcset="https://www.salvis.com/blog/wp-content/uploads/2016/06/generators2.png 294w, https://www.salvis.com/blog/wp-content/uploads/2016/06/generators2-191x300.png 191w" sizes="auto, (max-width:767px) 294px, 294px" /></a></figure>



<p>Select some or all package body nodes and press Return to generate the unwrapped code in a new worksheet. Afterwards, you just may execute the generated code. Add &#8220;SET DEFINE OFF&#8221; at the start of the script to ensure&nbsp;unwrapped code containing ampersand (&amp;) characters is processed correctly. Another option is to configure a connection startup script (login.sql) to change the default behaviour.</p>



<p>The following audio-less video shows in just 56 seconds the whole bulk unwrapping process in detail.</p>



<figure class="wp-block-video"><video controls src="https://www.salvis.com/blog/wp-content/uploads/2015/12/Unwrapper.mp4"></video></figure>



<p>I hope you find this new feature useful.</p>
<p>The post <a href="https://www.salvis.com/blog/2016/06/26/plsql-bulk-unwrap/">PL/SQL Bulk Unwrap</a> appeared first on <a href="https://www.salvis.com/blog">Philipp Salvisberg&#039;s Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.salvis.com/blog/2016/06/26/plsql-bulk-unwrap/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		<enclosure url="https://www.salvis.com/blog/wp-content/uploads/2015/12/Unwrapper.mp4" length="11673419" type="video/mp4" />

			</item>
	</channel>
</rss>
