{"id":7852,"date":"2017-10-14T17:23:42","date_gmt":"2017-10-14T15:23:42","guid":{"rendered":"https:\/\/www.salvis.com\/blog\/?p=7852"},"modified":"2023-11-07T23:58:04","modified_gmt":"2023-11-07T22:58:04","slug":"limitations-of-plscope-and-how-to-deal-with-them","status":"publish","type":"post","link":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/","title":{"rendered":"Limitations of PL\/Scope and How to Deal with Them"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">My first car was a Renault R5 TX. The motor cooling of this car was really bad. On a hot summer day, it was simply not possible to drive slowly in high traffic without overheating the engine. To cool the engine you could either stop the car, open the front lid and hope for the best or turn on the heating. I decided on the latter. It was impressive how well the heating system worked on hot days. Not very pleasant\u00a0to drive uphill behind a slow Dutch caravan in the Alps, but a funny experience in retrospect. My R5 was a reliable companion for years and I loved it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you are aware of the limitations of PL\/Scope and know how to deal with them, you will find PL\/Scope a very useful tool. This post is supposed to enable you to use PL\/Scope more effectively. I&#8217;m fond of PL\/Scope, because it may provide very reliable insights of your static PL\/SQL code. I hope you are going to use PL\/Scope, even if it is required sometimes &#8220;to turn on the heating&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PL\/Scope gathers at compile-time metadata about your PL\/SQL code and stores it in dedicated tables. These metadata are accessible for analysis via the views dba\/all\/user_identfiers (since 11.1) and in dba\/all\/user_statements (since 12.2). If you are not familiar with PL\/Scope I recommend reading Steven Feuerstein&#8217;s article\u00a0Powerful Impact Analysis\u00a0or having a look a the introduction chapters of the <a href=\"https:\/\/docs.oracle.com\/database\/122\/ADFNS\/plscope.htm#ADFNS022\">documentation<\/a>. If you are fluent in German, I can recommend also Sabine Heimsath&#8217;s article\u00a0<a href=\"https:\/\/databine.databee.org\/download\/sabine-heimsath-schoener-coden-plsql-analysieren-mit-plscope_2.pdf\">Sch\u00f6ner Coden \u2013 PL\/SQL analysieren mit PL\/Scope<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The limitations covered in this post are based on Oracle Database version 12.2.0.1.170814. Most of the limitations are bugs. You may track the progress on MOS with the provided bug numbers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Missing Results After NULL Statement<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the following example, we analyse the procedure <code>p2<\/code>. Look at the result of the <code>user_identifiers<\/code> query on lines 27-29. All three calls of the procedure <code>p1<\/code> have been detected. That&#8217;s good and correct.<\/p>\n\n\n\n<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\">Example 1a &#8211; Complete Result<\/span><span role=\"button\" tabindex=\"0\" data-code=\"ALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nCREATE OR REPLACE PROCEDURE p1 (in_p IN INTEGER) IS\nBEGIN\n   sys.dbms_output.put_line(sqrt(in_p));\nEND;\n\/\n\nCREATE OR REPLACE PROCEDURE p2 IS\nBEGIN\n   p1(4);\n   p1(9);\n   p1(16);\nEND;\n\/\n\nSELECT usage, type, name, line, col \n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P2'\n ORDER BY line, col;\n\nUSAGE       TYPE               NAME             LINE        COL\n----------- ------------------ ---------- ---------- ----------\nDEFINITION  PROCEDURE          P2                  1         11\nDECLARATION PROCEDURE          P2                  1         11\nCALL        PROCEDURE          P1                  3          4\nCALL        PROCEDURE          P1                  4          4\nCALL        PROCEDURE          P1                  5          4  \" 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: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p1 (in_p <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INTEGER<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<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\">sqrt<\/span><span style=\"color: #D4D4D4\">(in_p));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p2 <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(<\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(<\/span><span style=\"color: #B5CEA8\">9<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(<\/span><span style=\"color: #B5CEA8\">16<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P2&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE       <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">             LINE        COL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------- ------------------ ---------- ---------- ----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION  PROCEDURE          P2                  <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #B5CEA8\">11<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          P2                  <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #B5CEA8\">11<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">CALL        PROCEDURE          P1                  <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #B5CEA8\">4<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">CALL        PROCEDURE          P1                  <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #B5CEA8\">4<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">CALL        PROCEDURE          P1                  <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">  <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">But when we add a <code>NULL<\/code> statement before the first call of <code>p1<\/code>, the calls after the <code>NULL<\/code> the statement are not reported anymore.<\/p>\n\n\n\n<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\">Example 1b &#8211; Missing Calls in Result<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE OR REPLACE PROCEDURE p2 IS\nBEGIN\n   NULL;\n   p1(4);\n   p1(9);\n   p1(16);\nEND;\n\/\n\nSELECT usage, type, name, line, col \n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P2'\n ORDER BY line, col;\n\nUSAGE       TYPE               NAME             LINE        COL\n----------- ------------------ ---------- ---------- ----------\nDECLARATION PROCEDURE          P2                  1         11\nDEFINITION  PROCEDURE          P2                  1         11\" 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 p2 <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">NULL<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(<\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(<\/span><span style=\"color: #B5CEA8\">9<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(<\/span><span style=\"color: #B5CEA8\">16<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P2&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE       <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">             LINE        COL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------- ------------------ ---------- ---------- ----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          P2                  <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #B5CEA8\">11<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION  PROCEDURE          P2                  <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #B5CEA8\">11<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">This is a bug. See bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=24916492\">24916492<\/a>&nbsp;on MOS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I am not aware of a simple workaround. This means you have to change the code. In this case, it is easy, just remove the <code>NULL<\/code> statement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The good news is, that it affects just the basic block of the <code>NULL<\/code> statement. Other basic blocks are not affected. Here&#8217;s an example of a complete result, even if a <code>NULL<\/code> statement is used. The term &#8220;basic block&#8221; has been introduced with <a href=\"http:\/\/docs.oracle.com\/database\/122\/ADFNS\/basic-block-coverage.htm#ADFNS-GUID-35842E6A-630A-418F-8314-6A30F1FBDF83\">PL\/SQL Basic Block Coverage<\/a> in version 12.2. However, the definition is valid for all versions of PL\/SQL. I like Chris Saxon&#8217;s definition: &#8220;It&#8217;s a piece of code that either runs completely or not at all&#8221;.<\/p>\n\n\n\n<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\">Example 1c &#8211; Complete Result With NULL Statement<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE OR REPLACE PROCEDURE p2 IS\nBEGIN\n   IF FALSE THEN\n      NULL;\n   END IF;\n   p1(4);\n   p1(9);\n   p1(16);\nEND;\n\/\n\nSELECT usage, type, name, line, col \n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P2'\n ORDER BY line, col, usage_id;\n\nUSAGE       TYPE               NAME             LINE        COL\n----------- ------------------ ---------- ---------- ----------\nDEFINITION  PROCEDURE          P2                  1         11\nDECLARATION PROCEDURE          P2                  1         11\nCALL        PROCEDURE          P1                  6          4\nCALL        PROCEDURE          P1                  7          4\nCALL        PROCEDURE          P1                  8          4\" 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 p2 <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #C586C0\">IF<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">FALSE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">THEN<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">NULL<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #C586C0\">END IF<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(<\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(<\/span><span style=\"color: #B5CEA8\">9<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(<\/span><span style=\"color: #B5CEA8\">16<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P2&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE       <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">             LINE        COL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------- ------------------ ---------- ---------- ----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION  PROCEDURE          P2                  <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #B5CEA8\">11<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          P2                  <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #B5CEA8\">11<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">CALL        PROCEDURE          P1                  <\/span><span style=\"color: #B5CEA8\">6<\/span><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #B5CEA8\">4<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">CALL        PROCEDURE          P1                  <\/span><span style=\"color: #B5CEA8\">7<\/span><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #B5CEA8\">4<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">CALL        PROCEDURE          P1                  <\/span><span style=\"color: #B5CEA8\">8<\/span><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #B5CEA8\">4<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">In&nbsp;cases where PL\/SQL requires at least one statement and the <code>NULL<\/code>&nbsp;statement is the only one, you should not have a problem. Just unnecessary usages of&nbsp; <code>NULL<\/code> statements might cause problems. So, make sure that you do not use unnecessary <code>NULL<\/code>&nbsp;statements. They are noise and may lead to incomplete code analysis results.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Broken Usage Hierarchy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s look at the usage hierarchy of the procedure <code>p2<\/code>&nbsp;in example 1c. The hierarchy level is represented in the result column <code>usage<\/code>. Three leading spaces for each sub-level. The <code>usage_id<\/code>&nbsp;identifies a row for an object, <code>p2<\/code> in this case. The <code>usage_id<\/code>&nbsp;starts with 1 and ends with 5. There are no gaps. The column usage_context_id is part of the foreign key to the parent <code>usage_id<\/code>.&nbsp;Oracle decided to start the hierarchy with the non-existing <code>usage_id<\/code>&nbsp;<code>0<\/code> (zero). That&#8217;s what we use in the start_with clause. The recursive query produces the same number of result rows as the non-recursive query in example 1c. That&#8217;s important, and that&#8217;s how it should be. Always.<\/p>\n\n\n\n<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);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\">Example 2a &#8211; Intact Usage Hiearchy<\/span><span role=\"button\" tabindex=\"0\" data-code=\"WITH ids AS (\n   SELECT usage, type, name, line, col, usage_id, usage_context_id\n     FROM user_identifiers ids\n    WHERE object_type = 'PROCEDURE' \n      AND object_name = 'P2'\n)\n SELECT lpad(' ', 3 * (level - 1)) || ids.usage AS usage,\n        ids.type,\n        ids.name,\n        ids.line,\n        ids.col,\n        ids.usage_id,\n        ids.usage_context_id\n   FROM ids\n  START WITH ids.usage_context_id = 0\nCONNECT BY PRIOR ids.usage_id = ids.usage_context_id\n  ORDER BY ids.line, ids.col, usage_id;\n\nUSAGE          TYPE       NAME  LINE  COL USAGE_ID USAGE_CONTEXT_ID\n-------------- ---------- ----- ---- ---- -------- ----------------\nDECLARATION    PROCEDURE  P2       1   11        1                0\n   DEFINITION  PROCEDURE  P2       1   11        2                1\n      CALL     PROCEDURE  P1       6    4        3                2\n      CALL     PROCEDURE  P1       7    4        4                2\n      CALL     PROCEDURE  P1       8    4        5                2\" 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\">WITH<\/span><span style=\"color: #D4D4D4\"> ids <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">     <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers ids<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P2&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">lpad<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39; &#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\"> * (<\/span><span style=\"color: #569CD6\">level<\/span><span style=\"color: #D4D4D4\"> - <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">)) || ids.usage <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> usage,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ids.<\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ids.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ids.line,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ids.col,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ids.usage_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ids.usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> ids<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">START WITH<\/span><span style=\"color: #D4D4D4\"> ids.usage_context_id = <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CONNECT BY PRIOR<\/span><span style=\"color: #D4D4D4\"> ids.usage_id = ids.usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> ids.line, ids.col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE          <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">  LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">-------------- ---------- ----- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION    PROCEDURE  P2       <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   DEFINITION  PROCEDURE  P2       <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      CALL     PROCEDURE  P1       <\/span><span style=\"color: #B5CEA8\">6<\/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\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      CALL     PROCEDURE  P1       <\/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\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      CALL     PROCEDURE  P1       <\/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\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">There are two reasons for broken usage hierarchies.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"#static_sql_statements\">Static SQL statements (expected behaviour)<\/a><\/li>\n\n\n\n<li><a href=\"#references_to_uncompiled_synonyms\">References to uncompiled synonyms (bug)<\/a><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><a name=\"static_sql_statements\"><\/a>2.1. Static SQL Statements<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Since version 12.2 PL\/Scope covers static SQL statements in the <code>user_statements<\/code>&nbsp;view.&nbsp;Static SQL statements are missing in the <code>user_identifiers<\/code>&nbsp;view, probably for compatibility reasons. To get the full usage hierarchy you have to combine the views using <code>UNION ALL<\/code> like in line 49 of the next example 2.1a. Please note that the usages on line 25-29 are referring to the parent on line 41. A recursive query on <code>user_identifiers<\/code>&nbsp;only, would return just the lines 69-70 &#8211; a quite incomplete result set.&nbsp;Therefore you should think twice before applying your &#8220;old&#8221; PL\/Scope version 11.1 scripts against an Oracle 12.2 database.<\/p>\n\n\n\n<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\">Example 2.1a &#8211; Combine Identifiers and Statements<\/span><span role=\"button\" tabindex=\"0\" data-code=\"ALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nCREATE OR REPLACE FUNCTION f1 (in_val NUMBER) RETURN NUMBER IS\nBEGIN\n   RETURN SQRT(in_val);\nEND;\n\/\n\nCREATE OR REPLACE PROCEDURE p3 IS\nBEGIN\n   UPDATE emp SET sal = sal + f1(comm);\nEND;\n\/\n\nSELECT usage, type, name, line, col, usage_id, usage_context_id \n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P3'\n ORDER BY line, col, usage_id;\n\nUSAGE          TYPE       NAME  LINE  COL USAGE_ID USAGE_CONTEXT_ID\n-------------- ---------- ----- ---- ---- -------- ----------------\nDECLARATION    PROCEDURE  P3       1   11        1                0\nDEFINITION     PROCEDURE  P3       1   11        2                1\nREFERENCE      TABLE      EMP      3   11        4                3\nREFERENCE      COLUMN     SAL      3   19        6                3\nREFERENCE      COLUMN     SAL      3   25        5                3\nCALL           FUNCTION   F1       3   31        7                3\nREFERENCE      COLUMN     COMM     3   34        8                7\n\n7 rows selected. \n \nSELECT text, type, sql_id, line, col, usage_id, usage_context_id \n  FROM user_statements\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P3'\n ORDER BY line, col;\n\nTEXT                                TYPE   SQL_ID        LINE  COL USAGE_ID USAGE_CONTEXT_ID\n----------------------------------- ------ ------------- ---- ---- -------- ----------------\nUPDATE EMP SET SAL = SAL + F1(COMM) UPDATE 8kyysdc8m75ag    3    4        3                2\n \nWITH \n   ids AS (\n      SELECT usage, type, name, line, col, usage_id, usage_context_id \n        FROM user_identifiers\n       WHERE object_type = 'PROCEDURE' \n         AND object_name = 'P3'\n    UNION ALL\n      SELECT 'EXECUTE' AS usage, type, sql_id AS name, line, col, usage_id, usage_context_id \n       FROM user_statements\n       WHERE object_type = 'PROCEDURE' \n         AND object_name = 'P3'\n   )\n SELECT lpad(' ', 3 * (level - 1)) || usage AS usage,\n        type,\n        name,\n        line,\n        col,\n        usage_id,\n        usage_context_id\n   FROM ids\n  START WITH usage_context_id = 0\nCONNECT BY PRIOR usage_id = usage_context_id\n  ORDER BY line, col, usage_id; \n\nUSAGE                 TYPE       NAME           LINE  COL USAGE_ID USAGE_CONTEXT_ID\n--------------------- ---------- -------------- ---- ---- -------- ----------------\nDECLARATION           PROCEDURE  P3                1   11        1                0\n   DEFINITION         PROCEDURE  P3                1   11        2                1\n      EXECUTE         UPDATE     8kyysdc8m75ag     3    4        3                2\n         REFERENCE    TABLE      EMP               3   11        4                3\n         REFERENCE    COLUMN     SAL               3   19        6                3\n         REFERENCE    COLUMN     SAL               3   25        5                3\n         CALL         FUNCTION   F1                3   31        7                3\n            REFERENCE COLUMN     COMM              3   34        8                7\" 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: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> FUNCTION f1 (in_val <\/span><span style=\"color: #569CD6\">NUMBER<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #C586C0\">RETURN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">NUMBER<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #C586C0\">RETURN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">SQRT<\/span><span style=\"color: #D4D4D4\">(in_val);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p3 <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">UPDATE<\/span><span style=\"color: #D4D4D4\"> emp <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> sal = sal + f1(comm);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P3&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE          <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">  LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">-------------- ---------- ----- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION    PROCEDURE  P3       <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION     PROCEDURE  P3       <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">REFERENCE      <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">      EMP      <\/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\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">REFERENCE      <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">     SAL      <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">19<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">6<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">REFERENCE      <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">     SAL      <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">25<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">CALL           FUNCTION   F1       <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">31<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">7<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">REFERENCE      <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">     COMM     <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">34<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">8<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">7<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B5CEA8\">7<\/span><span style=\"color: #D4D4D4\"> rows selected. <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> text, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, sql_id, line, col, usage_id, usage_context_id <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_statements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P3&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">TEXT                                <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">   SQL_ID        LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------------------------------- ------ ------------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">UPDATE<\/span><span style=\"color: #D4D4D4\"> EMP <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> SAL = SAL + F1(COMM) <\/span><span style=\"color: #569CD6\">UPDATE<\/span><span style=\"color: #D4D4D4\"> 8kyysdc8m75ag    <\/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\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">WITH<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   ids <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P3&#39;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">UNION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ALL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;EXECUTE&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, sql_id <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_statements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P3&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">lpad<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39; &#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\"> * (<\/span><span style=\"color: #569CD6\">level<\/span><span style=\"color: #D4D4D4\"> - <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">)) || usage <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> usage,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        line,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        col,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        usage_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> ids<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">START WITH<\/span><span style=\"color: #D4D4D4\"> usage_context_id = <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CONNECT BY PRIOR<\/span><span style=\"color: #D4D4D4\"> usage_id = usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE                 <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">           LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">--------------------- ---------- -------------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">DECLARATION           PROCEDURE  P3                <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   DEFINITION         PROCEDURE  P3                <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      EXECUTE         <\/span><span style=\"color: #569CD6\">UPDATE<\/span><span style=\"color: #D4D4D4\">     8kyysdc8m75ag     <\/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\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">      EMP               <\/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\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">     SAL               <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">19<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">6<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">     SAL               <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">25<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         CALL         FUNCTION   F1                <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">31<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">7<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            REFERENCE <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">     COMM              <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">34<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">8<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">7<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><a name=\"references_to_uncompiled_synonyms\"><\/a>2.2&nbsp;References to Uncompiled Synonyms<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In example 2.2a the procedure <code>p4<\/code> calls procedure <code>p1<\/code>, but <code>p1<\/code> is not compiled with PL\/Scope. The usage hierarchy is intact. Please note that the result set contains also all usages of the parameter <code>in_p<\/code>.<\/p>\n\n\n\n<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\">Example 2.2a &#8211; Intact Usage Hierarchy<\/span><span role=\"button\" tabindex=\"0\" data-code=\"ALTER SESSION SET plscope_settings='identifiers:none, statements:none';\n\nCREATE OR REPLACE PROCEDURE p1 (in_p IN INTEGER) IS\nBEGIN\n   sys.dbms_output.put_line(sqrt(in_p));\nEND;\n\/\n\nALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nCREATE OR REPLACE PROCEDURE p4 (in_p IN INTEGER) IS\nBEGIN\n   p1(in_p =&gt; in_p);\nEND;\n\/\n\nSELECT usage, type, name, line, col, usage_id, usage_context_id \n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P4'\n ORDER BY line, col, usage_id;\n\nUSAGE                 TYPE       NAME           LINE  COL USAGE_ID USAGE_CONTEXT_ID\n--------------------- ---------- -------------- ---- ---- -------- ----------------\nDECLARATION           PROCEDURE  P4                1   11        1                0\nDEFINITION            PROCEDURE  P4                1   11        2                1\nDECLARATION           FORMAL IN  IN_P              1   15        3                2\nREFERENCE             SUBTYPE    INTEGER           1   23        4                3\nREFERENCE             FORMAL IN  IN_P              3   15        5                2\" 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: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:none, statements:none&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p1 (in_p <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INTEGER<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<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\">sqrt<\/span><span style=\"color: #D4D4D4\">(in_p));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p4 (in_p <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INTEGER<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   p1(in_p =&gt; in_p);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P4&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE                 <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">           LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">--------------------- ---------- -------------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION           PROCEDURE  P4                <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION            PROCEDURE  P4                <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION           FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">  IN_P              <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">REFERENCE             <\/span><span style=\"color: #569CD6\">SUBTYPE<\/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 style=\"color: #B5CEA8\">23<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">REFERENCE             FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">  IN_P              <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">But the usage hierarchy becomes broken when we call procedure <code>p1<\/code>via an uncompiled synonym as in example 2.2b. The highlighted result row references a non-existing usage_id. In a recursive query, this result row will get lost.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is a bug. See bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=26363026\">26363026<\/a>&nbsp;on MOS.<\/p>\n\n\n\n<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\">Example 2.2b &#8211; Broken Usage Hierarchy by Uncompiled Synonym<\/span><span role=\"button\" tabindex=\"0\" data-code=\"ALTER SESSION SET plscope_settings='identifiers:none, statements:none';\n\nCREATE OR REPLACE SYNONYM s1 FOR p1;\n\nALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nCREATE OR REPLACE PROCEDURE p4 (in_p IN INTEGER) IS\nBEGIN\n   s1(in_p =&gt; in_p);\nEND;\n\/\n\nSELECT usage, type, name, line, col, usage_id, usage_context_id \n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P4'\n ORDER BY line, col, usage_id;\n\nUSAGE                 TYPE       NAME           LINE  COL USAGE_ID USAGE_CONTEXT_ID\n--------------------- ---------- -------------- ---- ---- -------- ----------------\nDECLARATION           PROCEDURE  P4                1   11        1                0\nDEFINITION            PROCEDURE  P4                1   11        2                1\nDECLARATION           FORMAL IN  IN_P              1   15        3                2\nREFERENCE             SUBTYPE    INTEGER           1   23        4                3\nREFERENCE             FORMAL IN  IN_P              3   15        6                5\" 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: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:none, statements:none&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> SYNONYM s1 <\/span><span style=\"color: #C586C0\">FOR<\/span><span style=\"color: #D4D4D4\"> p1;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p4 (in_p <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INTEGER<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   s1(in_p =&gt; in_p);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P4&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE                 <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">           LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">--------------------- ---------- -------------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION           PROCEDURE  P4                <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION            PROCEDURE  P4                <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION           FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">  IN_P              <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">REFERENCE             <\/span><span style=\"color: #569CD6\">SUBTYPE<\/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 style=\"color: #B5CEA8\">23<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">REFERENCE             FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">  IN_P              <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">6<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">5<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">You can fix such a broken usage hierarchy on the fly. Here&#8217;s simplified version of&nbsp; the query based on the <a href=\"https:\/\/github.com\/PhilippSalvisberg\/plscope-utils\/blob\/main\/database\/utils\/view\/plscope_identifiers.sql\">plscope_identifiers<\/a>&nbsp;view of the plscope-utils project. The analytic function in line 27-31 fixes invalid foreign keys. The highest preceding <code>usage_id<\/code> might not always be the best choice, but it is usually not that bad either. In this case the non-existing &#8216;5&#8217; was replaced with a &#8216;4&#8217; as you can see on line 53.<\/p>\n\n\n\n<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\">Example 2.2c &#8211; Fix Broken Usage Hierarchies<\/span><span role=\"button\" tabindex=\"0\" data-code=\"WITH \n   filtered_ids AS (\n      SELECT usage, type, name, line, col, usage_id, usage_context_id\n        FROM user_identifiers ids\n       WHERE object_type = 'PROCEDURE' \n         AND object_name = 'P4'\n   ),\n   sanitized_ids AS (\n      SELECT fids.usage, fids.type, fids.name, fids.line, fids.col, \n             fids.usage_id, fids.usage_context_id,\n             CASE\n                WHEN fk.usage_id IS NOT NULL OR fids.usage_context_id = 0 THEN\n                   'YES'\n                ELSE\n                   'NO'\n             END AS sane_fk\n        FROM filtered_ids fids\n        LEFT JOIN filtered_ids fk\n          ON fk.usage_id = fids.usage_context_id\n   ),\n   ids AS (\n      SELECT usage, type, name, line, col, usage_id,\n             CASE\n                WHEN sane_fk = 'YES' THEN\n                   usage_context_id\n                ELSE\n                   last_value(CASE WHEN sane_fk = 'YES' THEN usage_id END) \n                      IGNORE NULLS OVER (\n                         ORDER BY line, col\n                         ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING\n                      )\n             END AS usage_context_id -- fix broken hierarchies\n        FROM sanitized_ids\n   )\n SELECT lpad(' ', 3 * (level - 1)) || usage AS usage,\n        type,\n        name,\n        line,\n        col,\n        usage_id,\n        usage_context_id\n   FROM ids\n  START WITH usage_context_id = 0\nCONNECT BY PRIOR usage_id = usage_context_id\n  ORDER BY line, col, usage_id;\n\nUSAGE                 TYPE       NAME           LINE  COL USAGE_ID USAGE_CONTEXT_ID\n--------------------- ---------- -------------- ---- ---- -------- ----------------\nDECLARATION           PROCEDURE  P4                1   11        1                0\n   DEFINITION         PROCEDURE  P4                1   11        2                1\n      DECLARATION     FORMAL IN  IN_P              1   15        3                2\n         REFERENCE    SUBTYPE    INTEGER           1   23        4                3\n            REFERENCE FORMAL IN  IN_P              3   15        6                4\" 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\">WITH<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   filtered_ids <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers ids<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P4&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   sanitized_ids <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> fids.usage, fids.<\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, fids.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, fids.line, fids.col, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             fids.usage_id, fids.usage_context_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #C586C0\">CASE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #569CD6\">WHEN<\/span><span style=\"color: #D4D4D4\"> fk.usage_id <\/span><span style=\"color: #569CD6\">IS NOT NULL<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">OR<\/span><span style=\"color: #D4D4D4\"> fids.usage_context_id = <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #CE9178\">&#39;YES&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #C586C0\">ELSE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #CE9178\">&#39;NO&#39;<\/span><\/span>\n<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\"> sane_fk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> filtered_ids fids<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">LEFT JOIN<\/span><span style=\"color: #D4D4D4\"> filtered_ids fk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">ON<\/span><span style=\"color: #D4D4D4\"> fk.usage_id = fids.usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   ids <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #C586C0\">CASE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #569CD6\">WHEN<\/span><span style=\"color: #D4D4D4\"> sane_fk = <\/span><span style=\"color: #CE9178\">&#39;YES&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #C586C0\">ELSE<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                   last_value(<\/span><span style=\"color: #C586C0\">CASE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHEN<\/span><span style=\"color: #D4D4D4\"> sane_fk = <\/span><span style=\"color: #CE9178\">&#39;YES&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">THEN<\/span><span style=\"color: #D4D4D4\"> usage_id <\/span><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">) <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                      IGNORE NULLS <\/span><span style=\"color: #569CD6\">OVER<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                         <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                         <\/span><span style=\"color: #569CD6\">ROWS BETWEEN<\/span><span style=\"color: #D4D4D4\"> UNBOUNDED PRECEDING <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> PRECEDING<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                      )<\/span><\/span>\n<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\"> usage_context_id <\/span><span style=\"color: #6A9955\">-- fix broken hierarchies<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> sanitized_ids<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">lpad<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39; &#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\"> * (<\/span><span style=\"color: #569CD6\">level<\/span><span style=\"color: #D4D4D4\"> - <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">)) || usage <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> usage,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        line,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        col,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        usage_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> ids<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">START WITH<\/span><span style=\"color: #D4D4D4\"> usage_context_id = <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CONNECT BY PRIOR<\/span><span style=\"color: #D4D4D4\"> usage_id = usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE                 <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">           LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">--------------------- ---------- -------------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION           PROCEDURE  P4                <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   DEFINITION         PROCEDURE  P4                <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      DECLARATION     FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">  IN_P              <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">SUBTYPE<\/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 style=\"color: #B5CEA8\">23<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">            REFERENCE FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">  IN_P              <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">6<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">4<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3 Missing Usages of Objects in CDB$ROOT<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">PL\/Scope stores by default the metadata for the following <code>SYS<\/code>&nbsp;packages:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DBMS_STANDARD<\/li>\n\n\n\n<li>STANDARD<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to analyse the usage of other supplied PL\/SQL packages, you need to compile these package with PL\/Scope settings first. The next example shows how to do that. On line 29 and 30 the reference to the package <code>dbms_output<\/code>&nbsp;and its procedure <code>put_line<\/code> are properly reported. So far so good.<\/p>\n\n\n\n<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\">Example 3a &#8211; Non-CDB Architecture &#8211; Complete Result<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CONNECT sys\/oracle@odb AS SYSDBA\n\nALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nALTER PACKAGE dbms_output COMPILE;\n\nCONNECT scott\/tiger@odb\n\nALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nCREATE OR REPLACE PROCEDURE p5 (in_p IN VARCHAR2) IS\nBEGIN\n   sys.dbms_output.put_line(in_p);\nEND;\n\/\n\nSELECT usage, type, name, line, col, usage_id, usage_context_id\n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P5'\n ORDER BY line, col, usage_id;\n\nUSAGE       TYPE               NAME        LINE  COL USAGE_ID USAGE_CONTEXT_ID\n----------- ------------------ ----------- ---- ---- -------- ----------------\nDECLARATION PROCEDURE          P5             1   11        1                0\nDEFINITION  PROCEDURE          P5             1   11        2                1\nDECLARATION FORMAL IN          IN_P           1   15        3                2\nREFERENCE   CHARACTER DATATYPE VARCHAR2       1   23        4                3\nREFERENCE   PACKAGE            DBMS_OUTPUT    3    8        5                2\nCALL        PROCEDURE          PUT_LINE       3   20        6                5\nREFERENCE   FORMAL IN          IN_P           3   29        7                6\" 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\">CONNECT sys\/oracle@odb <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> SYSDBA<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">ALTER<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">PACKAGE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">dbms_output<\/span><span style=\"color: #D4D4D4\"> COMPILE;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">CONNECT scott\/tiger@odb<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p5 (in_p <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<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\">(in_p);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P5&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE       <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">        LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------- ------------------ ----------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          P5             <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION  PROCEDURE          P5             <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">          IN_P           <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">REFERENCE   CHARACTER DATATYPE <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">23<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">REFERENCE   <\/span><span style=\"color: #569CD6\">PACKAGE<\/span><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #4EC9B0\">DBMS_OUTPUT<\/span><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #B5CEA8\">8<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">CALL        PROCEDURE          PUT_LINE       <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">20<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">6<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">REFERENCE   FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">          IN_P           <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">29<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">7<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">6<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">We know that the non-CDB architecture has been <a href=\"http:\/\/docs.oracle.com\/database\/122\/UPGRD\/deprecated-features-oracle-database-12c-r2.htm#UPGRD-GUID-5D181F03-F74D-4888-B7B2-7176CF6FA8F8\">deprecated<\/a> with Oracle 12.2. So let&#8217;s try the same with the recommended CDB architecture. In the next example we compile the dbms_output\u00a0package within the CDB$ROOT\u00a0container, which owns this package. Compiling it in a PDB is not possible (it does not throw an error, but it simply has no effect). On lines 19 to 23 you see the container identifiers and their names. On lines 37 to 40 you see that the PL\/Scope identifiers for the procedure <code>put_line<\/code> are available in every container, except <code>PDB$SEED<\/code>. So far everything still looks good.<\/p>\n\n\n\n<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\">Example 3b &#8211; CDB-Architecture &#8211; Compile DBMS_OUTPUT<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CONNECT sys\/oracle@ocdb AS SYSDBA\n\nSHOW con_name\n\nCON_NAME \n------------------------------\nCDB$ROOT\n\nALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nALTER PACKAGE dbms_output COMPILE;\n\nSELECT con_id, name\n  FROM v$containers\n ORDER BY con_id;\n\nCON_ID NAME       \n------ -----------\n     1 CDB$ROOT   \n     2 PDB$SEED   \n     3 OPDB1      \n     4 OPDB2      \n     5 OPDB3  \n\nSELECT usage, type, name, line, col, origin_con_id, con_id\n  FROM cdb_identifiers \n WHERE OWNER = 'SYS'\n   AND object_type = 'PACKAGE'\n   AND object_name = 'DBMS_OUTPUT'\n   AND TYPE = 'PROCEDURE'\n   AND USAGE = 'DECLARATION'\n   AND NAME = 'PUT_LINE'\n ORDER BY con_id;\n\nUSAGE       TYPE               NAME        LINE  COL ORIGIN_CON_ID CON_ID\n----------- ------------------ ----------- ---- ---- ------------- ------\nDECLARATION PROCEDURE          PUT_LINE      83   13             1      1\nDECLARATION PROCEDURE          PUT_LINE      83   13             1      3\nDECLARATION PROCEDURE          PUT_LINE      83   13             1      4\nDECLARATION PROCEDURE          PUT_LINE      83   13             1      5\" 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\">CONNECT sys\/oracle@ocdb <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> SYSDBA<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">SHOW con_name<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">CON_NAME <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">CDB$ROOT<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">ALTER<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">PACKAGE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">dbms_output<\/span><span style=\"color: #D4D4D4\"> COMPILE;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> con_id, <\/span><span style=\"color: #569CD6\">name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> v$containers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> con_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">CON_ID <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------ -----------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">     <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> CDB$ROOT   <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">     <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\"> PDB$SEED   <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">     <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\"> OPDB1      <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">     <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\"> OPDB2      <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">     <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\"> OPDB3  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, origin_con_id, con_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> cdb_identifiers <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> OWNER = <\/span><span style=\"color: #CE9178\">&#39;SYS&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PACKAGE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;DBMS_OUTPUT&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> USAGE = <\/span><span style=\"color: #CE9178\">&#39;DECLARATION&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&#39;PUT_LINE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> con_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE       <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">        LINE  COL ORIGIN_CON_ID CON_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------- ------------------ ----------- ---- ---- ------------- ------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          PUT_LINE      <\/span><span style=\"color: #B5CEA8\">83<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">13<\/span><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          PUT_LINE      <\/span><span style=\"color: #B5CEA8\">83<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">13<\/span><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          PUT_LINE      <\/span><span style=\"color: #B5CEA8\">83<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">13<\/span><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #B5CEA8\">4<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          PUT_LINE      <\/span><span style=\"color: #B5CEA8\">83<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">13<\/span><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #B5CEA8\">5<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Now we are ready to create our procedure <code>p5<\/code> which is using <code>dbms_output<\/code> in user <code>SCOTT<\/code>. However, the PL\/Scope result is incomplete. Only 5 instead of 7 rows are reported. The two usages of <code>dbms_output<\/code> are missing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is a bug. See bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=26169004\">26169004<\/a>&nbsp;on MOS.<\/p>\n\n\n\n<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);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\">Example 3c &#8211; CDB Architecture &#8211; Incomplete Result in PDB<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CONNECT scott\/tiger@opdb1\n\nSHOW con_name\n\nCON_NAME \n------------------------------\nOPDB1\n\nALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nCREATE OR REPLACE PROCEDURE p5 (in_p IN VARCHAR2) IS\nBEGIN\n   sys.dbms_output.put_line(in_p);\nEND;\n\/\n\nSELECT usage, type, name, line, col, usage_id, usage_context_id\n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P5'\n ORDER BY line, col, usage_id;\n\nUSAGE       TYPE               NAME        LINE  COL USAGE_ID USAGE_CONTEXT_ID\n----------- ------------------ ----------- ---- ---- -------- ----------------\nDECLARATION PROCEDURE          P5             1   11        1                0\nDEFINITION  PROCEDURE          P5             1   11        2                1\nDECLARATION FORMAL IN          IN_P           1   15        3                2\nREFERENCE   CHARACTER DATATYPE VARCHAR2       1   23        4                3\nREFERENCE   FORMAL IN          IN_P           3   29        5                2\" 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\">CONNECT scott\/tiger@opdb1<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">SHOW con_name<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">CON_NAME <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">OPDB1<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p5 (in_p <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<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\">(in_p);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P5&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE       <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">        LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------- ------------------ ----------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          P5             <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION  PROCEDURE          P5             <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">          IN_P           <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">REFERENCE   CHARACTER DATATYPE <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">23<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">REFERENCE   FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">          IN_P           <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">29<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">I see the following workarounds:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use a non-CDB database for PL\/Scope analysis<\/li>\n\n\n\n<li>Do the analysis in the <code>CDB$ROOT<\/code> container<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">4. Missing Identifiers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you are analysing the usages of identifiers, e.g. to check if a declared identifier is used, then you will report false positives if PL\/Scope does not report all identifier usages. See line 6 in the next example. The identifier <code>l_stmt<\/code> is referenced in the execute immediate&nbsp;statement, but the usage is not reported.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is a bug. See bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=26351814\">26351814<\/a>&nbsp;on MOS.<\/p>\n\n\n\n<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\">Example 4a &#8211; Missing Usage of L_STMT<\/span><span role=\"button\" tabindex=\"0\" data-code=\"ALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nCREATE OR REPLACE PROCEDURE p6 IS\n   l_stmt VARCHAR2(100) := 'BEGIN NULL; END;';\nBEGIN\n   EXECUTE IMMEDIATE l_stmt;\nEND;\n\/\n\nSELECT usage, type, name, line, col, usage_id, usage_context_id\n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P6'\n ORDER BY line, col, usage_id;\n\nUSAGE       TYPE               NAME        LINE  COL USAGE_ID USAGE_CONTEXT_ID\n----------- ------------------ ----------- ---- ---- -------- ----------------\nDECLARATION PROCEDURE          P6             1   11        1                0\nDEFINITION  PROCEDURE          P6             1   11        2                1\nDECLARATION VARIABLE           L_STMT         2    4        3                2\nASSIGNMENT  VARIABLE           L_STMT         2    4        5                3\nREFERENCE   CHARACTER DATATYPE VARCHAR2       2   11        4                3\" 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: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p6 <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #9CDCFE\">l_stmt<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">100<\/span><span style=\"color: #D4D4D4\">) := <\/span><span style=\"color: #CE9178\">&#39;BEGIN NULL; END;&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #DCDCAA\">EXECUTE IMMEDIATE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">l_stmt<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P6&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE       <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">        LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------- ------------------ ----------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          P6             <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION  PROCEDURE          P6             <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION VARIABLE           <\/span><span style=\"color: #9CDCFE\">L_STMT<\/span><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\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">ASSIGNMENT  VARIABLE           <\/span><span style=\"color: #9CDCFE\">L_STMT<\/span><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\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">REFERENCE   CHARACTER DATATYPE <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">There is no feasible workaround. Ok, you could use a third-party parser to verify the result, but that&#8217;s an extreme measure and a lot of work. I really hope Oracle is going to fix this bug soon.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Wrong Usages<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the next example the usage of the parameter <code>in_p<\/code>in the if&nbsp;statement is reported as <code>DEFINITION<\/code> instead of <code>REFERENCE<\/code>&nbsp;on line 23.<\/p>\n\n\n\n<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\">Example 5a &#8211; Wrong Usage of IN_P<\/span><span role=\"button\" tabindex=\"0\" data-code=\"ALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nCREATE OR REPLACE PROCEDURE p7 (in_p IN BOOLEAN) IS\nBEGIN\n   IF in_p THEN\n      NULL;\n   END IF;\nEND;\n\/\n\nSELECT usage, type, name, line, col, usage_id, usage_context_id\n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P7'\n ORDER BY line, col, usage_id;\n\nUSAGE       TYPE               NAME        LINE  COL USAGE_ID USAGE_CONTEXT_ID\n----------- ------------------ ----------- ---- ---- -------- ----------------\nDECLARATION PROCEDURE          P7             1   11        1                0\nDEFINITION  PROCEDURE          P7             1   11        2                1\nDECLARATION FORMAL IN          IN_P           1   15        3                2\nREFERENCE   BOOLEAN DATATYPE   BOOLEAN        1   23        4                3\nDEFINITION  FORMAL IN          IN_P           3    7        5                2\" 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: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p7 (in_p <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">BOOLEAN<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #C586C0\">IF<\/span><span style=\"color: #D4D4D4\"> in_p <\/span><span style=\"color: #569CD6\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">NULL<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #C586C0\">END IF<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P7&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE       <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">        LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------- ------------------ ----------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          P7             <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION  PROCEDURE          P7             <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">          IN_P           <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">REFERENCE   <\/span><span style=\"color: #569CD6\">BOOLEAN<\/span><span style=\"color: #D4D4D4\"> DATATYPE   <\/span><span style=\"color: #569CD6\">BOOLEAN<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">23<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">DEFINITION  FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">          IN_P           <\/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\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">This is a bug. See bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=20056796\">20056796<\/a>&nbsp;on MOS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since a <code>DEFINITION<\/code>&nbsp;for a <code>FORMAL IN<\/code> type does not make sense, you can just replace all occurrences as follows:<\/p>\n\n\n\n<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\">Example 5b &#8211; Fix Wrong Usage of IN_P<\/span><span role=\"button\" tabindex=\"0\" data-code=\"SELECT CASE \n          WHEN type = 'FORMAL IN' AND usage = 'DEFINITION' THEN\n             'REFERENCE'\n          ELSE\n             usage\n       END AS usage, type, name, line, col, usage_id, usage_context_id\n  FROM user_identifiers\n WHERE object_type = 'PROCEDURE'\n   AND object_name = 'P7'\n ORDER BY line, col, usage_id;\n\nUSAGE       TYPE               NAME        LINE  COL USAGE_ID USAGE_CONTEXT_ID\n----------- ------------------ ----------- ---- ---- -------- ----------------\nDECLARATION PROCEDURE          P7             1   11        1                0\nDEFINITION  PROCEDURE          P7             1   11        2                1\nDECLARATION FORMAL IN          IN_P           1   15        3                2\nREFERENCE   BOOLEAN DATATYPE   BOOLEAN        1   23        4                3\nREFERENCE   FORMAL IN          IN_P           3    7        5                2\" 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\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">CASE<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">WHEN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&#39;FORMAL IN&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> usage = <\/span><span style=\"color: #CE9178\">&#39;DEFINITION&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #CE9178\">&#39;REFERENCE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #C586C0\">ELSE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             usage<\/span><\/span>\n<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\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P7&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> line, col, usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE       <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">        LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----------- ------------------ ----------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION PROCEDURE          P7             <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DEFINITION  PROCEDURE          P7             <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">          IN_P           <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">REFERENCE   <\/span><span style=\"color: #569CD6\">BOOLEAN<\/span><span style=\"color: #D4D4D4\"> DATATYPE   <\/span><span style=\"color: #569CD6\">BOOLEAN<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">23<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">REFERENCE   FORMAL <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\">          IN_P           <\/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\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">However,&nbsp; when you look at the bug description, you will also find examples for the following additional wrong usage reports:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>an&nbsp;<code>ASSIGNMENT<\/code> instead of a&nbsp;<code>REFERENCE<\/code><\/li>\n\n\n\n<li>a <code>REFERENCE<\/code>&nbsp;instead of an <code>ASSIGNMENT<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For these wrong usages it might not be so simple to work around it. You have to find a solution on an on-case basis until Oracle provides a bug fix.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Missing Usages and Structures in Static SQL Statements<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In example 6a the procedure <code>p8<\/code>\u00a0creates a new row in the table <code>dept<\/code> in a rather awkward manner. In line 31 the analysis query adds the table name to the column name. Something like that is necessary if column names are not unique across tables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, the result has some flaws. Let&#8217;s look at the line 59-70. They are all direct descendants&nbsp;of the insert&nbsp;statement.<\/p>\n\n\n\n<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\">Example 6a &#8211; Limited Analysis Capabilities of Static SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"ALTER SESSION SET plscope_settings='identifiers:all, statements:all';\n\nCREATE OR REPLACE FUNCTION f2 (in_name IN VARCHAR2) RETURN VARCHAR2 IS\nBEGIN\n   RETURN in_name || ' CITY';\nEND;\n\/\n\nCREATE OR REPLACE PROCEDURE p8 IS\nBEGIN\n   INSERT INTO dept (deptno, dname, loc)\n   WITH \n      silly_data AS (\n         SELECT job || substr(ename, 1, 0) AS loc,\n                ename AS dname,\n                deptno + 20 AS deptno\n           FROM emp\n          WHERE comm IS NOT NULL\n            AND ROWNUM = 1\n      )\n   SELECT deptno, dname, f2(loc)\n     FROM silly_data;      \nEND;\n\/\n\nWITH \n   ids AS (\n      SELECT i.usage, i.type, \n             CASE \n                WHEN i.type = 'COLUMN' THEN\n                   p.object_name || '.' || i.name\n                ELSE\n                   i.name\n             END AS name, i.line, i.col, i.usage_id, i.usage_context_id \n        FROM user_identifiers i\n        JOIN user_identifiers p\n          ON p.signature = i.signature\n             AND p.usage = 'DECLARATION'\n       WHERE i.object_type = 'PROCEDURE' \n         AND i.object_name = 'P8'\n    UNION ALL\n      SELECT 'EXECUTE' AS usage, type, sql_id AS name, line, col, usage_id, usage_context_id \n       FROM user_statements\n       WHERE object_type = 'PROCEDURE' \n         AND object_name = 'P8'\n   )\n SELECT lpad(' ', 3 * (level - 1)) || usage AS usage,\n        type, name, line, col, usage_id, usage_context_id\n   FROM ids\n  START WITH usage_context_id = 0\nCONNECT BY PRIOR usage_id = usage_context_id\n  ORDER BY usage_id;\n\nUSAGE                 TYPE               NAME          LINE  COL USAGE_ID USAGE_CONTEXT_ID\n--------------------- ------------------ ------------- ---- ---- -------- ----------------\nDECLARATION           PROCEDURE          P8               1   11        1                0\n   DEFINITION         PROCEDURE          P8               1   11        2                1\n      EXECUTE         INSERT             7dkawtszvu0a8    3    4        3                2\n         REFERENCE    TABLE              EMP              9   17        4                3\n         REFERENCE    COLUMN             EMP.COMM        10   17        5                3\n         REFERENCE    COLUMN             EMP.DEPTNO       8   17        6                3\n         REFERENCE    COLUMN             EMP.ENAME        7   17        7                3\n         REFERENCE    COLUMN             EMP.ENAME        6   31        8                3\n         REFERENCE    COLUMN             EMP.JOB          6   17        9                3\n         REFERENCE    COLUMN             EMP.ENAME       13   19       10                3\n         REFERENCE    TABLE              DEPT             3   16       11                3\n         REFERENCE    COLUMN             DEPT.LOC         3   37       12                3\n         REFERENCE    COLUMN             DEPT.DNAME       3   30       13                3\n         REFERENCE    COLUMN             DEPT.DEPTNO      3   22       14                3\n         CALL         FUNCTION           F2              13   26       16                3\" 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: #DCDCAA\">ALTER SESSION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SET<\/span><span style=\"color: #D4D4D4\"> plscope_settings=<\/span><span style=\"color: #CE9178\">&#39;identifiers:all, statements:all&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> FUNCTION f2 (in_name <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #C586C0\">RETURN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #C586C0\">RETURN<\/span><span style=\"color: #D4D4D4\"> in_name || <\/span><span style=\"color: #CE9178\">&#39; CITY&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> PROCEDURE p8 <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">INSERT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INTO<\/span><span style=\"color: #D4D4D4\"> dept (deptno, dname, loc)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">WITH<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      silly_data <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> job || <\/span><span style=\"color: #DCDCAA\">substr<\/span><span style=\"color: #D4D4D4\">(ename, <\/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: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> loc,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                ename <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> dname,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                deptno + <\/span><span style=\"color: #B5CEA8\">20<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> deptno<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">           <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> emp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> comm <\/span><span style=\"color: #569CD6\">IS NOT NULL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ROWNUM<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> deptno, dname, f2(loc)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">     <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> silly_data;      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">WITH<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   ids <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> i.usage, i.<\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #C586C0\">CASE<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #569CD6\">WHEN<\/span><span style=\"color: #D4D4D4\"> i.<\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&#39;COLUMN&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">THEN<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                   p.object_name || <\/span><span style=\"color: #CE9178\">&#39;.&#39;<\/span><span style=\"color: #D4D4D4\"> || i.<\/span><span style=\"color: #569CD6\">name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #C586C0\">ELSE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   i.<\/span><span style=\"color: #569CD6\">name<\/span><\/span>\n<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\"> <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, i.line, i.col, i.usage_id, i.usage_context_id <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_identifiers i<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">JOIN<\/span><span style=\"color: #D4D4D4\"> user_identifiers p<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">ON<\/span><span style=\"color: #D4D4D4\"> p.signature = i.signature<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> p.usage = <\/span><span style=\"color: #CE9178\">&#39;DECLARATION&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> i.object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> i.object_name = <\/span><span style=\"color: #CE9178\">&#39;P8&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">UNION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ALL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;EXECUTE&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> usage, <\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">, sql_id <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, line, col, usage_id, usage_context_id <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_statements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> object_type = <\/span><span style=\"color: #CE9178\">&#39;PROCEDURE&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> object_name = <\/span><span style=\"color: #CE9178\">&#39;P8&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">lpad<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39; &#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\"> * (<\/span><span style=\"color: #569CD6\">level<\/span><span style=\"color: #D4D4D4\"> - <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">)) || usage <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> usage,<\/span><\/span>\n<span class=\"line\"><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\">, line, col, usage_id, usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> ids<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">START WITH<\/span><span style=\"color: #D4D4D4\"> usage_context_id = <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CONNECT BY PRIOR<\/span><span style=\"color: #D4D4D4\"> usage_id = usage_context_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> usage_id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">USAGE                 <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #569CD6\">NAME<\/span><span style=\"color: #D4D4D4\">          LINE  COL USAGE_ID USAGE_CONTEXT_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">--------------------- ------------------ ------------- ---- ---- -------- ----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">DECLARATION           PROCEDURE          P8               <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   DEFINITION         PROCEDURE          P8               <\/span><span style=\"color: #B5CEA8\">1<\/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\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      EXECUTE         <\/span><span style=\"color: #569CD6\">INSERT<\/span><span style=\"color: #D4D4D4\">             7dkawtszvu0a8    <\/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\">3<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">              EMP              <\/span><span style=\"color: #B5CEA8\">9<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">17<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">             EMP.COMM        <\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">17<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">             EMP.DEPTNO       <\/span><span style=\"color: #B5CEA8\">8<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">17<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">6<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">             EMP.ENAME        <\/span><span style=\"color: #B5CEA8\">7<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">17<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">7<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">             EMP.ENAME        <\/span><span style=\"color: #B5CEA8\">6<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">31<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">8<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">             EMP.JOB          <\/span><span style=\"color: #B5CEA8\">6<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">17<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #B5CEA8\">9<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">             EMP.ENAME       <\/span><span style=\"color: #B5CEA8\">13<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">19<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">              DEPT             <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">16<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">             DEPT.LOC         <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">37<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #B5CEA8\">12<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">             DEPT.DNAME       <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">30<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #B5CEA8\">13<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         REFERENCE    <\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #D4D4D4\">             DEPT.DEPTNO      <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">22<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #B5CEA8\">14<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         CALL         FUNCTION           F2              <\/span><span style=\"color: #B5CEA8\">13<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">26<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #B5CEA8\">16<\/span><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">How do we identify the target table of the insert statement? Is it <code>emp<\/code> or is it <code>dept<\/code>? Ok, when we order the result by <code>line<\/code> and <code>column<\/code> instead of <code>usage_id<\/code>, we could know based on the SQL grammar that <code>dept<\/code>\u00a0must be a target table. But what about <code>emp<\/code>? Could that be the target of a mutitable insert statement? Probably not since there is no other table to query data from, right? Probably right, but if we&#8217;d query data from a table function which is not compiled with PL\/Scope emp\u00a0could still be a target of a multitable insert statement. A different usage might help, but unfortunately, all table and column usages within static SQL statements are reported as <code>REFERENCE<\/code>.\u00a0 This is not a bug. If we want to change that we have to file an enhancement request.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Identifying target columns, source columns or columns used to filter data is impossible with PL\/Scope alone. You need a SQL parser or tools using such a parser for deeper static code analysis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Even if you are interested in the column usages only, you have to be aware that column-less access to tables is possible, e.g. when omitting the column list in the insert_into_clause. In such cases, all visible columns of the target table are used. If synonyms and views are used, the analysis becomes a bit harder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nonetheless, the metadata provided through&nbsp;<code>user_statements<\/code>completes the missing pure PL\/SQL analysis reporting capabilities for PL\/SQL identifiers. Now all usages of PL\/SQL identifiers are reported with a static SQL statement context &#8211; if they have one. E.g the use of the function f2 within the insert statement on line 70. And that alone is very useful.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Summary<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Most of the limitations mentioned in this post are based on bugs. Hence I recommend checking from time to time the status of the following bugs on MOS and opening a SR when you are unable to produce a correct analysis result due to PL\/Scope bugs.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=24916492\">24916492<\/a>: PLSCOPE_SETTINGS DOESN&#8217;T PARSE IDENTIFIER INFORMATION AFTER NULL STATEMENT<\/li>\n\n\n\n<li>Bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=26363026\">26363026<\/a>: WRONG RESULT IN PL\/SCOPE HIERARCHICAL QUERY USING SYNONYM<\/li>\n\n\n\n<li>Bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=26351814\">26351814<\/a>: EXECUTE IMMEDIATE STATEMENT IDENTIFIER REFERENCE NOT COLLECTED BY PL\/SCOPE<\/li>\n\n\n\n<li>Bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=26169004\">26169004<\/a>: PL\/SCOPE DOES NOT DETECT USAGES OF CDB OBJECTS SUCH AS SYS.DBMS_SQL<\/li>\n\n\n\n<li>Bug <a href=\"https:\/\/support.oracle.com\/epmos\/faces\/BugDisplay?id=20056796\">20056796<\/a> : PLSCOPE SHOWS WRONG USAGE OF IDENTIFIERS<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Some limitations of PL\/Scope are by design. In the end, PL\/Scope provides just information about identifiers, a subset of data produced during parse time and not a complete parse tree, which would be desirable for complex static code analysis. However, if you just want to analyse the use of identifiers in your PL\/SQL code, you should consider using PL\/Scope. PL\/Scope stores the results after the semantic analysis, therefore each identifier comes with a context such as a schema, nested program unit, etc. Even if you need a third-party tool for static code analysis, PL\/Scope might be helpful to verify or complete the result.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before you start developing your own PL\/Scope queries from scratch, have a look at <a href=\"https:\/\/github.com\/PhilippSalvisberg\/plscope-utils\">plscope-utils<\/a>. There are predefined views which address some of the mentioned limitations out of the box. There&#8217;s also a <a href=\"https:\/\/www.salvis.com\/blog\/plscope-utils-for-sql-developer\/\">SQL Developer plugin<\/a> which works against any database version with PL\/Scope.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>My first car was a Renault R5 TX. The motor cooling of this car was really bad. On a hot summer day, it was simply not possible to drive slowly in high traffic without overheating the engine. To cool the engine you could either stop the car, open the front lid and<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":9530,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[86,97,13,85],"class_list":["post-7852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","tag-code-analysis","tag-plscope","tag-plsql","tag-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Limitations of PL\/Scope and How to Deal with Them - Philipp Salvisberg&#039;s Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Limitations of PL\/Scope and How to Deal with Them - Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"My first car was a Renault R5 TX. The motor cooling of this car was really bad. On a hot summer day, it was simply not possible to drive slowly in high traffic without overheating the engine. To cool the engine you could either stop the car, open the front lid and [\u2026]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/\" \/>\n<meta property=\"og:site_name\" content=\"Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-10-14T15:23:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-07T22:58:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2017\/10\/limitations.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2048\" \/>\n\t<meta property=\"og:image:height\" content=\"548\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Philipp Salvisberg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:site\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Philipp Salvisberg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/\"},\"author\":{\"name\":\"Philipp Salvisberg\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"headline\":\"Limitations of PL\\\/Scope and How to Deal with Them\",\"datePublished\":\"2017-10-14T15:23:42+00:00\",\"dateModified\":\"2023-11-07T22:58:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/\"},\"wordCount\":2118,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/10\\\/limitations.jpg\",\"keywords\":[\"Code Analysis\",\"PL\\\/Scope\",\"PL\\\/SQL\",\"SQL\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/\",\"name\":\"Limitations of PL\\\/Scope and How to Deal with Them - Philipp Salvisberg&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/10\\\/limitations.jpg\",\"datePublished\":\"2017-10-14T15:23:42+00:00\",\"dateModified\":\"2023-11-07T22:58:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/10\\\/limitations.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/10\\\/limitations.jpg\",\"width\":2048,\"height\":548},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2017\\\/10\\\/14\\\/limitations-of-plscope-and-how-to-deal-with-them\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Limitations of PL\\\/Scope and How to Deal with Them\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"name\":\"Philipp Salvisberg&#039;s Blog\",\"description\":\"Database-centric development\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\",\"name\":\"Philipp Salvisberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"width\":400,\"height\":400,\"caption\":\"Philipp Salvisberg\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.salvis.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Limitations of PL\/Scope and How to Deal with Them - Philipp Salvisberg&#039;s Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/","og_locale":"en_US","og_type":"article","og_title":"Limitations of PL\/Scope and How to Deal with Them - Philipp Salvisberg&#039;s Blog","og_description":"My first car was a Renault R5 TX. The motor cooling of this car was really bad. On a hot summer day, it was simply not possible to drive slowly in high traffic without overheating the engine. To cool the engine you could either stop the car, open the front lid and [\u2026]","og_url":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/","og_site_name":"Philipp Salvisberg&#039;s Blog","article_published_time":"2017-10-14T15:23:42+00:00","article_modified_time":"2023-11-07T22:58:04+00:00","og_image":[{"width":2048,"height":548,"url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2017\/10\/limitations.jpg","type":"image\/jpeg"}],"author":"Philipp Salvisberg","twitter_card":"summary_large_image","twitter_creator":"@phsalvisberg","twitter_site":"@phsalvisberg","twitter_misc":{"Written by":"Philipp Salvisberg","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/#article","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/"},"author":{"name":"Philipp Salvisberg","@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"headline":"Limitations of PL\/Scope and How to Deal with Them","datePublished":"2017-10-14T15:23:42+00:00","dateModified":"2023-11-07T22:58:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/"},"wordCount":2118,"commentCount":4,"publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2017\/10\/limitations.jpg","keywords":["Code Analysis","PL\/Scope","PL\/SQL","SQL"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/","url":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/","name":"Limitations of PL\/Scope and How to Deal with Them - Philipp Salvisberg&#039;s Blog","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/#primaryimage"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2017\/10\/limitations.jpg","datePublished":"2017-10-14T15:23:42+00:00","dateModified":"2023-11-07T22:58:04+00:00","breadcrumb":{"@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/#primaryimage","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2017\/10\/limitations.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2017\/10\/limitations.jpg","width":2048,"height":548},{"@type":"BreadcrumbList","@id":"https:\/\/www.salvis.com\/blog\/2017\/10\/14\/limitations-of-plscope-and-how-to-deal-with-them\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.salvis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Limitations of PL\/Scope and How to Deal with Them"}]},{"@type":"WebSite","@id":"https:\/\/www.salvis.com\/blog\/#website","url":"https:\/\/www.salvis.com\/blog\/","name":"Philipp Salvisberg&#039;s Blog","description":"Database-centric development","publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.salvis.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515","name":"Philipp Salvisberg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","width":400,"height":400,"caption":"Philipp Salvisberg"},"logo":{"@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg"},"sameAs":["http:\/\/www.salvis.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/7852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/comments?post=7852"}],"version-history":[{"count":133,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/7852\/revisions"}],"predecessor-version":[{"id":12613,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/7852\/revisions\/12613"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media\/9530"}],"wp:attachment":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media?parent=7852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/categories?post=7852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/tags?post=7852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}