[英]How to retrieve the SQL used to create a view in Oracle?
在Oracle中,要檢索用於創建Function,Package等的SQL,可以查詢user_source視圖。 但是,視圖不包含在此視圖中 - 它們也不存在於基礎sys.source$
。 要訪問視圖文本,可以使用user_views.text
列,但這並不准確,因為Oracle會重寫部分查詢,例如它會進行全局擴展。
如何在沒有全局擴展的情況下檢索用於創建視圖的SQL,與輸入完全一樣?
您可以使用以下查詢:
SELECT VIEW_NAME, TEXT
FROM USER_VIEWS;
或者您可以使用ALL_VIEWS,如
SELECT VIEW_NAME, TEXT
FROM ALL_VIEWS;
參考文獻 :
我使用dbms_metadata.get_ddl如下:
select
dbms_metadata.get_ddl('VIEW', 'VIEW_NAME', 'VIEW_OWNER')
from
dual;
以下是參數:
DBMS_METADATA.GET_DDL (
object_type IN VARCHAR2,
name IN VARCHAR2,
schema IN VARCHAR2 DEFAULT NULL,
version IN VARCHAR2 DEFAULT 'COMPATIBLE',
model IN VARCHAR2 DEFAULT 'ORACLE',
transform IN VARCHAR2 DEFAULT 'DDL')
RETURN CLOB;
它有一個公共同義詞。 對於非用戶擁有的對象,可以獲得系統特權SELECT_CATALOG_ROLE,並且可以查看所有對象的所有DDL。
在Oracle SQL Developer中,可以在查詢結果窗口中看到clob(許多人也創建了用於轉換clob的實用程序)。
大多數SQL IDE工具都有一些DDL查看機制,雖然DBMS_METADATA是種子Oracle數據庫功能(一個不需要一些花哨,昂貴的工具)。
我認為原文丟失了:
create table t1(id number)
/
create view t1_vw as select * from t1
/
alter table t1 add val varchar2(20)
/
alter view t1_vw compile
/
select * from t1_vw
/
將僅返回id列。 有趣,但對於物化視圖,保留原始文本。
我認為作為開發人員,視圖的興趣是使其有效且可運行的“選擇”,編輯視圖的最簡單方法是使用另一個應用程序,如pl / sql Developer或TOAD。
通過文本編輯器編輯oracle數據庫中的任何對象,就像sqlplus.exe需要很長時間來完成簡單的任務一樣,這是一個令人頭痛的方法。
您可以使用數據字典視圖(V $ SQL,V $ SQLTEXT)來查看輸入的實際SQL。
請看相關問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.