簡體   English   中英

如何檢索用於在Oracle中創建視圖的SQL?

[英]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;

參考文獻

Oracle®數據庫參考上的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM