首页 > 解决方案 > 使用 oracle toad 获取 Oracle 查看代码信息

问题描述

我想在查询窗口本身中查看预先存在的视图的代码,而无需进入模式浏览器或直接进入该对象。如何在 Oracle TOAD 中查看查看代码?

我们可以看到在 SQL Server 中使用以下脚本

sp_helptext 'viewname'

在甲骨文我试过如下

select * from USER_SOURCE where Name ='viewname'

但它没有给出视图名称代码信息。如何在 Oracle 中完成这项任务?

标签: oracleoracle11gtoad

解决方案


例子:

SQL> create or replace view v_emp
  2  as
  3  select d.deptno,
  4         d.dname,
  5         e.empno,
  6         e.ename,
  7         e.job,
  8         e.sal
  9  from emp e join dept d
 10    on e.deptno = d.deptno
 11  where d.deptno <> 30;

View created.

您正在查询USER_SOURCE,但该视图不包含视图 - 请USER_VIEWS改为检查。与您的查询类似,查询不返回任何内容:

SQL> select text
  2  from user_views
  3  where view_name = 'v_emp';

no rows selected

为什么没有选择行因为默认情况下 Oracle 以大写形式存储对象名称,除非您将名称括在双引号中,但是 - 在 Oracle 中 - 这通常是一个坏主意,因为您总是必须用双引号引用对象,匹配字母大小写。默认情况下,您可以以任何您想要的方式引用它们。

所以:

SQL> select text
  2  from user_views
  3  where view_name = 'V_EMP';        --> note uppercase here

TEXT
----------------------------------------------------------------
select d.deptno,
       d.dname,
       e.empno,
       e.ename,
       e.job,



SQL>

但是,嘿!部分代码丢失!不过,那是SQL Plus。由于视图文本存储到LONG数据类型列中:

SQL> desc user_views
 Name                          Null?    Type
 ----------------------------- -------- --------------------
 VIEW_NAME                     NOT NULL VARCHAR2(30)
 TEXT_LENGTH                            NUMBER
 TEXT                                   LONG           --> here it is
 TYPE_TEXT_LENGTH                       NUMBER 
 <snip>

你会

SQL> set long 10000
SQL> select text
  2  from user_views
  3  where view_name = 'V_EMP';

TEXT
----------------------------------------------------------------
select d.deptno,
       d.dname,
       e.empno,
       e.ename,
       e.job,
       e.sal
from emp e join dept d
  on e.deptno = d.deptno
where d.deptno <> 30


SQL>

并查看整个视图代码。


TOAD中,结果是一WIDEMEMO列,因此您必须双击它才能查看结果(不使用SET LONG命令;它仅与 SQL*Plus 相关)。


推荐阅读