Oracle 视图view

在我看来,oracle的视图就是用于将多个表的关联查询结果映射成【临时表】,视图与系统表中的数据是实时对应的。

我们可以像操作表的查询一样来操作视图查询。

视图写法:

CREATE OR REPLACE FORCE VIEW  V_TEM
(
   ID,
   NAME
)
AS
   SELECT ID,NAME FROM TABLE

项目中的一个案例,将一个自关联的结构表(行转多列)体现组织结构:市-区县-网格-乡镇-渠道

用到的知识点:

1、SYS_CONNECT_BY_PATH(字段,间隔符)    示例:SYS_CONNECT_BY_PATH(ID, ‘|‘)

2、SUBSTR()

3、INSTR()

备注:两函数对待字符串的位置的索引是从1开始的(填写0和1都是代表从第1个位置开始)

sql代码:

DROP VIEW TLS.V_CHANNEL_PATH;

CREATE OR REPLACE FORCE VIEW TLS.V_CHANNEL_PATH
(
   ID,
   PARENT_ID,
   NAME,
   ID_LEVEL,
   TYPE,
   IN_USE,
   STATUS_TIME,
   LEVEL_ID,
   BANK_NAME,
   ACCOUNT_NAME,
   ACCOUNT_NO,
   GROUP_ID,
   CLASS,
   CHANNEL_TEL,
   QX_CHANNEL_ID,
   PQ_CHANNEL_ID,
   XZ_CHANNEL_ID,
   QX_CHANNEL_NAME,
   PQ_CHANNEL_NAME,
   XZ_CHANNEL_NAME
)
AS
   SELECT ID,
          a.parent_id,
          NAME,
          id_level,
          TYPE,
          in_use,
          status_time,
          level_id,
          bank_name,
          account_name,
          account_no,
          GROUP_ID,
          CLASS,
          channel_tel,
          SUBSTR (a.path_id,
                    INSTR (path_id,
                           ‘|‘,
                           1,
                           1)
                  + 1,
                    INSTR (path_id,
                           ‘|‘,
                           1,
                           2)
                  - INSTR (path_id,
                           ‘|‘,
                           1,
                           1)
                  - 1)
             qx_channel_id,
          SUBSTR (a.path_id,
                    INSTR (path_id,
                           ‘|‘,
                           1,
                           2)
                  + 1,
                    INSTR (path_id,
                           ‘|‘,
                           1,
                           3)
                  - INSTR (path_id,
                           ‘|‘,
                           1,
                           2)
                  - 1)
             pq_channel_id,
          SUBSTR (a.path_id,
                    INSTR (path_id,
                           ‘|‘,
                           1,
                           3)
                  + 1,
                    INSTR (path_id,
                           ‘|‘,
                           1,
                           4)
                  - INSTR (path_id,
                           ‘|‘,
                           1,
                           3)
                  - 1)
             xz_channel_id,
          SUBSTR (a.path_name,
                    INSTR (path_name,
                           ‘|‘,
                           1,
                           1)
                  + 1,
                    INSTR (path_name,
                           ‘|‘,
                           1,
                           2)
                  - INSTR (path_name,
                           ‘|‘,
                           1,
                           1)
                  - 1)
             qx_channel_name,
          SUBSTR (a.path_name,
                    INSTR (path_name,
                           ‘|‘,
                           1,
                           2)
                  + 1,
                    INSTR (path_name,
                           ‘|‘,
                           1,
                           3)
                  - INSTR (path_name,
                           ‘|‘,
                           1,
                           2)
                  - 1)
             pq_channel_name,
          SUBSTR (a.path_name,
                    INSTR (path_name,
                           ‘|‘,
                           1,
                           3)
                  + 1,
                    INSTR (path_name,
                           ‘|‘,
                           1,
                           4)
                  - INSTR (path_name,
                           ‘|‘,
                           1,
                           3)
                  - 1)
             xz_channel_name
     FROM (    SELECT a.*,
                      SUBSTR (SYS_CONNECT_BY_PATH (ID, ‘|‘), 2) || ‘|‘ path_id,
                      SUBSTR (SYS_CONNECT_BY_PATH (NAME, ‘|‘), 2) || ‘|‘
                         path_name
                 FROM tl_channel a
           START WITH ID = 1
           CONNECT BY PRIOR ID = parent_id) a;

