web-dev-qa-db-fra.com

Comment récupérer le SQL utilisé pour créer une vue dans Oracle?

Dans Oracle, pour récupérer le code SQL utilisé pour créer une fonction, un package, etc., la vue source_utilisateur peut être interrogée. Cependant, les vues ne sont pas incluses dans cette vue - elles n'existent pas non plus dans le sys.source$ sous-jacent. Pour accéder au texte des vues, vous pouvez utiliser la colonne user_views.text, mais ce n'est pas exact car Oracle réécrira certaines parties de la requête, par exemple, il effectuera une expansion globale.

Comment puis-je récupérer le SQL utilisé pour créer une vue, exactement tel qu'il a été entré, sans expansion globale?

12
Andrew

Je pense que le texte original est perdu:

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
/

renverra uniquement la colonne id . Intéressant, mais pour les vues matérialisées, le texte original est conservé.

1
vav

Vous pouvez utiliser la requête suivante:

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS;

ou vous pouvez utiliser ALL_VIEWS, comme dans

SELECT VIEW_NAME, TEXT 
FROM ALL_VIEWS;

Références:

ALL_VIEWS sur Oracle® Database Reference

12
Joseph B

J'utilise dbms_metadata.get_ddl comme suit: 

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

Voici le paramètre:

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;

Il a un synonyme public. Pour les objets n'appartenant pas à l'utilisateur, on peut obtenir le privilège système SELECT_CATALOG_ROLE et voir tous les DDL pour tous les objets.

Dans Oracle SQL Developer, vous pouvez voir le clob dans la fenêtre des résultats de la requête (de nombreuses personnes ont également créé des utilitaires pour transformer les clobs).

La plupart des outils SQL IDE disposent d’un mécanisme d’affichage DDL, bien que DBMS_METADATA soit une fonctionnalité de base de données Oracle intégrée (l’un n’a pas besoin d’un outil coûteux et sophistiqué).

2
Patrick Bacon

Vous pouvez utiliser les vues du dictionnaire de données (V $ SQL, V $ SQLTEXT) pour voir le SQL saisi.

Veuillez consulter cette question connexe .

0
Joseph B

Je pense qu'en tant que développeur, l'intérêt de la vue est la "sélection" qui la rend valide et exécutable, et le moyen le plus simple de modifier une vue consiste à utiliser une autre application comme pl/sql Developer ou TOAD.

éditer un objet dans la base de données Oracle uniquement à l'aide d'un éditeur de texte, comme sqlplus.exe, prend beaucoup de temps pour effectuer des tâches simples, ce qui est très commode.

enter image description here

0
Eng. Samer T