Oracle视图、记录、同义词、序列

  • 1. 视图(View)
  • 2. 记录(Record)
  • 3. 同义词(Synonym)
  • 4. 序列(Sequence)

1. 视图(View)

(1)基本概念

Oracle视图是数据库中的一种特殊对象,它是一个虚拟的表,不存储数据,而是基于一个或多个表的查询结果而创建的。视图可以看作是一个存储在数据库中的查询结果集,具有表的特性,包含一系列带有名称的列和行数据,可以被查询、修改和删除等。

视图并不在数据库中以存储的数据值集形式存在,行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。因此可以简化复杂的查询,提高查询效率,同时也可以保护数据的安全性。

(2)视图的创建

创建Oracle视图的语法如下:

CREATE [OR REPLACE] VIEW view_name [(column1, column2, …)]
AS
SELECT column1, column2, …
FROM table1, table2, …
WHERE [condition];

其中,view_name是视图的名称,column1, column2, …是视图中的列名,table1, table2, …是视图中要查询的表,condition是查询条件。

例如创建一个视图,显示所有员工的姓名、部门名称和薪水:

CREATE VIEW emp_dept_salary AS
SELECT e.ename, d.dname, e.sal
FROM emp e, dept d
WHERE e.deptno = d.deptno;

(3)视图的使用

使用Oracle视图可以像使用表一样进行查询、修改和删除等操作。

e.g.

  • 查询emp_dept_salary视图中的所有数据:
SELECT * FROM emp_dept_salary;
  • 修改emp_dept_salary视图中的数据:
UPDATE emp_dept_salary
SET sal = sal * 1.1
WHERE dname = 'SALES';
  • 删除emp_dept_salary视图中的数据:
DELETE FROM emp_dept_salary
WHERE ename = 'SMITH';

对于可更新的视图,在视图中的行和基表中的行之间必须具有一一对应的关系

还有一些特定的其他结构,这类结构会使得视图不可更新。更具体地讲,如果视图包含下述结构中的任何一种,那么它就是不可更新的:

  • 聚合函数(SUM()MIN()MAX()COUNT()等)。
  • DISTINCT
  • GROUP BY
  • HAVING
  • UNIONUNION ALL
  • 仅引用文字值(在该情况下,没有基本表)
  • 位于选择列表中的子查询
  • Join
  • FROM子句中的不可更新视图
  • WHERE子句中的子查询,引用FROM子句中的表

2. 记录(Record)

(1)基本概念

Oracle中的Record对象是一种复合数据类型,用于存储和操作多个相关字段或数据元素的集合

Record将多个变量组成一个单独的实体来处理,常用于支持SELECT语句的返回值。使用Record可将一行数据看成一个单元进行处理,而不必将每一列单独处理,简化代码,提高可读性和可维护性。

(2)记录的定义

使用以下语法定义一个RECORD对象:

TYPE type_name IS RECORD(
Variable_name1 datatype1,
Variable_name2 datatype2,
…
Variable_nameN datatypeN);

其中type_name是RECORD对象的名称,Variable_name1到Variable_nameN是RECORD对象中的字段名,datatype1到datatypeN是字段的数据类型。

例如,以下代码定义了一个RECORD对象employee_rec,该对象具有三个字段:emp_id、emp_name和emp_salary。

TYPE employee_rec IS RECORD(emp_id NUMBER,emp_name VARCHAR2(50),emp_salary NUMBER
);

(3)记录的使用

  • 声明RECORD变量
variable_name record_type;

e.g.

声明了一个变量emp_info,该变量类型为employee_rec:

emp_info employee_rec;
  • 对RECORD变量进行赋值
variable_name.field_name := value;

e.g.

将emp_id、emp_name和emp_salary字段分别设置为101、'John Smith’和5000:

emp_info.emp_id := 101;
emp_info.emp_name := 'John Smith';
emp_info.emp_salary := 5000;
  • 用于SELECT语句的返回值

e.g.

首先使用SELECT语句从“EMPLOYEE”表中检索ID为32334的员工记录,将结果存储在名为“REAL_RECORD”的record对象中;然后将“REAL_RECORD”对象中的“SALARY”字段乘以1.1,使用UPDATE语句将结果更新到数据库中。

