Oracle系列十二:视图、记录、同义词、序列

这篇具有很好参考价值的文章主要介绍了Oracle系列十二:视图、记录、同义词、序列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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_RECORD

BEGIN
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_sequence
  START WITH 1
  INCREMENT BY 1
  MAXVALUE 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都会返回一个递增的唯一数字。文章来源地址https://www.toymoban.com/news/detail-435312.html

到了这里,关于Oracle系列十二:视图、记录、同义词、序列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch 同义词管理热更新

    项目有需要做一个同义词搜索的功能,就去研究了下es的同义词搜索功能,踩了不少坑记录下 如果只是需要同义词搜索,不需要管理和更新,es本体就能支持,我踩的坑基本也不在这,就不具体说了,参考这个就好了https://blog.csdn.net/qq_40592041/article/details/108006994 插件仓库地址

    2024年02月19日
    浏览(38)
  • Elasticsearch同义词自定义词库未生效原因

    检查文件及目录是否存在 所有节点配置完之后都要重启 检查测试脚本是否正确的,我遇到的问题就是脚本不正确但是确能执行,就是拿不到正确结果 错误脚本: 正确脚本:

    2024年02月11日
    浏览(37)
  • Elasticsearch:词干、Shingles 和同义词过滤器

    分词器生成的分词可能需要进一步丰富或增强,例如小写(或大写)标记、提供同义词、开发词干词、删除撇号或标点符号等。 分词过滤器对分词进行处理以执行此类转换。 Elasticsearch 提供了将近 50 个分词过滤器,正如你可以想象的那样,在这里讨论所有这些过滤器是不可

    2024年02月03日
    浏览(38)
  • Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能

    同义词用于提高搜索质量并扩大匹配范围。 例如,搜索 England 的用户可能希望找到包含 British 或 UK 的文档,尽管这三个词完全不同。 Elasticsearch 中的同义词功能非常强大,如果实施得当,可以使你的搜索引擎更加健壮和强大。 在本文中,我们将通过简单的代码片段介绍在实

    2024年02月13日
    浏览(41)
  • 【ES】Elasticsearch:词干、Shingles 和同义词过滤器

    分词器生成的分词可能需要进一步丰富或增强,例如小写(或大写)标记、提供同义词、开发词干词、删除撇号或标点符号等。 分词过滤器对分词进行处理以执行此类转换。 Elasticsearch 提供了将近 50 个分词过滤器,正如你可以想象的那样,在这里讨论所有这些过滤器是不可

    2024年02月05日
    浏览(44)
  • 使用阿里云试用Elasticsearch学习:3.6 处理人类语言——同义词

    词干提取是通过简化他们的词根形式来扩大搜索的范围,同义词 通过相关的观念和概念来扩大搜索范围。 也许没有文档匹配查询 “英国女王“ ,但是包含 “英国君主” 的文档可能会被认为是很好的匹配。 用户搜索 “美国” 并且期望找到包含 美利坚合众国 、 美国 、 美

    2024年04月10日
    浏览(43)
  • Elasticsearch教程(35) ik中文分词器+pinyin拼音分词器+同义词

    闲来无事,发现上一篇ES博客还是 去年9月份 写的中文ik分词器 pinyin 首字母 search_as_you_type 组合使用,该篇文章还挖了一个 大坑 没有填,快一年了,是时候填下坑了。 针对股票查询这个特点场景,再结合一般使用者的搜索习惯,暂时确定如下7种期望效果。 上一篇博客Elast

    2023年04月09日
    浏览(48)
  • docker-compose安装es以及ik分词同义词插件

    目录 1 前言 2 集成利器Docker 2.1 Docker环境安装 2.1.1 环境检查 2.1.2 在线安装 2.1.3 离线安装 2.2 Docker-Compose的安装 2.2.1 概念简介 2.2.2 安装步骤 2.2.2.1 二进制文件安装 2.2.2.2 离线安装 2.2.2.3 yum安装 3 一键安装ES及Kibana 3.1 yml文件的编写 3.1.1 elasticsearch.yml配置 3.1.2 kibana.yml配置 3.2 一键

    2024年04月23日
    浏览(44)
  • Elasticsearch (ES) 搜索引擎: 文本搜索:分析器/分词器、同义词/停用词、拼音搜索、高亮显示、拼写纠错

    原文链接:https://xiets.blog.csdn.net/article/details/132349032 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) 文本搜索主要指的就是全文搜索,全文搜索是搜索引擎的核心功能,与精确匹配的结构化数据不同,文本(text)数据在构建索引和搜索时都需要进行额外的处

    2024年02月03日
    浏览(58)
  • Django实现接口自动化平台(十二)自定义函数模块DebugTalks 序列化器及视图【持续更新中】

    上一章: Django实现接口自动化平台(十一)项目模块Projects序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 本章是项目的一个分解,查看本章内容时,要结合整体项目代码来看: python django vue httprunner 实现接口自动化平台(最终版)_python+vue自动化测试平台_做测

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包