 <ol> <li><p>Get the query text of your view.</p> <pre><code>SELECT text FROM dba_views WHERE owner = 'the-owner' AND view_name = 'the-view-name'; </code></pre></li> <li><p>Parse. Search for view names within the query text.</p></li> <li><p>Get the query text for each view name found. (see item 1.)</p></li> <li><p>Replace each view name in the query with the related query text.</p></li> <li><p>Do this recursively until there are no more views found.</p></li> </ol> <p>Easy?</p> <p><strong>EDIT:</strong> The above instructions do not do everything required. Thinking about this a little more it gets hairy, grows legs, and maybe another arm. Finding column names, and column names that might be elaborate functions and subqueries. Bringing it all back together with the joins and clauses. The resulting query might look very ugly.</p> <p>Somewhere within Oracle there may be something that is actually unwrapping a view. I don't know. I am glad I didn't use views that much in Oracle.</p>