DECLARE
TYPE MYRECORD IS RECORD(
ID   EMPLOYEE.ID%TYPE,
NAME EMPLOYEE.NAME%TYPE,
SALARY EMPLOYEE.SALARY%TYPE); -- 自定义定义记录MYRECORD
REAL_RECORD MYRECORD; -- 声明记录变量REAL_RECORDBEGIN
SELECT ID,NAME,SALARY INTO REAL_RECORD FROM EMPLOYEE WHERE ID='32334';
DBMS_OUTPUT.PUT_LINE(REAL_RECORD.ID||','||REAL_RECORD.NAME||','||REAL_RECORD.SALARY);REAL_RECORD.SALARY := REAL_RECORD.SALARY * 1.1;
UPDATE EMPLOYEE SET SALARY = REAL_RECORD.SALARY WHERE ID='32334';
DBMS_OUTPUT.PUT_LINE(REAL_RECORD.ID||','||REAL_RECORD.NAME||','||REAL_RECORD.SALARY);END;

3. 同义词(Synonym)

(1)基本概念

Oracle的同义词是一种数据库对象,它可以被用来提供对其他表、视图或同义词的简单访问。同义词的定义包括了一个名称和一个指向实际对象的引用,这个对象可以是本地的,也可以是远程的。

使用同义词的可以简化SQL语句,并且在重命名表或移动表到不同的模式时可以减少修改查询语句的工作量。同义词还可以被用来授权到另一个用户的对象,同时保持原始拥有者的安全性。

(2)创建同义词

Oracle中创建同义词的语法如下:

CREATE [PUBLIC] SYNONYM [schema.]synonym_name FOR [schema.]object_name[@db_link];

其中,PUBLIC表示同义词是公共的,可以被所有用户访问;schema表示对象所属的模式(如果未指定,则默认为当前用户);synonym_name是同义词的名称;object_name是同义词引用的实际对象名称;db_link是可选的,表示引用远程数据库的数据库链接名。

(3)同义词的使用

e.g.

Create Or Replace Public Synonym emp For db1.EMPLOYEE;
Select * From emp;
Drop Synonym t1_jbxx; --删除同义词
 desc user_synonyms;  --查看同义词

4. 序列(Sequence)

(1)基本概念

Oracle的序列(Sequence)是一种生成唯一数值序列的对象,这些序列通常用作主键或其他唯一标识符。序列可以定义为单调递增的,从而保证序列中的值是唯一的、不可重复的。

序列通常用于创建主键或其他需要唯一标识符的字段,可被多个会话共享,并且可以在许多表中使用。

(2)序列的定义

使用以下语法在Oracle中创建序列:

CREATE SEQUENCE sequence_name[INCREMENT BY increment_value][START WITH starting_value][{ MAXVALUE max_value | NOMAXVALUE }][{ MINVALUE min_value | NOMINVALUE }][{ CYCLE | NOCYCLE }][{ CACHE cache_value | NOCACHE }];

每个参数的含义如下:

  • sequence_name: 序列的名称;
  • increment_value: 序列每次增加的值,默认为1;
  • starting_value: 序列的起始值,默认为1;
  • max_value: 序列的最大值,如果设置了该值,则序列将在达到该值时重新循环;
  • min_value: 序列的最小值,如果设置了该值,则序列将在达到该值时停止增长;
  • CYCLE | NOCYCLE: 如果启用了CYCLE,则在达到MAXVALUE时序列将重新循环;如果禁用了CYCLE,则在达到MAXVALUE时将停止增长;
  • CACHE cache_value: 指定序列缓存的个数,默认为20。

e.g.

定义了一个名为my_sequence的序列,从1开始递增,每次增加1,最大值为1000:

CREATE SEQUENCE my_sequenceSTART WITH 1INCREMENT BY 1MAXVALUE 1000;
Alter Sequence my_sequence Increment By 3; --修改序列
DESC USER_SEQUENCES; --查看序列

(3)序列的使用

  • 引用序列
sequence_name.NEXTVAL

其中,NEXTVAL是一个序列对象的方法,用于获取下一个序列值。您还

  • 获取当前序列值:
sequence_name.CURRVAL

需要注意的是,在使用CURRVAL之前,必须先使用NEXTVAL来获取序列的当前值。

  • 使用序列生成ID
INSERT INTO my_table (id, name) VALUES (my_sequence.NEXTVAL, 'John');

这个语句将会插入一条记录到my_table表中,其中id字段的值将会从my_sequence序列中获取。每次调用my_sequence.NEXTVAL都会返回一个递增的唯一数字。

