{"id":117,"date":"2011-10-12T01:51:00","date_gmt":"2011-10-11T23:51:00","guid":{"rendered":"http:\/\/www.salvis.com\/blog\/?p=117"},"modified":"2023-11-08T19:49:38","modified_gmt":"2023-11-08T18:49:38","slug":"using-utl_xml-parsequery-for-sql-dependency-analysis","status":"publish","type":"post","link":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/","title":{"rendered":"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis"},"content":{"rendered":"\n<p>Last week I had a talk at Oracle&#8217;s OpenWorld 2011 titled <a title=\"Modern PL\/SQL Code Checking and Dependency Analysis\" href=\"\/\/www.salvis.com\/blog\/wp-content\/uploads\/2011\/10\/Salvisberg_Modern_PLSQL_Code_Checking_and_Dependency_Analysis.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Modern PL\/SQL Code Checking and Dependency Analysis<\/a>.<\/p>\n\n\n\n<p>The problem I described in chapter 4 was to find all view columns using the column UNIT_COST of the table COSTS in the SH schema. Other usages of this column (e.g. in where or order by clauses) have to be ignored. To solve this problem within the Oracle Database Server 11.2 a parser is necessary (at least I&#8217;m not aware of another solution). Even a DBA_DEPENDENCY_COLUMNS view as described in Rob van Wijk&#8217;s <a title=\"DBA_DEPENDENCY_COLUMNS\" href=\"http:\/\/rwijk.blogspot.com\/2008\/10\/dbadependencycolumns.html\" target=\"_blank\" rel=\"noopener noreferrer\">post<\/a> is not enough to solve this problem.<\/p>\n\n\n\n<p>However, in this particular case, no custom or 3rd party parser is necessary. Oracle provides a procedure named PARSEQUERY in the PL\/SQL package UTL_XML which is in fact well-suited to solve this problem as I will show later. First, I&#8217;d like explain which columns should be found by a dependency analysis procedure based on some sample views.<\/p>\n\n\n\n<p>Oracle&#8217;s sales history demo schema SH provides a view named PROFITS, which is defined 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\">1) View PROFITS<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE OR REPLACE VIEW PROFITS AS\nSELECT s.channel_id,\n       s.cust_id,\n       s.prod_id,\n       s.promo_id,\n       s.time_id,\n       c.unit_cost,\n       c.unit_price,\n       s.amount_sold,\n       s.quantity_sold,\n       c.unit_cost * s.quantity_sold TOTAL_COST\n  FROM costs c, sales s\n WHERE c.prod_id = s.prod_id\n   AND c.time_id = s.time_id\n   AND c.channel_id = s.channel_id\n   AND c.promo_id = s.promo_id;\" 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\"> <\/span><span style=\"color: #569CD6\">VIEW<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">PROFITS<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> s.channel_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       s.cust_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       s.prod_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       s.promo_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       s.time_id,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       c.unit_cost,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       c.unit_price,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       s.amount_sold,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       s.quantity_sold,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       c.unit_cost * s.quantity_sold TOTAL_COST<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> costs c, sales s<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> c.prod_id = s.prod_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> c.time_id = s.time_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> c.channel_id = s.channel_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> c.promo_id = s.promo_id;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The columns using COSTS.UNIT_COSTS are highlighted.<\/p>\n\n\n\n<p>The following view uses the column TOTAL_COSTS in GROSS_MARGIN (line 14) and GROSS_MARGIN_PERCENT (lines 14 and 15). The usage is not evident at the first glance since it is based on the column GROSS_MARGIN (line 4) of the named query GM and the column COST (line 8) in GM&#8217;s subquery. This kind of dependencies need to be identified.<\/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\">2) View GROSS_MARGIN<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE OR REPLACE VIEW GROSS_MARGINS AS\nWITH \n   gm AS (\n      SELECT time_id, revenue, revenue - cost AS gross_margin\n        FROM (\n           SELECT time_id,\n                  unit_price * quantity_sold AS revenue,\n                  total_cost AS cost\n             FROM profits\n        )\n   )\nSELECT t.fiscal_year,\n       SUM(revenue) AS revenue,\n       SUM(gross_margin) AS gross_margin,\n       round(100 * SUM(gross_margin) \/ SUM(revenue), 2) \n          AS gross_margin_percent\n  FROM gm\n INNER JOIN times t ON t.time_id = gm.time_id\n GROUP BY t.fiscal_year\n ORDER BY t.fiscal_year;\" 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\"> <\/span><span style=\"color: #569CD6\">VIEW<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">GROSS_MARGINS<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/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\">   gm <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> time_id, revenue, revenue - cost <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> gross_margin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">FROM<\/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\"> time_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unit_price * quantity_sold <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> revenue,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                  total_cost <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> cost<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> profits<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        )<\/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\"> t.fiscal_year,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #DCDCAA\">SUM<\/span><span style=\"color: #D4D4D4\">(revenue) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> revenue,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #DCDCAA\">SUM<\/span><span style=\"color: #D4D4D4\">(gross_margin) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> gross_margin,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #DCDCAA\">round<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">100<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #DCDCAA\">SUM<\/span><span style=\"color: #D4D4D4\">(gross_margin) \/ <\/span><span style=\"color: #DCDCAA\">SUM<\/span><span style=\"color: #D4D4D4\">(revenue), <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">) <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> gross_margin_percent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> gm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INNER JOIN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">times<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">ON<\/span><span style=\"color: #D4D4D4\"> t.time_id = gm.time_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">GROUP BY<\/span><span style=\"color: #D4D4D4\"> t.fiscal_year<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> t.fiscal_year;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The next view does not present the data of COSTS.UNIT_COST as a column, even if the view depends on the table COSTS<\/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(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">3) View REVENUES <\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE OR REPLACE VIEW REVENUES AS\nSELECT fiscal_year, revenue\n  FROM gross_margins;\" 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\"> <\/span><span style=\"color: #569CD6\">VIEW<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">REVENUES<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> fiscal_year, revenue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> gross_margins;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The last view uses COSTS.UNIT_COST but not as part of a column expression and therefore has not to be reported. The usage in the order by clause is considered safe.<\/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\">4) View SALES_ORDERED_BY_GM<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE OR REPLACE VIEW SALES_ORDERED_BY_GM AS\nSELECT channel_id,\n       cust_id,\n       prod_id,\n       promo_id,\n       time_id,\n       amount_sold,\n       quantity_sold\n  FROM profits\n ORDER BY (unit_price - unit_cost) DESC;\" 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\"> <\/span><span style=\"color: #569CD6\">VIEW<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">SALES_ORDERED_BY_GM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> channel_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       cust_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       prod_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       promo_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       time_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       amount_sold,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       quantity_sold<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> profits<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> (unit_price - unit_cost) <\/span><span style=\"color: #569CD6\">DESC<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>So, the following result of the dependency analysis is expected:<\/p>\n\n\n\n<table id=\"tablepress-3\" class=\"tablepress tablepress-id-3\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">SCHEMA<\/th><th class=\"column-2\">VIEW<\/th><th class=\"column-3\">COLUMN<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">SH<\/td><td class=\"column-2\">PROFITS<\/td><td class=\"column-3\">UNIT_COST<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">SH<\/td><td class=\"column-2\">PROFITS<\/td><td class=\"column-3\">TOTAL_COST<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">SH<\/td><td class=\"column-2\">GROSS_MARGINS<\/td><td class=\"column-3\">GROSS_MARGIN<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">SH<\/td><td class=\"column-2\">GROSS_MARGINS<\/td><td class=\"column-3\">GROSS_MARGIN_PERCENT<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\n\n\n<p>Exactly this result is created by the following query<\/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(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">5) Query Column Depenendencies<\/span><span role=\"button\" tabindex=\"0\" data-code=\"SELECT *\n  FROM TABLE(coldep_pkg.get_dep('sh', 'costs', 'unit_cost'));\" 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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">(coldep_pkg.get_dep(<\/span><span style=\"color: #CE9178\">&#39;sh&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;costs&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;unit_cost&#39;<\/span><span style=\"color: #D4D4D4\">));<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Now I just list all the code snippets I&#8217;ve written to create this result. Please note, that this is considered just a proof-of-concept code to show how UTL_XML.PARSEQUERY could be used for SQL dependency analysis in conjunction with Oracle dictionary views. This means that this is not a complete implementation. For example, wild cards (*) are not handled which may lead to missing dependencies. Additionally, table\/view sources are not checked which may lead to false positives (in case a column is used in multiple view\/table sources). &#8211; Please feel free to complete the code. However, an update is highly appreciated ;-)<\/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(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">6) Grants<\/span><span role=\"button\" tabindex=\"0\" data-code=\"GRANT EXECUTE ON SYS.UTL_XML TO SH;\" 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\">GRANT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">EXECUTE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">ON<\/span><span style=\"color: #D4D4D4\"> SYS.UTL_XML <\/span><span style=\"color: #569CD6\">TO<\/span><span style=\"color: #D4D4D4\"> SH;<\/span><\/span><\/code><\/pre><\/div>\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(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">7) Object Type COLDEP_TYP<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE OR REPLACE TYPE &quot;SH&quot;.&quot;COLDEP_TYP&quot; AS \nOBJECT (schema_name VARCHAR2(30), \n        view_name varchar2(30), \n        column_name VARCHAR2(30))\n\/\nCREATE OR REPLACE TYPE &quot;SH&quot;.&quot;COLDEP_L&quot; IS TABLE OF coldep_typ\n\/\" 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\"> <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\"> &quot;<\/span><span style=\"color: #DCDCAA\">SH<\/span><span style=\"color: #D4D4D4\">&quot;.<\/span><span style=\"color: #CE9178\">&quot;COLDEP_TYP&quot;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">OBJECT<\/span><span style=\"color: #D4D4D4\"> (schema_name <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">30<\/span><span style=\"color: #D4D4D4\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        view_name <\/span><span style=\"color: #569CD6\">varchar2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">30<\/span><span style=\"color: #D4D4D4\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        column_name <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">30<\/span><span style=\"color: #D4D4D4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TYPE<\/span><span style=\"color: #D4D4D4\"> &quot;<\/span><span style=\"color: #DCDCAA\">SH<\/span><span style=\"color: #D4D4D4\">&quot;.<\/span><span style=\"color: #CE9178\">&quot;COLDEP_L&quot;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">IS<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> OF coldep_typ<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span><\/code><\/pre><\/div>\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(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">8) PL\/SQL Package COLDEP_PKG<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE OR REPLACE PACKAGE &quot;SH&quot;.&quot;COLDEP_PKG&quot; IS\n   FUNCTION parse_query(p_query IN VARCHAR2) RETURN xmltype;\n\n   FUNCTION get_dep(p_schema_name IN VARCHAR2,\n                    p_object_name IN VARCHAR2,\n                    p_column_name IN VARCHAR2) RETURN coldep_l\n      PIPELINED;\n\n   FUNCTION process_view(p_schema_name IN VARCHAR2,\n                         p_view_name   IN VARCHAR2,\n                         p_column_name IN VARCHAR2,\n                         p_query       IN CLOB) RETURN coldep_l;\nEND coldep_pkg;\n\/\nCREATE OR REPLACE PACKAGE BODY &quot;SH&quot;.&quot;COLDEP_PKG&quot; IS\n   FUNCTION parse_query(p_query IN VARCHAR2) RETURN xmltype IS\n      v_clob CLOB;\n      v_xml  xmltype;\n   BEGIN\n      dbms_lob.createtemporary(v_clob, TRUE);\n      -- parse query and get XML as CLOB\n      sys.utl_xml.parsequery(USER, p_query, v_clob);\n      -- create XMLTYPE from CLOB \n      v_xml := xmltype.createxml(v_clob);\n      dbms_lob.freetemporary(v_clob);\n      RETURN v_xml;\n   END parse_query;\n\n   FUNCTION get_dep(p_schema_name IN VARCHAR2,\n                    p_object_name IN VARCHAR2,\n                    p_column_name IN VARCHAR2) RETURN coldep_l\n      PIPELINED IS\n   BEGIN\n      -- query dictionary dependencies\n      FOR v_dep IN (SELECT d.owner AS schema_name,\n                           d.name  AS view_name,\n                           v.text  AS query_text\n                      FROM all_dependencies d\n                     INNER JOIN all_views v\n                        ON v.owner = d.owner\n                           AND v.view_name = d.name\n                     WHERE d.referenced_owner = upper(p_schema_name)\n                           AND d.referenced_name = upper(p_object_name)\n                           AND d.type = 'VIEW')\n      LOOP\n         -- process every fetched view\n         FOR v_views IN (\n            SELECT VALUE(pv) coldep\n              FROM TABLE(process_view(v_dep.schema_name,\n                                      v_dep.view_name,\n                                      p_column_name,\n                                      v_dep.query_text)) pv)\n         LOOP\n            -- return column usages in v_dep.view_name\n            PIPE ROW(v_views.coldep);\n            -- get column usages of views using v_dep.view_name (recursive calls)\n            FOR v_recursive IN (\n               SELECT VALUE(dep) coldep\n                 FROM TABLE(get_dep(v_views.coldep.schema_name,\n                                    v_views.coldep.view_name,\n                                    v_views.coldep.column_name)) dep)\n            LOOP\n               -- return column usages of recursive call\n               PIPE ROW(v_recursive.coldep);\n            END LOOP;\n         END LOOP;\n      END LOOP;\n   END get_dep;\n\n   FUNCTION process_view(p_schema_name IN VARCHAR2,\n                         p_view_name   IN VARCHAR2,\n                         p_column_name IN VARCHAR2,\n                         p_query       IN CLOB) RETURN coldep_l IS\n      v_search_l       coldep_l := coldep_l(coldep_typ(NULL,\n                                                       NULL,\n                                                       p_column_name));\n      v_xml            xmltype;\n      v_previous_count INTEGER := 0;\n      v_coldep_l       coldep_l := coldep_l();\n   BEGIN\n      -- parse view query\n      v_xml := parse_query(p_query);\n      -- get inline dependencies from secondary select lists\n      -- TODO: handle table\/view source and wildcard properly \n      WHILE v_previous_count < v_search_l.count\n      LOOP\n         v_previous_count := v_search_l.count;\n         FOR v_secondary IN (\n            SELECT nvl(x.alias_name, x.column_reference) AS alias_name\n              FROM (SELECT t.select_list_item,\n                           t.alias_name,\n                           extractvalue(VALUE(c), 'COLUMN') AS column_reference\n                      FROM xmltable('\/\/SELECT_LIST_ITEM[ancestor::FROM or ancestor::WITH]'\n                              passing v_xml \n                              columns select_list_item xmltype path '\/\/SELECT_LIST_ITEM',\n                                      alias_name VARCHAR2(30) path '\/\/COLUMN_ALIAS') t,\n                           TABLE(xmlsequence(extract(select_list_item, '\/\/COLUMN'))) c) x\n             WHERE upper(x.column_reference) IN (SELECT upper(column_name) \n                                                   FROM TABLE(v_search_l))\n               AND upper(alias_name) NOT IN (SELECT upper(column_name)\n                                              FROM TABLE(v_search_l)))\n         LOOP\n            -- add internal column usage\n            v_search_l.extend;\n            v_search_l(v_search_l.count) := coldep_typ(NULL,\n                                                       NULL,\n                                                       v_secondary.alias_name);\n         END LOOP;\n      END LOOP;\n      -- analyze primary select list\n      -- TODO: handle table\/view source and wildcard properly \n      FOR v_primary IN (\n         SELECT x.column_id, atc.column_name\n           FROM (SELECT t.select_list_item,\n                        t.column_id,\n                        extractvalue(VALUE(c), 'COLUMN') AS column_reference\n                   FROM xmltable('\/\/SELECT_LIST_ITEM[not (ancestor::FROM) and not (ancestor::WITH)]'\n                           passing v_xml \n                           columns column_id FOR ordinality,\n                                   select_list_item xmltype path '\/\/SELECT_LIST_ITEM') t,\n                        TABLE(xmlsequence(extract(select_list_item, '\/\/COLUMN'))) c) x\n                  INNER JOIN all_tab_columns atc\n                     ON atc.owner = p_schema_name\n                    AND atc.table_name = p_view_name\n                    AND atc.column_id = x.column_id\n                  WHERE upper(x.column_reference) IN (SELECT upper(column_name)\n                                                        FROM TABLE(v_search_l))\n                  ORDER BY x.column_id)\n      LOOP\n         -- add external column usage\n         v_coldep_l.extend;\n         v_coldep_l(v_coldep_l.count) := coldep_typ(p_schema_name,\n                                                    p_view_name,\n                                                    v_primary.column_name);\n      END LOOP;\n      -- return column dependencies   \n      RETURN v_coldep_l;\n   END process_view;\nEND coldep_pkg;\n\/\" 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\"> <\/span><span style=\"color: #569CD6\">PACKAGE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">&quot;SH&quot;.&quot;COLDEP_PKG&quot;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FUNCTION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">parse_query<\/span><span style=\"color: #D4D4D4\">(p_query <\/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\">xmltype<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FUNCTION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">get_dep<\/span><span style=\"color: #D4D4D4\">(p_schema_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    p_object_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    p_column_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\"> coldep_l<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      PIPELINED;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FUNCTION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">process_view<\/span><span style=\"color: #D4D4D4\">(p_schema_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                         p_view_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                         p_column_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                         p_query       <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">CLOB<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #C586C0\">RETURN<\/span><span style=\"color: #D4D4D4\"> coldep_l;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\"> coldep_pkg;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE OR REPLACE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">PACKAGE BODY<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">&quot;SH&quot;.&quot;COLDEP_PKG&quot;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FUNCTION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">parse_query<\/span><span style=\"color: #D4D4D4\">(p_query <\/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\">xmltype<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      v_clob <\/span><span style=\"color: #569CD6\">CLOB<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      v_xml  <\/span><span style=\"color: #569CD6\">xmltype<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #DCDCAA\">dbms_lob.<\/span><span style=\"color: #4EC9B0\">createtemporary<\/span><span style=\"color: #D4D4D4\">(v_clob, <\/span><span style=\"color: #569CD6\">TRUE<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">-- parse query and get XML as CLOB<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      sys.<\/span><span style=\"color: #DCDCAA\">utl_xml.<\/span><span style=\"color: #4EC9B0\">parsequery<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">USER<\/span><span style=\"color: #D4D4D4\">, p_query, v_clob);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">-- create XMLTYPE from CLOB <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      v_xml := <\/span><span style=\"color: #569CD6\">xmltype<\/span><span style=\"color: #D4D4D4\">.createxml(v_clob);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #DCDCAA\">dbms_lob.<\/span><span style=\"color: #4EC9B0\">freetemporary<\/span><span style=\"color: #D4D4D4\">(v_clob);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">RETURN<\/span><span style=\"color: #D4D4D4\"> v_xml;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\"> parse_query;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FUNCTION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">get_dep<\/span><span style=\"color: #D4D4D4\">(p_schema_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    p_object_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    p_column_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\"> coldep_l<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      PIPELINED <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">-- query dictionary dependencies<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">FOR<\/span><span style=\"color: #D4D4D4\"> v_dep <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> d.owner <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> schema_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           d.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> view_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           v.text  <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> query_text<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> all_dependencies d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                     INNER <\/span><span style=\"color: #569CD6\">JOIN<\/span><span style=\"color: #D4D4D4\"> all_views v<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        <\/span><span style=\"color: #569CD6\">ON<\/span><span style=\"color: #D4D4D4\"> v.owner = d.owner<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> v.view_name = d.<\/span><span style=\"color: #569CD6\">name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                     <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> d.referenced_owner = <\/span><span style=\"color: #DCDCAA\">upper<\/span><span style=\"color: #D4D4D4\">(p_schema_name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> d.referenced_name = <\/span><span style=\"color: #DCDCAA\">upper<\/span><span style=\"color: #D4D4D4\">(p_object_name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> d.<\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&#39;VIEW&#39;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">LOOP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #6A9955\">-- process every fetched view<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #C586C0\">FOR<\/span><span style=\"color: #D4D4D4\"> v_views <\/span><span style=\"color: #569CD6\">IN<\/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\"> VALUE(pv) coldep<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">(process_view(v_dep.schema_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      v_dep.view_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      p_column_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      v_dep.query_text)) pv)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #C586C0\">LOOP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #6A9955\">-- return column usages in v_dep.view_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            PIPE <\/span><span style=\"color: #569CD6\">ROW<\/span><span style=\"color: #D4D4D4\">(v_views.coldep);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #6A9955\">-- get column usages of views using v_dep.view_name (recursive calls)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #C586C0\">FOR<\/span><span style=\"color: #D4D4D4\"> v_recursive <\/span><span style=\"color: #569CD6\">IN<\/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\"> VALUE(dep) coldep<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                 <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">(get_dep(v_views.coldep.schema_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    v_views.coldep.view_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    v_views.coldep.column_name)) dep)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #C586C0\">LOOP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">               <\/span><span style=\"color: #6A9955\">-- return column usages of recursive call<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">               PIPE <\/span><span style=\"color: #569CD6\">ROW<\/span><span style=\"color: #D4D4D4\">(v_recursive.coldep);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #C586C0\">END LOOP<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #C586C0\">END LOOP<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">END LOOP<\/span><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\"> get_dep;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">FUNCTION<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">process_view<\/span><span style=\"color: #D4D4D4\">(p_schema_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                         p_view_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                         p_column_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>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                         p_query       <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">CLOB<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #C586C0\">RETURN<\/span><span style=\"color: #D4D4D4\"> coldep_l <\/span><span style=\"color: #569CD6\">IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      v_search_l       coldep_l := coldep_l(coldep_typ(<\/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: #569CD6\">NULL<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                       p_column_name));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      v_xml            <\/span><span style=\"color: #569CD6\">xmltype<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      v_previous_count <\/span><span style=\"color: #569CD6\">INTEGER<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      v_coldep_l       coldep_l := coldep_l();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">BEGIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">-- parse view query<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      v_xml := parse_query(p_query);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">-- get inline dependencies from secondary select lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">-- TODO: handle table\/view source and wildcard properly <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">WHILE<\/span><span style=\"color: #D4D4D4\"> v_previous_count &lt; v_search_l<\/span><span style=\"color: #DCDCAA\">.count<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">LOOP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         v_previous_count := v_search_l<\/span><span style=\"color: #DCDCAA\">.count<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #C586C0\">FOR<\/span><span style=\"color: #D4D4D4\"> v_secondary <\/span><span style=\"color: #569CD6\">IN<\/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\"> <\/span><span style=\"color: #DCDCAA\">nvl<\/span><span style=\"color: #D4D4D4\">(x.alias_name, x.column_reference) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> alias_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> t.select_list_item,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           t.alias_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           <\/span><span style=\"color: #DCDCAA\">extractvalue<\/span><span style=\"color: #D4D4D4\">(VALUE(<\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">), <\/span><span style=\"color: #CE9178\">&#39;COLUMN&#39;<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> column_reference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">xmltable<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;\/\/SELECT_LIST_ITEM[ancestor::FROM or ancestor::WITH]&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              passing v_xml <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              columns select_list_item <\/span><span style=\"color: #569CD6\">xmltype<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">path<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;\/\/SELECT_LIST_ITEM&#39;<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      alias_name <\/span><span style=\"color: #569CD6\">VARCHAR2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">30<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #DCDCAA\">path<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;\/\/COLUMN_ALIAS&#39;<\/span><span style=\"color: #D4D4D4\">) t,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">xmlsequence<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">extract<\/span><span style=\"color: #D4D4D4\">(select_list_item, <\/span><span style=\"color: #CE9178\">&#39;\/\/COLUMN&#39;<\/span><span style=\"color: #D4D4D4\">))) <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">) x<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">upper<\/span><span style=\"color: #D4D4D4\">(x.column_reference) <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">upper<\/span><span style=\"color: #D4D4D4\">(column_name) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                   <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">(v_search_l))<\/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: #DCDCAA\">upper<\/span><span style=\"color: #D4D4D4\">(alias_name) <\/span><span style=\"color: #569CD6\">NOT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">upper<\/span><span style=\"color: #D4D4D4\">(column_name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">(v_search_l)))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #C586C0\">LOOP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #6A9955\">-- add internal column usage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            v_search_l<\/span><span style=\"color: #DCDCAA\">.extend<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            v_search_l(v_search_l<\/span><span style=\"color: #DCDCAA\">.count<\/span><span style=\"color: #D4D4D4\">) := coldep_typ(<\/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: #569CD6\">NULL<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                       v_secondary.alias_name);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #C586C0\">END LOOP<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">END LOOP<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">-- analyze primary select list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">-- TODO: handle table\/view source and wildcard properly <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">FOR<\/span><span style=\"color: #D4D4D4\"> v_primary <\/span><span style=\"color: #569CD6\">IN<\/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\"> x.column_id, atc.column_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">           <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> t.select_list_item,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        t.column_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        <\/span><span style=\"color: #DCDCAA\">extractvalue<\/span><span style=\"color: #D4D4D4\">(VALUE(<\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">), <\/span><span style=\"color: #CE9178\">&#39;COLUMN&#39;<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> column_reference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">xmltable<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;\/\/SELECT_LIST_ITEM[not (ancestor::FROM) and not (ancestor::WITH)]&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           passing v_xml <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           columns column_id <\/span><span style=\"color: #C586C0\">FOR<\/span><span style=\"color: #D4D4D4\"> ordinality,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                   select_list_item <\/span><span style=\"color: #569CD6\">xmltype<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">path<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;\/\/SELECT_LIST_ITEM&#39;<\/span><span style=\"color: #D4D4D4\">) t,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">xmlsequence<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">extract<\/span><span style=\"color: #D4D4D4\">(select_list_item, <\/span><span style=\"color: #CE9178\">&#39;\/\/COLUMN&#39;<\/span><span style=\"color: #D4D4D4\">))) <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">) x<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  INNER <\/span><span style=\"color: #569CD6\">JOIN<\/span><span style=\"color: #D4D4D4\"> all_tab_columns atc<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                     <\/span><span style=\"color: #569CD6\">ON<\/span><span style=\"color: #D4D4D4\"> atc.owner = p_schema_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> atc.table_name = p_view_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> atc.column_id = x.column_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #569CD6\">WHERE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">upper<\/span><span style=\"color: #D4D4D4\">(x.column_reference) <\/span><span style=\"color: #569CD6\">IN<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">upper<\/span><span style=\"color: #D4D4D4\">(column_name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                        <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\">(v_search_l))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> x.column_id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">LOOP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #6A9955\">-- add external column usage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         v_coldep_l<\/span><span style=\"color: #DCDCAA\">.extend<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         v_coldep_l(v_coldep_l<\/span><span style=\"color: #DCDCAA\">.count<\/span><span style=\"color: #D4D4D4\">) := coldep_typ(p_schema_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    p_view_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    v_primary.column_name);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">END LOOP<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">-- return column dependencies   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">RETURN<\/span><span style=\"color: #D4D4D4\"> v_coldep_l;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\"> process_view;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">END<\/span><span style=\"color: #D4D4D4\"> coldep_pkg;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Below you find the XML parser output of the query defined in the view GROSS_MARGINS. The model becomes quite clear, even if I could not find a schema description.<\/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(3 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">9) XML Result<\/span><span role=\"button\" tabindex=\"0\" data-code=\"<QUERY&gt;\n  <WITH&gt;\n    <WITH_ITEM&gt;\n      <QUERY_ALIAS&gt;GM<\/QUERY_ALIAS&gt;\n      <QUERY&gt;\n        <SELECT&gt;\n          <SELECT_LIST&gt;\n            <SELECT_LIST_ITEM&gt;\n              <COLUMN_REF&gt;\n                <COLUMN&gt;TIME_ID<\/COLUMN&gt;\n              <\/COLUMN_REF&gt;\n            <\/SELECT_LIST_ITEM&gt;\n            <SELECT_LIST_ITEM&gt;\n              <COLUMN_REF&gt;\n                <COLUMN&gt;REVENUE<\/COLUMN&gt;\n              <\/COLUMN_REF&gt;\n            <\/SELECT_LIST_ITEM&gt;\n            <SELECT_LIST_ITEM&gt;\n              <SUB&gt;\n                <COLUMN_REF&gt;\n                  <COLUMN&gt;REVENUE<\/COLUMN&gt;\n                <\/COLUMN_REF&gt;\n                <COLUMN_REF&gt;\n                  <COLUMN&gt;COST<\/COLUMN&gt;\n                <\/COLUMN_REF&gt;\n              <\/SUB&gt;\n              <COLUMN_ALIAS&gt;GROSS_MARGIN<\/COLUMN_ALIAS&gt;\n            <\/SELECT_LIST_ITEM&gt;\n          <\/SELECT_LIST&gt;\n        <\/SELECT&gt;\n        <FROM&gt;\n          <FROM_ITEM&gt;\n            <QUERY&gt;\n              <SELECT&gt;\n                <SELECT_LIST&gt;\n                  <SELECT_LIST_ITEM&gt;\n                    <COLUMN_REF&gt;\n                      <TABLE&gt;PROFITS<\/TABLE&gt;\n                      <COLUMN&gt;TIME_ID<\/COLUMN&gt;\n                    <\/COLUMN_REF&gt;\n                  <\/SELECT_LIST_ITEM&gt;\n                  <SELECT_LIST_ITEM&gt;\n                    <MUL&gt;\n                      <COLUMN_REF&gt;\n                        <TABLE&gt;PROFITS<\/TABLE&gt;\n                        <COLUMN&gt;UNIT_PRICE<\/COLUMN&gt;\n                      <\/COLUMN_REF&gt;\n                      <COLUMN_REF&gt;\n                        <TABLE&gt;PROFITS<\/TABLE&gt;\n                        <COLUMN&gt;QUANTITY_SOLD<\/COLUMN&gt;\n                      <\/COLUMN_REF&gt;\n                    <\/MUL&gt;\n                    <COLUMN_ALIAS&gt;REVENUE<\/COLUMN_ALIAS&gt;\n                  <\/SELECT_LIST_ITEM&gt;\n                  <SELECT_LIST_ITEM&gt;\n                    <COLUMN_REF&gt;\n                      <TABLE&gt;PROFITS<\/TABLE&gt;\n                      <COLUMN&gt;TOTAL_COST<\/COLUMN&gt;\n                    <\/COLUMN_REF&gt;\n                    <COLUMN_ALIAS&gt;COST<\/COLUMN_ALIAS&gt;\n                  <\/SELECT_LIST_ITEM&gt;\n                <\/SELECT_LIST&gt;\n              <\/SELECT&gt;\n              <FROM&gt;\n                <FROM_ITEM&gt;\n                  <TABLE&gt;PROFITS<\/TABLE&gt;\n                <\/FROM_ITEM&gt;\n              <\/FROM&gt;\n            <\/QUERY&gt;\n          <\/FROM_ITEM&gt;\n        <\/FROM&gt;\n      <\/QUERY&gt;\n    <\/WITH_ITEM&gt;\n  <\/WITH&gt;\n  <SELECT&gt;\n    <SELECT_LIST&gt;\n      <SELECT_LIST_ITEM&gt;\n        <COLUMN_REF&gt;\n          <TABLE_ALIAS&gt;T<\/TABLE_ALIAS&gt;\n          <COLUMN&gt;FISCAL_YEAR<\/COLUMN&gt;\n        <\/COLUMN_REF&gt;\n      <\/SELECT_LIST_ITEM&gt;\n      <SELECT_LIST_ITEM&gt;\n        <SUM&gt;\n          <COLUMN_REF&gt;\n            <COLUMN&gt;REVENUE<\/COLUMN&gt;\n          <\/COLUMN_REF&gt;\n        <\/SUM&gt;\n        <COLUMN_ALIAS&gt;REVENUE<\/COLUMN_ALIAS&gt;\n      <\/SELECT_LIST_ITEM&gt;\n      <SELECT_LIST_ITEM&gt;\n        <SUM&gt;\n          <COLUMN_REF&gt;\n            <COLUMN&gt;GROSS_MARGIN<\/COLUMN&gt;\n          <\/COLUMN_REF&gt;\n        <\/SUM&gt;\n        <COLUMN_ALIAS&gt;GROSS_MARGIN<\/COLUMN_ALIAS&gt;\n      <\/SELECT_LIST_ITEM&gt;\n      <SELECT_LIST_ITEM&gt;\n        <ROUND&gt;\n          <DIV&gt;\n            <MUL&gt;\n              <LITERAL&gt;100<\/LITERAL&gt;\n              <SUM&gt;\n                <COLUMN_REF&gt;\n                  <COLUMN&gt;GROSS_MARGIN<\/COLUMN&gt;\n                <\/COLUMN_REF&gt;\n              <\/SUM&gt;\n            <\/MUL&gt;\n            <SUM&gt;\n              <COLUMN_REF&gt;\n                <COLUMN&gt;REVENUE<\/COLUMN&gt;\n              <\/COLUMN_REF&gt;\n            <\/SUM&gt;\n          <\/DIV&gt;\n          <LITERAL&gt;2<\/LITERAL&gt;\n        <\/ROUND&gt;\n        <COLUMN_ALIAS&gt;GROSS_MARGIN_PERCENT<\/COLUMN_ALIAS&gt;\n      <\/SELECT_LIST_ITEM&gt;\n    <\/SELECT_LIST&gt;\n  <\/SELECT&gt;\n  <FROM&gt;\n    <FROM_ITEM&gt;\n      <JOIN&gt;\n        <INNER\/&gt;\n        <JOIN_TABLE_1&gt;\n          <QUERY_ALIAS&gt;GM<\/QUERY_ALIAS&gt;\n        <\/JOIN_TABLE_1&gt;\n        <JOIN_TABLE_2&gt;\n          <TABLE&gt;TIMES<\/TABLE&gt;\n          <TABLE_ALIAS&gt;T<\/TABLE_ALIAS&gt;\n        <\/JOIN_TABLE_2&gt;\n        <ON&gt;\n          <EQ&gt;\n            <COLUMN_REF&gt;\n              <TABLE&gt;TIMES<\/TABLE&gt;\n              <TABLE_ALIAS&gt;T<\/TABLE_ALIAS&gt;\n              <COLUMN&gt;TIME_ID<\/COLUMN&gt;\n            <\/COLUMN_REF&gt;\n            <COLUMN_REF&gt;\n              <TABLE_ALIAS&gt;GM<\/TABLE_ALIAS&gt;\n              <COLUMN&gt;TIME_ID<\/COLUMN&gt;\n            <\/COLUMN_REF&gt;\n          <\/EQ&gt;\n        <\/ON&gt;\n      <\/JOIN&gt;\n    <\/FROM_ITEM&gt;\n  <\/FROM&gt;\n  <GROUP_BY&gt;\n    <EXPRESSION_LIST&gt;\n      <EXPRESSION_LIST_ITEM&gt;\n        <COLUMN_REF&gt;\n          <TABLE_ALIAS&gt;T<\/TABLE_ALIAS&gt;\n          <COLUMN&gt;FISCAL_YEAR<\/COLUMN&gt;\n        <\/COLUMN_REF&gt;\n      <\/EXPRESSION_LIST_ITEM&gt;\n    <\/EXPRESSION_LIST&gt;\n  <\/GROUP_BY&gt;\n  <ORDER_BY&gt;\n    <ORDER_BY_LIST&gt;\n      <ORDER_BY_LIST_ITEM&gt;\n        <COLUMN_REF&gt;\n          <TABLE_ALIAS&gt;T<\/TABLE_ALIAS&gt;\n          <COLUMN&gt;FISCAL_YEAR<\/COLUMN&gt;\n        <\/COLUMN_REF&gt;\n      <\/ORDER_BY_LIST_ITEM&gt;\n    <\/ORDER_BY_LIST&gt;\n  <\/ORDER_BY&gt;\n<\/QUERY&gt;\" 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: #808080\">&lt;<\/span><span style=\"color: #569CD6\">QUERY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">WITH<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">WITH_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">QUERY_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">GM<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">QUERY_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">QUERY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">TIME_ID<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">REVENUE<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SUB<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">REVENUE<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">COST<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SUB<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">GROSS_MARGIN<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">FROM_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">QUERY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">PROFITS<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">TIME_ID<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">MUL<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">PROFITS<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">UNIT_PRICE<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">PROFITS<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">QUANTITY_SOLD<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">MUL<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">REVENUE<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">PROFITS<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">TOTAL_COST<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">COST<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">FROM_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">PROFITS<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">FROM_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">QUERY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">FROM_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">QUERY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">WITH_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">WITH<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">T<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">FISCAL_YEAR<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SUM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">REVENUE<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SUM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">REVENUE<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SUM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">GROSS_MARGIN<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SUM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">GROSS_MARGIN<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">ROUND<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">DIV<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">MUL<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">LITERAL<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">100<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">LITERAL<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SUM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">GROSS_MARGIN<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SUM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">MUL<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">SUM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">REVENUE<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SUM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">DIV<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">LITERAL<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">2<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">LITERAL<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">ROUND<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">GROSS_MARGIN_PERCENT<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">FROM_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">JOIN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">INNER<\/span><span style=\"color: #808080\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">JOIN_TABLE_1<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">QUERY_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">GM<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">QUERY_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">JOIN_TABLE_1<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">JOIN_TABLE_2<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">TIMES<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">T<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">JOIN_TABLE_2<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">ON<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">EQ<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">TIMES<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">T<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">TIME_ID<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">GM<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">TIME_ID<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">EQ<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">ON<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">JOIN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">FROM_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">GROUP_BY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">EXPRESSION_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">EXPRESSION_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">T<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">FISCAL_YEAR<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">EXPRESSION_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">EXPRESSION_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">GROUP_BY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">ORDER_BY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">ORDER_BY_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">ORDER_BY_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">T<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">TABLE_ALIAS<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #808080\">&lt;<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><span style=\"color: #D4D4D4\">FISCAL_YEAR<\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">COLUMN_REF<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">ORDER_BY_LIST_ITEM<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">ORDER_BY_LIST<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">ORDER_BY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #808080\">&lt;\/<\/span><span style=\"color: #569CD6\">QUERY<\/span><span style=\"color: #808080\">&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Please note that UTL_XML.PARSEQUERY is suited for extended query dependency analysis only. DML may be parsed, but the resulting model is incomplete with 11.2.0.2 (e.g. clauses missing in the select statement are not included in the model, like the SET clause in an update statement). If you need to analyze PL\/SQL beyond PL\/Scope you still may need a 3<sup>rd<\/sup> party parser.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Last week I had a talk at Oracle&#8217;s OpenWorld 2011 titled Modern PL\/SQL Code Checking and Dependency Analysis. The problem I described in chapter 4 was to find all view columns using the column UNIT_COST of the table COSTS in the SH schema. Other usages of this column (e.g. in where or<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":750,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[86,13,85],"class_list":["post-117","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","tag-code-analysis","tag-plsql","tag-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using UTL_XML.PARSEQUERY for SQL Dependency Analysis - 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\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis - Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"Last week I had a talk at Oracle&#8217;s OpenWorld 2011 titled Modern PL\/SQL Code Checking and Dependency Analysis. The problem I described in chapter 4 was to find all view columns using the column UNIT_COST of the table COSTS in the SH schema. Other usages of this column (e.g. in where or [\u2026]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/\" \/>\n<meta property=\"og:site_name\" content=\"Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2011-10-11T23:51:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-08T18:49:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/edd\/2013\/08\/tvdca_scope.png\" \/>\n\t<meta property=\"og:image:width\" content=\"963\" \/>\n\t<meta property=\"og:image:height\" content=\"437\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/\"},\"author\":{\"name\":\"Philipp Salvisberg\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"headline\":\"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis\",\"datePublished\":\"2011-10-11T23:51:00+00:00\",\"dateModified\":\"2023-11-08T18:49:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/\"},\"wordCount\":560,\"commentCount\":9,\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/edd\\\/2013\\\/08\\\/tvdca_scope.png\",\"keywords\":[\"Code Analysis\",\"PL\\\/SQL\",\"SQL\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/\",\"name\":\"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis - Philipp Salvisberg&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/edd\\\/2013\\\/08\\\/tvdca_scope.png\",\"datePublished\":\"2011-10-11T23:51:00+00:00\",\"dateModified\":\"2023-11-08T18:49:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/edd\\\/2013\\\/08\\\/tvdca_scope.png\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/edd\\\/2013\\\/08\\\/tvdca_scope.png\",\"width\":963,\"height\":437},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2011\\\/10\\\/12\\\/using-utl_xml-parsequery-for-sql-dependency-analysis\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis\"}]},{\"@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":"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis - 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\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/","og_locale":"en_US","og_type":"article","og_title":"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis - Philipp Salvisberg&#039;s Blog","og_description":"Last week I had a talk at Oracle&#8217;s OpenWorld 2011 titled Modern PL\/SQL Code Checking and Dependency Analysis. The problem I described in chapter 4 was to find all view columns using the column UNIT_COST of the table COSTS in the SH schema. Other usages of this column (e.g. in where or [\u2026]","og_url":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/","og_site_name":"Philipp Salvisberg&#039;s Blog","article_published_time":"2011-10-11T23:51:00+00:00","article_modified_time":"2023-11-08T18:49:38+00:00","og_image":[{"width":963,"height":437,"url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/edd\/2013\/08\/tvdca_scope.png","type":"image\/png"}],"author":"Philipp Salvisberg","twitter_card":"summary_large_image","twitter_creator":"@phsalvisberg","twitter_site":"@phsalvisberg","twitter_misc":{"Written by":"Philipp Salvisberg","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/#article","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/"},"author":{"name":"Philipp Salvisberg","@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"headline":"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis","datePublished":"2011-10-11T23:51:00+00:00","dateModified":"2023-11-08T18:49:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/"},"wordCount":560,"commentCount":9,"publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/edd\/2013\/08\/tvdca_scope.png","keywords":["Code Analysis","PL\/SQL","SQL"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/","url":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/","name":"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis - Philipp Salvisberg&#039;s Blog","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/#primaryimage"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/edd\/2013\/08\/tvdca_scope.png","datePublished":"2011-10-11T23:51:00+00:00","dateModified":"2023-11-08T18:49:38+00:00","breadcrumb":{"@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/#primaryimage","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/edd\/2013\/08\/tvdca_scope.png","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/edd\/2013\/08\/tvdca_scope.png","width":963,"height":437},{"@type":"BreadcrumbList","@id":"https:\/\/www.salvis.com\/blog\/2011\/10\/12\/using-utl_xml-parsequery-for-sql-dependency-analysis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.salvis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using UTL_XML.PARSEQUERY for SQL Dependency Analysis"}]},{"@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\/117","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=117"}],"version-history":[{"count":6,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/117\/revisions"}],"predecessor-version":[{"id":12746,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/117\/revisions\/12746"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media\/750"}],"wp:attachment":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media?parent=117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/categories?post=117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/tags?post=117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}