Как получить SQL, используемый для создания представления в Oracle?

В Oracle для получения SQL, используемого для создания функции, пакета и т.д., Можно запросить представление user_source. Однако представления не включаются в это представление и не существуют в базовом sys.source$. Чтобы получить доступ к тексту представлений, можно использовать столбец user_views.text, но это не совсем так, потому что Oracle переписывает некоторые части запроса, например, выполняет глобальное расширение.

Как я могу получить SQL, использованный для создания представления, в точности так, как оно было введено, без расширения глобуса?

Ответ 1

Я думаю, что исходный текст потерян:

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. Интересно, но для материализованных представлений сохраняется оригинальный текст.

Ответ 2

Вы можете использовать следующий запрос:

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS;

или вы можете использовать ALL_VIEWS, как в

SELECT VIEW_NAME, TEXT 
FROM ALL_VIEWS;

Рекомендации:

ALL_VIEWS в Oracle® Database Reference

Ответ 3

Я использую 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 в окне результатов запроса (многие люди создали утилиты для преобразования скреплений).

Большинство инструментов SQL IDE имеют некоторый механизм просмотра DDL, хотя DBMS_METADATA засеяна функциональностью базы данных Oracle (для этого не требуется какой-то фантастический, дорогостоящий инструмент).

Ответ 4

Я думаю, что в качестве разработчика интерес представляет собой "выбор", который делает его действительным и исполняемым, а самый простой способ редактирования представления - использовать другое приложение, например, pl/sql Developer или TOAD.

редактирование любого объекта в базе данных оракула текстовым редактором, так как sqlplus.exe занимает много времени для простых задач, и это способ головной боли.

enter image description here

Ответ 5

Вы можете использовать представления словаря данных (V $SQL, V $SQLTEXT), чтобы увидеть введенный SQL.

См. этот связанный вопрос.