时间: 2024-10-07 05:06:38

Oracle 视图view的相关文章

Oralce 视图 view

Oracle视图 Oracle的数据库对象分为五种:表,视图,序列,索引和同义词. 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表. 视图是存储在数据字典里的一条select语句.通过创建视图可以提取数据的逻辑上的集合或组合. 视图的优点: 1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分. 2.用户通过简单的查询可以从复杂查询中得到结果. 3.维护数据的独立性,试图可从多个表检索数据. 4.对于相同的数据可产生

Oracle Materialized View refresh

简述 Materialized views - 物化视图 - 简称 MV,是已经被存储的或者说被物化-'materialized' 成 schema对象的查询结果.其中查询的 'From' 子句可以给 table, view 和 materialized view命名.这些用来建立 MV的对象都可以被称为 主表-master tables (a replication term) 或者 具体表-detail tables (a data warehousing term). Refresh Pr

Oracle视图详解

转载自:http://blog.itpub.net/29785807/viewspace-1270120/ 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的.视图只有逻辑定义.每次使用的时候,只是重新执行SQL. 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中.那些用于产生视图的表叫做该视图的基表.一个视图也可以从另一个视图中产生. 视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中.通

oracle视图建主键

一个项目要求视图建主键,下面是一个例子 CREATE or replace VIEW SME_V_A....  (AGENTID,AGENTNAME,BUSYNUM,RESTNUM,RESTTIME,DEVICENONUM,DEVICENOSUM ,CONSTRAINT AGENTSTATIC_PK PRIMARY KEY (AGENTID) RELY DISABLE NOVALIDATE) AS SELECT A.AGENTID as AGENTID, ---座席编号 (SELECT B.OP

ORACLE视图添加备注

ORACLE视图添加备注 版权声明:本文为博主原创文章,未经博主允许不得转载. create or replace view oes_material_series_ref as select t.productgroup, o.idnrk materialcode, t.seriescode   from oes_park_priority t  inner join oms_hm_mtl_general_view v     on t.materialcode = v.material_co

Oracle 视图简单介绍

Oracle视图的种类 关系视图 关系视图:Oracle视图是作为数据库对象存在的,因此,创建之后也可以通过工具或数据字典来查看视图的相关信息.这是大家常用的视图 如:create view 视图名称 as 查询语句|关系运算 http://blog.csdn.net/tianlesoftware/article/details/5530618 内嵌视图 内嵌视图:在from语句中的可以把表改成一个子查询,如:select a.id ,b.id from emp a,(select id fro

Android编程动态创建视图View的方法

在Android开 发中,在Activity中关联视图View是一般使用setContentView方法,该方法一种参数是使用XML资源直接创 建:setContentView (int layoutResID),指定layout中的一个XML的ID即可,这种方法简单.另一个方法是 setContentView(android.view.View),参数是指定一个视图View对象,这种方法可以使用自定义的视图类. 在一些场合中,需要对View进行一些定制处理,比如获取到Canvas进行图像绘制,

使用RazorGenerator对视图View进行单元测试

在ASP.NET MVC里我们可以很方便的对模型Model.控制器Controller进行单元测试,但对于 视图View的测试就没那么容易和直接了.在这里介绍一种方法,使用RazorGenerator对View进行 单元测试. 废话不多说,直接上图.主要方法和步骤如下: 1.创建ASP.NET MVC 项目和相应的测试项目. 2.在Web项目中nuget添加包:RazorGenerator.MsBuild. 3.在测试项目中nuget添加包:RazorGenerator.Testing:添加包

Oracle视图

创建视图,把emp表sal<1000的雇员,映射到该视图( view) create or replace view myview as select * from tb_Employee where sal<1000 with read only constraint; 为了简化操作,用视图解决,显示雇员雇员号,姓名和部门名称 create view myview2 as select tb_Employee.empno,tb_Employee.ename,tb_Department.dna