任何对视图的查询,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是如何转化的
例如 有如下创建视图语句
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是如何转化的
select dbms_metadata.get_ddl('VIEW','V') from dual;
select text from user_views where view_name='视图名大写'
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
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>
无论是 select dbms_metadata.get_ddl('VIEW','ALL_VIEWS') from dual;
还是select text from user_views where view_name='视图名大写'
都只是一些查看视图定义的方法
实际上我的意思是
那比如我做了 update 视图操作
我要查看 oracle是如何将update 语句和 我定义的视图 结合起来
这要怎么办?
/*
你说的叫可更新视图,
关于视图更新:就是将你更新视图的语句转化为具体的update table语句,
这与你定义的view有关,
你查看到了create view语法,你不就明白了oracle是怎么样更新视图的了?
具体很多细节,从create view中都能看到,你看到了吗?
不过,不过大多数情况下,视图是不允许更新的。
*/