{"id":2012,"date":"2022-05-23T00:09:37","date_gmt":"2022-05-23T05:09:37","guid":{"rendered":"https:\/\/www.dpriver.com\/blog\/?p=2012"},"modified":"2022-05-23T00:09:37","modified_gmt":"2022-05-23T05:09:37","slug":"how-to-get-data-lineage-by-analyzing-oracles-sql-statements","status":"publish","type":"post","link":"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/","title":{"rendered":"How to Get Data Lineage by Analyzing Oracle&#8217;s SQL Statements and Stored Procedures?"},"content":{"rendered":"<p>An important foundational work in <strong><a href=\"https:\/\/medium.com\/@han.yu_47442\/introduction-to-data-lineage-data-governance-and-data-dictionary-use-cases-and-application-1b174c567f1c\">data governance<\/a><\/strong> is to analyze the <strong><a href=\"https:\/\/www.gudusoft.com\/whats-data-lineage-why-important\/\">data lineage<\/a><\/strong> in an organization.\u00a0With complete data lineage, we can use it for data traceability, table and column change impact analysis, data compliance certification, data quality inspection, and more. The main methods of analyzing data lineage are automatic parsing, system tracking, machine learning and manual collection.\u00a0Automatic parsing mainly refers to using tools to parse files such as SQL statements, stored procedures, and <strong><a href=\"https:\/\/www.gudusoft.com\/best-etl-tools\/\">ETL<\/a><\/strong>.\u00a0In this article, we&#8217;ll introduce <strong>how to get data lineage by analyzing Oracle&#8217;s SQL statements and stored procedures<\/strong>, so as to better conduct data governance.<\/p>\n<figure id=\"attachment_2023\" aria-describedby=\"caption-attachment-2023\" style=\"width: 759px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-2023\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/How_to_Get_Data_Lineage_by_Analyzing_Oracles_SQL_Statements_and_Stored_Procedures.png\" alt=\"How to Get Data Lineage by Analyzing Oracle's SQL Statements and Stored Procedures?\" width=\"759\" height=\"446\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/How_to_Get_Data_Lineage_by_Analyzing_Oracles_SQL_Statements_and_Stored_Procedures.png 759w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/How_to_Get_Data_Lineage_by_Analyzing_Oracles_SQL_Statements_and_Stored_Procedures-300x176.png 300w\" sizes=\"(max-width: 759px) 100vw, 759px\" \/><figcaption id=\"caption-attachment-2023\" class=\"wp-caption-text\">How to Get Data Lineage by Analyzing Oracle&#8217;s SQL Statements and Stored Procedures?<\/figcaption><\/figure>\n<h3>The SQL statements that generate the data lineages are as follows:<\/h3>\n<ul>\n<li>SELECT<\/li>\n<li>INSERT<\/li>\n<li>UPDATE<\/li>\n<li>MERGE<\/li>\n<li>CREATE VIEW<\/li>\n<li>CREATE TABLE<\/li>\n<li>STORED PROCEDURE<\/li>\n<\/ul>\n<h4>SELECT<\/h4>\n<p>You might be wondering, since the SELECT statement doesn&#8217;t add or modify data, how is data lineage generated?\u00a0The secret lies in the select list in the SELECT statement, where the data can be transformed.\u00a0Take the following SELECT statement as an example:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-2028 aligncenter\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/1-4.png\" alt=\"1\" width=\"758\" height=\"108\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/1-4.png 758w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/1-4-300x43.png 300w\" sizes=\"(max-width: 758px) 100vw, 758px\" \/><\/p>\n<p>We can see that the data for totalSal comes from emp.sal and emp.commission, where the data is transformed once.\u00a0This data lineage generated inside the SELECT is temporary, but when this SELECT statement is combined with CREATE VIEW or CREATE TABLE, this data lineage is truly formed.<\/p>\n<p><strong>E.g:<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-2033 aligncenter\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/2-2.png\" alt=\"2\" width=\"759\" height=\"189\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/2-2.png 759w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/2-2-300x75.png 300w\" sizes=\"(max-width: 759px) 100vw, 759px\" \/><\/p>\n<p>This CREATE VIEW statement forms the data lineage from emp.sal and emp.commission to v_sal.mySal via SELECT.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-2037 aligncenter\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/01-91.png\" alt=\"01-9(1)\" width=\"760\" height=\"244\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/01-91.png 760w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/01-91-300x96.png 300w\" sizes=\"(max-width: 760px) 100vw, 760px\" \/><\/p>\n<p>Therefore, we can see that analyzing the SELECT statement is the basis for the data lineage analysis of the SQL statement.\u00a0In general, it is relatively intuitive and simple to obtain data lineage by analyzing SQL statements, but the key to the problem is that the efficiency of manual analysis is too low. For such a large amount of SQL in the enterprise, manual analysis is almost impossible.<\/p>\n<h4>STORED PROCEDURE<\/h4>\n<p>Stored procedures can contain complex logic processing, such as conditional judgments, loop branches, etc.\u00a0Therefore, it is often used to complete tasks such as data extraction, transformation, loading, and cleaning.\u00a0Among them, a large number of data lineage are generated.\u00a0In order to better manage the data in the enterprise, it is essential to sort out the data lineage in the storage process.<\/p>\n<p>To analyze the data lineage in stored procedures, the cursor is a key factor, and the data flow is generally processed around the cursor.<\/p>\n<p>In the following Oracle PL\/SQL stored procedure, the cursor CURSOR cur_stclerk is first defined.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-2048 aligncenter\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/3-2.png\" alt=\"3\" width=\"758\" height=\"330\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/3-2.png 758w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/3-2-300x131.png 300w\" sizes=\"(max-width: 758px) 100vw, 758px\" \/><\/p>\n<p>Then through this cursor, use LOOP to insert data from the employees table into the tables emp_temp and emp_detls_temp.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-2050 aligncenter\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/4-2.png\" alt=\"4\" width=\"759\" height=\"789\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/4-2.png 759w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/4-2-289x300.png 289w\" sizes=\"(max-width: 759px) 100vw, 759px\" \/><\/p>\n<p>So we can establish a data lineage from the employees table to the tables emp_temp and emp_detls_temp.<\/p>\n<p>The complete PLSQL stored procedure is as follows\uff1a<\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-2053\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/5-2.png\" alt=\"5\" width=\"759\" height=\"515\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/5-2.png 759w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/5-2-300x204.png 300w\" sizes=\"(max-width: 759px) 100vw, 759px\" \/><\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-2054\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/6-2.png\" alt=\"6\" width=\"761\" height=\"903\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/6-2.png 761w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/6-2-253x300.png 253w\" sizes=\"(max-width: 761px) 100vw, 761px\" \/><\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-2055\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/7-1.png\" alt=\"7\" width=\"760\" height=\"137\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/7-1.png 760w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/7-1-300x54.png 300w\" sizes=\"(max-width: 760px) 100vw, 760px\" \/><\/p>\n<h3 style=\"text-align: left\">Automated data lineage analysis tools<\/h3>\n<p><strong><a href=\"https:\/\/sqlflow.gudusoft.com\/#\/\">SQLFlow<\/a><\/strong> supports analyzing SQL statements from more than 20 mainstream databases.\u00a0It supports bigquery, couchbase, dax, db2, greenplum, hana, hive, impala, informix, mdx, mysql, netezza, odbc, openedge, oracle, postgresql, redshift, snowflake, sparksql, sqlserver, sybase, teradata, vertica.<\/p>\n<p>It also supports analyzing stored procedures and dynamic SQL statements.<\/p>\n<h3>Analyze SQL statements through the UI<\/h3>\n<p>Through the UI of SQLFlow, the data lineage of a SQL can be quickly obtained, and the visual results can be obtained to help users quickly understand the data lineage in a SQL.<\/p>\n<h3>Analyze SQL data lineage through API<\/h3>\n<p>Sometimes, we need to store the data lineage obtained from the analysis as metadata in our own data governance platform and integrate it with other metadata.\u00a0At this time, we can use the <strong><a href=\"https:\/\/github.com\/sqlparser\/sqlflow_public\/tree\/master\/api\">Restful API<\/a><\/strong> provided by SQLFlow to automate the data lineage analysis using scripts such as shell and python.<\/p>\n<p>Here we use curl to show how to use API to access SQLFlow for data lineage analysis.<\/p>\n<ul>\n<li>Prepare the <strong><a href=\"https:\/\/www.sqlflow.cn\/mahayu-userid-secret-code\/\">userid and secret code<\/a><\/strong> required to connect to SQLFlow with the API<\/li>\n<li>Use userid and secret code to get token. Note that replace the corresponding parts of the command with your own userid and secret code.\u00a0<strong>curl -X POST &#8220;https:\/\/api.gudusoft.com\/gspLive_backend\/user\/generateToken&#8221; -H &#8220;Request-Origion:testClientDemo&#8221; -H &#8220;accept:application\/json;charset=utf-8&#8221; -H &#8220;Content-Type:application\/x-www-form-urlencoded;charset=UTF-8&#8221; -d &#8220;secretKey=YOUR SECRET KEY&#8221; -d &#8220;userId=YOUR USER ID HERE&#8221;<\/strong><\/li>\n<li>Submit the SQL statement to be analyzed to SQLFlow for analysis, and return the processing result. Note, replace the corresponding part of the command with your own userid and the token returned in the command above.<strong>\u00a0curl -X POST &#8220;https:\/\/api.gudusoft.com\/gspLive_backend\/sqlflow\/generation\/sqlflow?showRelationType=fdd&#8221; -H &#8220;Request-Origion:testClientDemo&#8221; -H &#8220;accept:application\/json;charset=utf-8&#8221; -H &#8220;Content-Type:multipart\/form-data&#8221; -F &#8220;sqlfile=&#8221; -F &#8220;dbvendor=dbvoracle&#8221; -F &#8220;ignoreRecordSet=true&#8221; -F &#8220;simpleOutput=false&#8221; -F &#8220;sqltext=create view v_sal(mySal) as select sal + commission as totalSal from emp;&#8221; -F &#8220;userId=YOUR USER ID HERE&#8221; -F &#8220;token=YOUR TOKEN HERE&#8221;<\/strong><\/li>\n<li>The returned json contains the following data lineages:\u00a0<strong>&#8220;relations&#8221;: [ { &#8220;id&#8221;: &#8220;3&#8221;, &#8220;type&#8221;: &#8220;fdd&#8221;, &#8220;effectType&#8221;: &#8220;create_view&#8221;, &#8220;target&#8221;: { &#8220;id&#8221;: &#8220;11&#8221;, &#8220;column&#8221;: &#8220;mySal&#8221;, &#8220;parentId&#8221;: &#8220;9&#8221;, &#8220;parentName&#8221;: &#8220;v_sal&#8221;, }, &#8220;sources&#8221;: [ { &#8220;id&#8221;: &#8220;3&#8221;, &#8220;column&#8221;: &#8220;sal&#8221;, &#8220;parentId&#8221;: &#8220;2&#8221;, &#8220;parentName&#8221;: &#8220;emp&#8221;, }, { &#8220;id&#8221;: &#8220;4&#8221;, &#8220;column&#8221;: &#8220;commission&#8221;, &#8220;parentId&#8221;: &#8220;2&#8221;, &#8220;parentName&#8221;: &#8220;emp&#8221;, } ], &#8220;processId&#8221;: &#8220;10&#8221; } ]<\/strong><\/li>\n<\/ul>\n<p>For more detailed information, see the official website:\u00a0<strong><a href=\"https:\/\/github.com\/sqlparser\/sqlflow_public\/tree\/master\/api\">SQLFlow Restful API<\/a><\/strong>.<\/p>\n<h3>Conclusion<\/h3>\n<p>This article introduces how to obtain data lineage by analyzing Oracle&#8217;s SQL statements and stored procedures, so as to better conduct data governance.\u00a0At the same time, it also introduces how to use the SQLFlow tool to automate the work of analyzing data lineage in SQL statements to improve the efficiency and level of data self-care.<\/p>\n<p>If you want to learn more about data lineage, we would like to advise you to visit <strong><a href=\"https:\/\/www.gudusoft.com\/\">Gudu SQLFlow<\/a><\/strong> for more information. As one of the <strong><a href=\"https:\/\/www.dpriver.com\/blog\/2022\/05\/11\/best-data-lineage-tools\/\">best data lineage tools<\/a><\/strong> on the market today, it can not only analyze SQL script files, obtain data lineage, and perform visual display, but also allow users to provide data lineage in CSV format and perform visual display.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An important foundational work in data governance is to analyze the data lineage in an organization.\u00a0With complete data lineage, we can use it for data traceability, table and column change impact analysis, data compliance certification, data quality inspection, and more. The main methods of analyzing data lineage are automatic parsing, system tracking, machine learning and manual collection.\u00a0Automatic parsing mainly refers to using tools to parse files such as SQL statements, stored procedures, and ETL.\u00a0In this article, we&#8217;ll introduce how to get data lineage by analyzing Oracle&#8217;s SQL statements and stored procedures, so as to better conduct data governance. The SQL\u2026<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[25,8],"tags":[31,41,26,27,29],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":5}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Get Data Lineage by Analyzing Oracle&#039;s SQL Statements and Stored Procedures?<\/title>\n<meta name=\"description\" content=\"How to Get Data Lineage by Analyzing Oracle&#039;s SQL Statements and Stored Procedures?\" \/>\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.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Get Data Lineage by Analyzing Oracle&#039;s SQL Statements and Stored Procedures?\" \/>\n<meta property=\"og:description\" content=\"How to Get Data Lineage by Analyzing Oracle&#039;s SQL Statements and Stored Procedures?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/\" \/>\n<meta property=\"og:site_name\" content=\"SQL and Data Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-23T05:09:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/How_to_Get_Data_Lineage_by_Analyzing_Oracles_SQL_Statements_and_Stored_Procedures.png\" \/>\n<meta name=\"author\" content=\"han yu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"han yu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\",\"name\":\"SQL and Data Blog\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"sameAs\":[],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"contentUrl\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"width\":251,\"height\":72,\"caption\":\"SQL and Data Blog\"},\"image\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"name\":\"SQL and Data Blog\",\"description\":\"SQL related blog for database professional\",\"publisher\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/\",\"name\":\"How to Get Data Lineage by Analyzing Oracle's SQL Statements and Stored Procedures?\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\"},\"datePublished\":\"2022-05-23T05:09:37+00:00\",\"dateModified\":\"2022-05-23T05:09:37+00:00\",\"description\":\"How to Get Data Lineage by Analyzing Oracle's SQL Statements and Stored Procedures?\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dpriver.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Get Data Lineage by Analyzing Oracle&#8217;s SQL Statements and Stored Procedures?\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/\"},\"author\":{\"name\":\"han yu\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/e8cef08dc9a534a547554f37fa63b130\"},\"headline\":\"How to Get Data Lineage by Analyzing Oracle&#8217;s SQL Statements and Stored Procedures?\",\"datePublished\":\"2022-05-23T05:09:37+00:00\",\"dateModified\":\"2022-05-23T05:09:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/\"},\"wordCount\":1000,\"publisher\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\"},\"keywords\":[\"Best Data Lineage Tools\",\"data governance\",\"data lineage\",\"Gudu SQLFlow\",\"SQLFlow\"],\"articleSection\":[\"sql\",\"SQL language\"],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/e8cef08dc9a534a547554f37fa63b130\",\"name\":\"han yu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/401910b33aed92b7ba8fb4415a22a935?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/401910b33aed92b7ba8fb4415a22a935?s=96&d=mm&r=g\",\"caption\":\"han yu\"},\"url\":\"https:\/\/www.dpriver.com\/blog\/author\/yuhan10080710229\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Get Data Lineage by Analyzing Oracle's SQL Statements and Stored Procedures?","description":"How to Get Data Lineage by Analyzing Oracle's SQL Statements and Stored Procedures?","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.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/","og_locale":"en_US","og_type":"article","og_title":"How to Get Data Lineage by Analyzing Oracle's SQL Statements and Stored Procedures?","og_description":"How to Get Data Lineage by Analyzing Oracle's SQL Statements and Stored Procedures?","og_url":"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/","og_site_name":"SQL and Data Blog","article_published_time":"2022-05-23T05:09:37+00:00","og_image":[{"url":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/05\/How_to_Get_Data_Lineage_by_Analyzing_Oracles_SQL_Statements_and_Stored_Procedures.png"}],"author":"han yu","twitter_card":"summary_large_image","twitter_misc":{"Written by":"han yu","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.dpriver.com\/blog\/#organization","name":"SQL and Data Blog","url":"https:\/\/www.dpriver.com\/blog\/","sameAs":[],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","contentUrl":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","width":251,"height":72,"caption":"SQL and Data Blog"},"image":{"@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/www.dpriver.com\/blog\/#website","url":"https:\/\/www.dpriver.com\/blog\/","name":"SQL and Data Blog","description":"SQL related blog for database professional","publisher":{"@id":"https:\/\/www.dpriver.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/","url":"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/","name":"How to Get Data Lineage by Analyzing Oracle's SQL Statements and Stored Procedures?","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/#website"},"datePublished":"2022-05-23T05:09:37+00:00","dateModified":"2022-05-23T05:09:37+00:00","description":"How to Get Data Lineage by Analyzing Oracle's SQL Statements and Stored Procedures?","breadcrumb":{"@id":"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dpriver.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Get Data Lineage by Analyzing Oracle&#8217;s SQL Statements and Stored Procedures?"}]},{"@type":"Article","@id":"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/#article","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/"},"author":{"name":"han yu","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/e8cef08dc9a534a547554f37fa63b130"},"headline":"How to Get Data Lineage by Analyzing Oracle&#8217;s SQL Statements and Stored Procedures?","datePublished":"2022-05-23T05:09:37+00:00","dateModified":"2022-05-23T05:09:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dpriver.com\/blog\/2022\/05\/how-to-get-data-lineage-by-analyzing-oracles-sql-statements\/"},"wordCount":1000,"publisher":{"@id":"https:\/\/www.dpriver.com\/blog\/#organization"},"keywords":["Best Data Lineage Tools","data governance","data lineage","Gudu SQLFlow","SQLFlow"],"articleSection":["sql","SQL language"],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/e8cef08dc9a534a547554f37fa63b130","name":"han yu","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/401910b33aed92b7ba8fb4415a22a935?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/401910b33aed92b7ba8fb4415a22a935?s=96&d=mm&r=g","caption":"han yu"},"url":"https:\/\/www.dpriver.com\/blog\/author\/yuhan10080710229\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/2012"}],"collection":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/comments?post=2012"}],"version-history":[{"count":40,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/2012\/revisions"}],"predecessor-version":[{"id":2061,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/2012\/revisions\/2061"}],"wp:attachment":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/media?parent=2012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/categories?post=2012"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/tags?post=2012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}