当前位置: 首页 > news >正文

解析 Oracle 中的 ALL_SYNONYMS 和 ALL_VIEWS 视图:查找同义词与视图的基础操作

目录

  • 前言
  • 1. ALL_SYNONYMS 视图
  • 2. ALL_VIEWS 视图
  • 3. 扩展

前言

🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF

1. ALL_SYNONYMS 视图

在 Oracle 数据库中,同义词(Synonym)是对数据库对象(如表、视图、存储过程等)创建的别名

使用同义词可以简化 SQL 语句,使用户无需使用完整的对象路径
例如,如果 USER_A 拥有表 TABLE_A,但 USER_B 也需要访问它,创建一个同义词 TABLE_A 允许 USER_B 直接查询,而无需写 USER_A.TABLE_A

ALL_SYNONYMS 视图存储了当前用户可以访问的所有同义词的信息,包括公有(PUBLIC)同义词和用户私有(PRIVATE)同义词
其典型用途是:

  1. 查找某个对象是否有对应的同义词
  2. 确定同义词实际指向的对象
  3. 排查数据库对象访问权限问题

ALL_SYNONYMS 视图的主要列如下:

列名数据类型说明
OWNERVARCHAR2同义词的拥有者(创建该同义词的用户)
SYNONYM_NAMEVARCHAR2同义词的名称
TABLE_OWNERVARCHAR2实际对象的拥有者(目标对象所在用户)
TABLE_NAMEVARCHAR2实际数据库对象的名称
DB_LINKVARCHAR2如果是远程数据库对象,则指向数据库链接
SELECT * FROM all_synonyms WHERE synonym_name = '表名';

作用:查找是否存在名为 表名 的同义词,并查看它指向的具体对象

基本截图如下:

在这里插入图片描述

2. ALL_VIEWS 视图

视图是基于 SQL 查询逻辑创建的虚拟表,它不存储数据,而是提供对基础表的动态访问
ALL_VIEWS 视图存储了当前用户可以访问的所有视图的信息

视图的作用包括:

  1. 供数据访问的抽象层,简化复杂 SQL 查询
  2. 制访问权限,只暴露部分数据
  3. 现数据整合,将多个表的信息整合到一个视图中

ALL_VIEWS 视图的主要列如下:

列名数据类型说明
OWNERVARCHAR2视图的拥有者(创建该视图的用户)
VIEW_NAMEVARCHAR2视图的名称
TEXT_LENGTHNUMBER视图定义 SQL 语句的长度
TEXTCLOB视图的 SQL 定义(通常存储在 CLOB 中)
SELECT * FROM all_views WHERE view_name = '视图名';

作用:查找是否存在名为 视图名 的视图,并查看其定义

示例结果:

OWNERVIEW_NAMETEXT_LENGTHTEXT
HRC_CY_AREA120SELECT EMP_ID, EMP_NAME FROM EMPLOYEES

C_CY_AREA 是 HR 用户下的一个视图
它的 SQL 逻辑是 SELECT EMP_ID, EMP_NAME FROM EMPLOYEES,即只返回 EMPLOYEES 表的 EMP_ID 和 EMP_NAME 列

3. 扩展

  1. ALL_SYNONYMS 用于查找数据库中的同义词,并查看它们指向的具体对象
  2. ALL_VIEWS 用于查找数据库中的视图,并查看其 SQL 逻辑
  3. 同义词主要用于简化访问,而视图用于数据抽象和权限控制
  4. 通过 DBMS_METADATA.GET_DDL 可以获取视图的完整 SQL 逻辑
  5. 维护数据库时,合理使用同义词和视图可以提高 SQL 可读性和安全性

如果想修改 C_CY_AREA 同义词指向的对象,需要先删除,再重新创建:(C_CY_AREA 表名)

DROP SYNONYM C_CY_AREA;
CREATE SYNONYM C_CY_AREA FOR NEW_SCHEMA.NEW_TABLE;

如何检查视图的 SQL 逻辑?
如果视图的 SQL 语句较长,使用 DBMS_METADATA.GET_DDL 可以更清晰地查看:

SELECT DBMS_METADATA.GET_DDL('VIEW', 'C_CY_AREA', 'HR') FROM DUAL;

如何查看某个用户创建的所有视图?

SELECT view_name FROM all_views WHERE owner = 'HR';

如何查看数据库中的所有公有同义词?

SELECT * FROM all_synonyms WHERE owner = 'PUBLIC';
http://www.lryc.cn/news/530665.html

相关文章:

  • AI协助探索AI新构型的自动化创新概念
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)
  • 【Redis】Redis 经典面试题解析:深入理解 Redis 的核心概念与应用
  • TensorFlow 示例摄氏度到华氏度的转换(一)
  • 7.DP算法
  • Baklib构建高效协同的基于云的内容中台解决方案
  • 在C语言多线程环境中使用互斥量
  • 项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser
  • 代码随想录刷题笔记
  • AI智慧社区--人脸识别
  • 对象的实例化、内存布局与访问定位
  • React基础知识回顾详解
  • 开发第一个安卓页面
  • 物联网 STM32【源代码形式-ESP8266透传】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】
  • 微服务-配置管理
  • 基于SpringBoot的智慧康老疗养院管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • 100.1 AI量化面试题:解释夏普比率(Sharpe Ratio)的计算方法及其在投资组合管理中的应用,并说明其局限性
  • LLMs之OpenAI o系列:OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略
  • 深度解析:网站快速收录与网站安全性的关系
  • 【Rust自学】16.2. 使用消息传递来跨线程传递数据
  • 如何实现滑动网格的功能
  • 使用C# 如何获取本机连接的WIFI名称[C# ---1]
  • 【Docker】快速部署 Nacos 注册中心
  • OpenCV:闭运算
  • Python | Pytorch | Tensor知识点总结
  • aws(学习笔记第二十六课) 使用AWS Elastic Beanstalk
  • 《OpenCV》——图像透视转换
  • 9 点结构模块(point.rs)
  • Java线程认识和Object的一些方法ObjectMonitor
  • 【高等数学】贝塞尔函数