Oracle系列十二:视图、记录、同义词、序列相关推荐

  1. Alamofire源码解读系列(十二)之请求(Request)

    本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...

  2. Highcharts翻译系列十二:gauge测量图

    Highcharts翻译系列十二:gauge测量图 说明 测量图需要highcharts-more.js的支持 属性 参数 描述 默认值 animation 动画 true color 主要颜色或序列 ...

  3. xen是服务器虚拟化,xen虚拟化实战系列(十二)之xen虚拟机高可用之在线迁移

    xen虚拟化实战系列文章列表 xen虚拟化实战系列(十三)之xen虚拟机集中管理之convirt 1. 方案背景概述 本文是有对我们一个xen虚拟化生产环境将要改造的一个方案而来,在项目上线初期,没有 ...

  4. kotlin杂谈系列十二(Kotlin和Java的互操作)

    Kotlin杂谈系列十二 这次就主要来谈谈kotlin和java互操作的问题 kotlin出来的使命就是为了解决java的模板问题和一些冗长的问题所以kotlin天生就很好的支持了java 所以我们在 ...

  5. Reflex WMS入门系列十二:Reflex里的Location

    Reflex WMS入门系列十二:Reflex里的Location 玩过SAP系统里的人都知道,在SAP系统里库存管理分为IM Level和WM Level.IM Level的仓库,在SAP里被定义为 ...

  6. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

  7. Start Developing iOS Apps Today系列(十二)

    2019独角兽企业重金招聘Python工程师标准>>> Start Developing iOS Apps Today系列之后续 十二.iOS 技术 之前您已了解了如何编写一个具有简 ...

  8. 数据与广告系列十二:接上一篇,见习算法工程师教程

    作者|黄崇远(题图:ssyer.com,CCO协议)  公号,数据虫巢(ID: blogchong) " 看完了这篇,你就是个见习级算法工程师了.你觉得可能吗?" 接上一篇< ...

  9. 9、oracle数据库下的视图和同义词

    ORACLE下的视图和同义词 1.视图 视图就是一个查询的结果,可能包含一张表或者多张表的信息,创建视图其目的在于,便于查看表中的信息.视图只是在逻辑上存在. 1.1创建/修改视图 创建视图一定要有C ...

最新文章

  1. vs2010 vc nmake编译openssl-0.9.8e
  2. 第04课:深度学习框架 PyTorch
  3. php中魔术方法的应用
  4. 两个不同网段的局域网如何互通_不同网段之间如何通信?
  5. 配置PHP启动Apache服务报错
  6. 关于vs2008上的socket链接错误问题
  7. python messagebox弹窗退出_python 中messagebox使用 做中断调试不错
  8. mysql in 查询优化_mysql in 集合查询优化问题。
  9. Android AP模式下获取SSID/PASSWORD
  10. matlab isnumeric函数,matlab中isnan函数
  11. c++播放音频( c++ play audio),为C++应用程序添加启动音效
  12. python自动保存图片_python抓取豆瓣图片并自动保存示例学习
  13. Github上找到开源的《植物大战僵尸》代码分享~
  14. 计算机组成原理中CPI、MIPS、CPU执行时间、主频等计算
  15. 京东到家订单订单查询服务演进
  16. java导出excel表格设置行高_EasyExcel之不使用对象灵活生成Excel,并且调整行高、自动列宽与自由合并...
  17. 速卖通html自定义属性,速卖通自定义属性怎么填?有哪些需要注意的地方?
  18. tio-http-server 源码浅析(一)HttpRequestDecoder的实现
  19. 微信小程序使用AES加密和解密
  20. 云计算的概念,发展现状,实现机制,Google云计算原理

热门文章

  1. 数组对象去重的四种方式
  2. Andorid Toast倒计时,自定义显示时间
  3. 学信网查不到学位信息?学位绑定的流程详解
  4. NFC移动支付初探 (1)
  5. Adobe 数字出版解决方案 Digital Publishing Suite (Indesign 制作iPad电子书) 系列之一: 环境准备
  6. tf2连服务器一直被中断,服务器崩溃致比赛延期 Kyle等解说声讨V社
  7. 穿越东西冲,享受最美海岸线
  8. 2021年全球泳池用化学品收入大约1150.4百万美元,预计2028年达到1525.6百万美元
  9. 人工智能导论(6)——机器学习(Machine Learning)
  10. 【Docker制作镜像】Linux制作以python为基础镜像,融合Flask框架和Redis数据库