2014-04-25 12 views
7

W Oracle, aby pobrać SQL używany do tworzenia funkcji, pakietu itp., Można wyświetlić widok user_source. Jednak widoki nie są zawarte w tym widoku - ani nie istnieją w źródłowym sys.source $. Aby uzyskać dostęp do tekstu widoków, można użyć kolumny user_views.text, ale nie jest to dokładne, ponieważ Oracle ponownie napisze niektóre części zapytania, na przykład zrobi globalne rozszerzenie.(Jak) mogę odzyskać SQL używany do utworzenia widoku w Oracle?

Czy można odzyskać SQL używany do utworzenia widoku, dokładnie tak, jak został wprowadzony, bez rozszerzania globu?

+0

Co to jest "globalna ekspansja"? –

+1

@a_horse_with_no_name. . . W SQL, myślę, że odnosiłoby się do rozszerzenia '*', aby uwzględnić wszystkie kolumny. Terminologia pochodzi z używania symboli wieloznacznych na ścieżkach Unix. –

Odpowiedz

1

myślę oryginalny tekst jest stracone:

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 
/

powróci tylko kolumnę id. Interesujące, ale dla zmaterializowanych widoków oryginalny tekst jest zachowywany.

+0

Masz rację - wydaje mi się, że nie możesz tego zrobić.Twoja odpowiedź wskazuje również, że to, co próbowałem zrobić, i tak by nie zadziałało. Dzięki. – Andrew

+0

cóż, nadal można się domyślić, gdzie * było wcześniej. – vav

0

Wydaje mi się, że jako programista, zainteresowanie widokiem to "wybierz", które sprawiają, że jest ona ważna i możliwa do uruchomienia, a najprostszym sposobem edycji widoku jest użycie innej aplikacji, np. Pl/sql Developer lub TOAD.

edytowanie dowolnego obiektu w bazie danych Oracle za pomocą edytora tekstów tylko tak, jak program sqlplus.exe zajmuje dużo czasu dla prostych zadań, a jest to sposób na bóle głowy.

enter image description here

2

można użyć następującego zapytania:

SELECT VIEW_NAME, TEXT 
FROM USER_VIEWS; 

lub użyć ALL_VIEWS, jak w

SELECT VIEW_NAME, TEXT 
FROM ALL_VIEWS; 

Odniesienia:

ALL_VIEWS on Oracle® Database Reference

+3

Andrew wspomniał już o user_views w pytaniu. – vav

0

Możesz użyć widoków słownika danych (V $ SQL, V $ SQLTEXT), aby zobaczyć rzeczywisty wprowadzony SQL.

Patrz: this related question.

+0

Te widoki nie obejmują DDL, tylko DML - współużytkowany SQL. – Andrew

0

używam dbms_metadata.get_ddl następująco:

select 
dbms_metadata.get_ddl('VIEW', 'VIEW_NAME', 'VIEW_OWNER') 
from 
dual; 

Oto parametr:

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; 

Ma publiczny synonim. W przypadku obiektów, które nie są własnością użytkownika, można uzyskać uprawnienie systemowe SELECT_CATALOG_ROLE i można zobaczyć wszystkie obiekty DDL dla wszystkich obiektów.

W programie Oracle SQL Developer można zobaczyć klobek w oknie wyników zapytania (wiele osób utworzyło narzędzia do transformowania również tych elementów).

Większość narzędzi IDE SQL ma mechanizm przeglądania DDL, choć DBMS_METADATA jest rozsieganą funkcjonalnością bazy danych Oracle (nie potrzeba żadnego wymyślnego, drogiego narzędzia).

Powiązane problemy