任何对视图的查询,Oracle都实际上转换为SQL语句的查询  我的问题是 oracle提供查看转化后的sql语句 的方法吗?
例如 有如下创建视图语句
CREATE VIEW v
AS 
SELECT * 
FROM emp
WHERE sal>=500 AND sal<=5000进行如下查询
SELECT * 
FROM v我知道 dbms 实际上是转化为 如下slq 语句执行的
SELECT *
FROM emp
WHERE sal>=500 AND sal<=5000问题就是 如何 查看到 转化后的这段代码
我主要是想看看一些复杂的 视图 oracle是如何转化的

解决方案 »

  1.   


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

  2.   


    select text from user_views where view_name='视图名大写'
      

  3.   

    SQL> create view view_emp
      2  as
      3  select * from scott.emp
      4  where 1=0;View createdSQL> set long 2000;
    SQL> select dbms_metadata.get_ddl('VIEW','VIEW_EMP') from dual;DBMS_METADATA.GET_DDL('VIEW','
    --------------------------------------------------------------------------------  CREATE OR REPLACE FORCE VIEW "YEEXUN"."VIEW_EMP" ("EMPNO", "ENAME", "JOB", "MG
      select "EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO" from scott
    where 1=0
      

  4.   


    Connected as SYS
    SQL> set long 20000;
    SQL> set pagesize 100;
    SQL> set linesize 100;
    SQL> select dbms_metadata.get_ddl('VIEW','ALL_VIEWS') from dual;DBMS_METADATA.GET_DDL('VIEW','
    --------------------------------------------------------------------------------  CREATE OR REPLACE FORCE VIEW "SYS"."ALL_VIEWS" ("OWNER", "VIEW_NAME", "TEXT_LE
      select u.name, o.name, v.textlength, v.text, t.typetextlength, t.typetext,
           t.oidtextlength, t.oidtext, t.typeowner, t.typename,
           decode(bitand(v.property, 134217728), 134217728,
                  (select sv.name from superobj$ h, obj$ sv
                  where h.subobj# = o.obj# and h.superobj# = sv.obj#), null)
    from sys.obj$ o, sys.view$ v, sys.user$ u, sys.typed_view$ t
    where o.obj# = v.obj#
      and o.obj# = t.obj#(+)
      and o.owner# = u.user#
      and (o.owner# = userenv('SCHEMAID')
           or o.obj# in
                (select oa.obj#
                 from sys.objauth$ oa
                 where oa.grantee# in ( select kzsrorol
                                             from x$kzsro
                                      )
                )
            or /* user has system privileges */
              exists (select null from v$enabledprivs
                      where priv_number in (-45 /* LOCK ANY TABLE */,
                                            -47 /* SELECT ANY TABLE */,
                                            -48 /* INSERT ANY TABLE */,
                                            -49 /* UPDATE ANY TABLE */,
                                            -50 /* DELETE ANY TABLE */)
                      )
          )SQL> 
      

  5.   

    楼上的
    无论是  select dbms_metadata.get_ddl('VIEW','ALL_VIEWS') from dual;
    还是select text from user_views where view_name='视图名大写'  
     都只是一些查看视图定义的方法 
    实际上我的意思是
    那比如我做了 update 视图操作
    我要查看 oracle是如何将update 语句和 我定义的视图 结合起来 
    这要怎么办?
      

  6.   


    /*
    你说的叫可更新视图,
    关于视图更新:就是将你更新视图的语句转化为具体的update table语句,
    这与你定义的view有关,
    你查看到了create view语法,你不就明白了oracle是怎么样更新视图的了?
    具体很多细节,从create view中都能看到,你看到了吗?
    不过,不过大多数情况下,视图是不允许更新的。
    */
      

  7.   

    有一个视图叫 v$fixed_view_definition .明天再试行不行。。