视图、同义词

本章节主要介绍在 DM 数据库中视图和同义词的使用。

一、适用场景

软件 版本
操作系统 Redhat 7 及以上版本
DM 数据库 DM 8.0 及以上版本
CPU 架构 x86、ARM、龙芯、飞腾等国内外主流 CPU

二、操作方法

2.1 视图创建与使用

  • 对单表建立视图。进入 PURCHASING 模式,对 VENDOR 表创建一个视图,名为 VENDOR_EXCELLENT,保存信誉等级为 1 的供应商。如下所示:
--进入 PURCHASING 模式
SET SCHEMA PURCHASING;
--创建 VENDOR_EXCELLENT 视图
CREATE VIEW PURCHASING.VENDOR_EXCELLENT AS
SELECT VENDORID, ACCOUNTNO, NAME, ACTIVEFLAG, CREDIT
FROM PURCHASING.VENDOR
WHERE CREDIT = 1 WITH CHECK OPTION;

运行该语句,AS 后的查询语句并未执行,系统只是将所定义的 < 视图名 > 及 < 查询说明 > 送数据字典保存。对用户来说,就像在数据库中已经有 VENDOR_EXCELLENT 这样一个表。

对该视图进行查询,如下所示:

SELECT * FROM PURCHASING.VENDOR_EXCELLENT;

输出结果:

image.png

用户可以在该视图上进行数据库的查询、插入、删除、修改等操作。在建好的视图之上还可以再建立视图。如下所示:

//更新视图 VENDOR_EXCELLENT
update PURCHASING.VENDOR_EXCELLENT set NAME='文学出' where NAME='文学出版社';

对该视图进行查询,如下所示:

SELECT * FROM PURCHASING.VENDOR_EXCELLENT;

输出结果:

image.png

对单表进行查询,如下所示:

SELECT * FROM PURCHASING.VENDOR;

输出结果:

image.png

由于以上定义包含可选项 WITH CHECK OPTION,以后对该视图作插入、修改和删除操作时,系统均会自动用 WHERE 后的条件作检查,不满足条件的数据,则不能通过该视图更新相应基表中的数据。

  • 对多个表建立视图。进入 SALES 模式,构造一视图,名为 SALESPERSON_INFO,用来保存销售人员的信息。如下所示:
--进入 SALES 模式
SET SCHEMA SALES;
--创建 SALESPERSON_INFO 视图
CREATE VIEW SALES.SALESPERSON_INFO AS
SELECT T1.SALESPERSONID, T2.TITLE, T3.NAME, T1.SALESLASTYEAR
FROM SALES.SALESPERSON T1, RESOURCES.EMPLOYEE T2, PERSON.PERSON T3
WHERE T1.EMPLOYEEID = T2.EMPLOYEEID AND T2.PERSONID = T3.PERSONID;

对该视图进行查询,如下所示:

SELECT * FROM SALES.SALESPERSON_INFO;

输出结果:

image.png

由前面的介绍可知,基表中的数据均是基本数据。为了减少数据冗余,由基本数据经各种计算统计出的数据一般是不存贮的,但这样的数据往往又要经常使用,这时可将它们定义成视图中的数据。

  • 在 PRODUCT_VENDOR 上建立一视图,用于统计数量。如下所示:
CREATE VIEW PRODUCTION.VENDOR_STATIS(VENDORID, PRODUCT_COUNT) AS
SELECT VENDORID, COUNT(PRODUCTID)
FROM PRODUCTION.PRODUCT_VENDOR
GROUP BY VENDORID
ORDER BY VENDORID;
注意

在该语句中,由于 SELECT 后出现了集函数 COUNT(PRODUCTID),不属于单纯的列名,所以视图中的对应列必须重新命名,即在<视图名>后明确说明视图的各个列名。 由于该语句中使用了 GROUP BY 子句,所定义的视图也称分组视图。分组视图的<视图名>后所带<列名>不得包含集函数。

对该视图进行查询,如下所示:

SELECT * FROM PRODUCTION.VENDOR_STATIS;

输出结果:

image.png

  • 删除视图。在一般情况下,当一个视图不被其他对象依赖时可以随时删除视图。如下所示:
--删除视图 VENDOR_EXCELLENT
DROP VIEW PURCHASING.VENDOR_EXCELLENT;
  • 编译视图。一个视图依赖于其基表或视图,如果基表定义发生改变,如增删一列,或者视图的相关权限发生改变,可能导致视图无法使用。在这种情况下,可对视图重新编译,检查视图的合法性。如下所示:
--重新编译视图 PURCHASING.VENDOR_EXCELLENT。
ALTER VIEW PURCHASING.VENDOR_EXCELLENT COMPILE;
注意

WITH CHECK OPTION 此选项用于可更新视图中。MPP 系统下不支持该 WITH CHECK OPTION 操作。 WITH READ ONLY 指明该视图是只读视图,只可以查询,但不可以做其他 DML 操作;如果不带该选项,则根据 DM 自身判断视图是否可更新的规则判断视图是否只读。

2.3 同义词创建与使用

同义词 (Synonym) 让用户能够为数据库的一个模式下的对象提供别名,可以替换模式下的表、视图、序列、函数、存储过程等对象。

  • 创建同义词。在 DMHR 模式下的表 T1 创建同义词。如下所示:
--进入 DMHR 模式
SET SCHEMA DMHR;
--创建 T1 表
CREATE TABLE DMHR.T1 (ID INTEGER, NAME VARCHAR(50), PRIMARY KEY(ID));
INSERT INTO DMHR.T1 (ID, NAME) VALUES (1, '张三');
INSERT INTO DMHR.T1 (ID, NAME) VALUES (2, '李四');
--对表 T1 创建同义词。
CREATE SYNONYM DMHR.S1 FOR DMHR.T1

其他用户查询 T1 表,可以通过同义词 S1 查询。如下所示:

SELECT COUNT(*) FROM DMHR.S1;

输出结果:

image.png

注意

当 INI 参数 ENABLE_PL_SYNONYM=0 时,禁止通过全局同义词执行非系统用户创建的包或者 DMSQL 程序。

  • 删除同义词。如下所示:
--删除 DMHR 模式下的同义词 S1
DROP SYNONYM DMHR.S1;
--删除公有同义词 S2
DROP PUBLIC SYNONYM S2;

三、参考文献

更多 SQL 语言使用说明,请参考《DM8_SQL 语言使用手册》,手册位于数据库安装路径 /dmdbms/doc 文件夹下。如有其他问题,请在社区内咨询。

微信扫码
分享文档
扫一扫
联系客服