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

数据库管理-第六十六期 SQL Domain(20230413)

数据库管理 2023-04-13

  • 第六十六期 SQL Domain
    • 1 基本介绍
    • 2 Domain的表达式和条件
    • 3 语法
    • 4 语义
    • 5 示例
    • 总结

第六十六期 SQL Domain

上一期一笔带过了部分Oracle 23c的新特性,这一期重点讲一下SQL Domain新特性。
【https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/create-domain.html】

1 基本介绍

SQL Domain是一个属于SCHEMA的高级字典对象,包含一组可选的属性和约束。可以将表中的列与Domain进行关联,从而显示的将Domain包含的可选属性和约束应用到这些列中。一个Domain至少必须指定一个Oracle内建的数据类型。Domain的数据类型必须是单个的Oracle数据库类型。对于字符数据类型,必须指定一个最大长度,即是VARCHAR2(L [CHAR|BYTE]), NVARCHAR2(L), CHAR(L [CHAR|BYTE]), or NCHAR(L)中的一个。

2 Domain的表达式和条件

Domain的表达式可以简单的、日期时间、时间间隔,CASE、复合或者domain列表表达式之一:

  • 简单的domain表达式可以是字符串、数字、 sequence.CURRVAL、 sequence.NEXTVAL、NULL或者SCHEMA Domain。它类似于简单表达式,只不过使用domain名称而不是列名。它将域名引用为限定名称、Oracle内置的Domain名或者使用一个Domain的公有同义词。
  • 日期时间Domain表达式仅引用域表达式的日期时间表达式。
  • 时间间隔表达式仅仅被定义为正则区间表达式,只是它引用了domain表达式。例如, (SYSTIMESTAMP - DayOfWeek) DAY(9) TO SECOND 是一个时间间隔表达式。
  • 符合表达式是(expr), expr op expr with op +, -, *, /, ||, or expr排序collation_name,其中expr是一个domain表达式。
'email: ' || EmailAddress
DayOfWeek + INTERVAL '1' DAY
TO_CHAR(LastFour(SSN))
  • CASE domain表达式与正则case表达式类似,只是它仅引用domain表达式。
CASE WHEN TO_UPPER(DOMAIN_DISPLAY(DayOfWeek)) != 'SAT' AND TO_UPER(DOMAIN_DISPLAY(DayOfWeek)) != 'SUN' THEN 'week day' ELSE 'weekend' END 
  • 与SQL Domain表达式的定义类似,Domain条件就像正则SQL条件一样,只是它只引用Domain表达式。您可以在Domain表达式中使用关键字值,而不是使用Domain名称。
CREATE DOMAIN DayOfWeek AS CHAR(3 CHAR)
CONSTRAINT
CHECK DayOfWeek_C (UPPER(Substr(VALUE, 1, 3)) IN ('MON', 'WED', 'FRI', 'SAT', 'SUN') orUPPER(Substr(VALUE, 1, 2)) IN ('TU', 'TH')) 
DEFERRRABLE INITIALLY DEFERRED
COLLATE BINARY_CI
DISPLAY SUBSTR(VALUE, 1, 3);

3 语法

create_domain::=
在这里插入图片描述
create_single_column_domain::=
在这里插入图片描述
column_properties_clause::=
在这里插入图片描述
create_multi_column_domain::=
在这里插入图片描述
create_flexible_domain::=
在这里插入图片描述
result_expr::=
在这里插入图片描述
default_clause::=
在这里插入图片描述
constraint_clause::=
在这里插入图片描述
annotations_clause::=
在这里插入图片描述

4 语义

  • IF NOT EXISTS

    • 如果domain不存在则创建新的domain
    • 如果domain存在则不会创建新的domain

    如果使用IF EXISTS则会报错:Incorrect IF NOT EXISTS clause for CREATE statement。

  • domain_name
    domain_name遵循与任何类型名称相同的限制,并且不能与domain schema中的任何对象的名称、任何Oracle提供的数据类型以及任何Oracle提供的domain名称发生冲突。
    这些限制适用于CDB环境中的PDB级别。
    请注意,域是schema的catalog对象,因此受schema级别对象的限制。

  • datatype
    datatype必须是Oracle内建的数据类型:

    • CHAR(L [CHAR|BYTE]), NCHAR(L), VARCHAR(L [CHAR|BYTE]), VARCHAR2(L [CHAR|BYTE]), NVARCHAR2(L), LONG
    • NUMBER[p, [s]], FLOAT, BINARY_FLOAT, BINARY_DOUBLE
    • RAW, LONG RAW (extended included)
    • DATE, TIMESTAMP (WITH (LOCAL) TIME ZONE), INTERVAL
    • BFILE, BLOB, CLOB, NCLOB
    • JSON native datatype
    • BOOLEAN
  • default_expression
    default_expression必须是一个域表达式,并且必须符合给定数据类型的默认列表达式的所有限制:

    • default_expression不能包含返回域引用或嵌套函数调用的SQL函数,它不能是子查询表达式。
    • default_expression的数据类型必须于domain指定的数据类型匹配。
    • 作为domain的表达式,default_expression不能引用任何表或列以及任何其他domain名。
    • default_expression可以指一个序列的NEXTVAL和CURRVAL。不能引用PL/SQL函数。
  • constraint_clause
    请注意,domain约束可以有可选的名称。它们NOT NULL、NULL或CHECK约束。可以在列级别和domain级别上同时指定多个这样的约束子句。
    CHECK条件以及ALTER DOMAIN中的检查条件和表达式只能引用domain的列。如果domain有单个列,则列名是domain名或关键字VALUE,但相同的表达式不能同时包含domain名和VALUE作为列名。
    constraint_name是可选。当指定时,它不能与schema中的任何其他约束的名称发生冲突(如果在CDB环境中,则在给定的PDB中)。当未指定时,将使用系统生成的名称。domain约束遵循与表级约束和列级约束相同的规则:一个已命名的表或列级约束不能与同一schema中的任何其他约束的名称相一致。即使是在相同的schema中,domain约束可以与表名相同。它们可以与列名相同,并且约束可以与它在上面定义的表或列使用相同的名称。
    CHECK条件必须是一个domain的逻辑条件,同时必须符合对转换为domain表达式的检查约束的所有限制:

    • 它只能引用domain名,就像列上的检查约束只能引用列一样。它不能引用任何表或视图中的任何列,甚至在domain schema中也不能。
    • 不能使用子查询或标量查询表达式。
    • 条件不能引用非确定性函数(如CURRENT_DATE),或用户定义的PL/SQL函数。
    • 允许CHECK IS JSON(STRICT)约束。
    • CHECK约束条件一次应用于一个值,如果值替换为domain_name的CHECK条件计算结果为TRUE或UNKNOWN,则满足该条件。

    Domain约束可以按任意顺序强制执行。
    NULL约束意味着允许domain的值为NULL,并且是默认值。
    如果未指定constraint_state,则约束为NOT DEFERABLE INITIALLY IMMEDIATE。

  • COLLATE
    当指定排序规则时,它符合列级别或SCHEMA级别排序规则的所有限制。如果指定了排序规则,数据类型必须是字符数据类型。
    当创建一个表,其中的列标记为一个排序规则不同于该列的排序规则的domain时,将引发错误。
    将列更改为具有与列domain的排序规则不同的排序规则时,将引发错误。
    这应该确保具有指定排序规则的域的所有列具有与其域相同的排序规则的不变性。如果未指定排序规则且数据类型是可排序的,则将使用列的排序规则(如果已指定),否则将使用域模式中的基础默认数据类型排序规则。
    如果未指定排序规则且数据类型是可排序的,则将使用列的排序规则(如果已指定)。

  • display_expression
    使用 display_expression 根据domain规范格式化数据。它可以是任何允许作为domain数据类型的数据类型。 display_expression 必须是不包含表或视图列、子查询、非确定性函数或 PL/SQL 函数的域表达式。它可以引用 domain_name。如果您没有为表达式指定排序规则,则 display_expression 将使用domain的排序规则(如果已指定)。

  • order_expression
    使用 order_expression 对domain规范的值进行排序和比较。
    order_expression 必须符合与 display_expressions 相同的限制,并且还必须是字节或字符可比较数据类型。如果为表达式的domain指定了order_expression,则返回的有domain_nameorder_expression而不是表达式,否则返回表达式。

  • annotations_clause
    annotation_name是一个最多可以包含4000个字符的标识符。如果注释名称是保留字,则必须用双引号提供。当使用双引号标识符时,该标识符还可以包含空白字符。但是,不接受仅包含空白字符的标识符。
    有关annotations_clause的示例,请参见末尾的示例。
    有关annotations子句的完整语义,请参阅CREATE TABLE的annotations_clause。

  • FROM Clause of Create Flexible Domain
    expr和comparison_expr引用了domain_disperiment_column列表中的domain判别列。
    灵活东面的FROM子句是DECODE或CASE表达式,它只引用搜索表达式中的判别式列名(在CHOOSE DOMIAN USING后面的列表中),并且在结果表达式中只有domain名后面跟着列列表。结果表达式中的列必须仅为东面列列表中的列(在CREATE FLEXILE DOMAIN之后)。

5 示例

从CREATE TABLE章节中找到了建表是SQL DOMAIN的使用方法。

CREATE TABLE [owner.]name (   colname [DOMAIN][domain_owner.]domain_name [<column_def_clause>] [, colname [DOMAIN] [domain_owner.]domain_name [<column_def_clause>]])CREATE TABLE [owner.]name (column_list_def_clause [, DOMAIN  [domain_owner.]domain_name (column_name_list)])

首先在尝试创建domain时,报了个错:

ORA-43929: Collation cannot be specified if parameter MAX_STRING_SIZE=STANDARD is set

需要MAX_STRING_SIZE=EXTENDED,详情建四十七期。

  • 示例1
    在这里插入图片描述在这里插入图片描述
    这里domain dn1是数字类型;domain dn2两个值均为数字类型,第一个不能为空,第二个默认为1;domain dm1包含四个值:两个值均为数字类型,第一个不能为空,第二个不能为空切必须大于0,第三个为默认值为abc的长度为10的varhar2类型,第四个值也为数字仅为空值时插入默认0,同时要求前两个值相加小于等于100,同时第三个值长度大于第二个数值。
    对应的tm1表,c1-c4满足domain dm1,c5-c6满足domain dn2,c7满足domain dn1。
    下面我们来尝试插入数据:
    在这里插入图片描述
    这里c4因为插入为NULL所以值为10,c6获取默认值1。
    在这里插入图片描述
    这里插入的c2为20,而c3默认值abc长度为3,不满足大于c2的条件,因此插入失败。
    在这里插入图片描述
    将上一条语句c3改为2即可成功插入。
    在这里插入图片描述
    这里又因为c1+c2>100,不满足domain dm1。
    在这里插入图片描述
    这里c1插入的不是数字类型(domain dm1)。
    在这里插入图片描述
    这里c5不能为空(domain tm1)。
  • 示例2
    在这里插入图片描述
    在这里插入图片描述
    创建表tm2,遵循domain email限制,插入空值时拼接序列t_seq.NEXTVAL和字符串‘gmail’,插入内容必须包含@和. 且@不在首位。
    在这里插入图片描述
    插入空值时,自动填充。
    在这里插入图片描述正确格式的邮箱地址能正确插入。
    在这里插入图片描述
    错误格式的邮箱地址就无法插入。
    在这里插入图片描述
    使用domain_display还可以通过domain email对数据显示进行脱敏。

总结

SQL Domain还有很多功能,继续探索中。
老规矩,知道写了些啥。

相关文章:

数据库管理-第六十六期 SQL Domain(20230413)

数据库管理 2023-04-13第六十六期 SQL Domain1 基本介绍2 Domain的表达式和条件3 语法4 语义5 示例总结第六十六期 SQL Domain 上一期一笔带过了部分Oracle 23c的新特性&#xff0c;这一期重点讲一下SQL Domain新特性。 【https://docs.oracle.com/en/database/oracle/oracle-…...

《Vue3实战》 第一章 nods/npm安装、配置

1、nods.js安装&#xff08;Windows&#xff09; 1.1、下载并安装node https://nodejs.org/en/ , 安装到d盘nodejs目录 1.2、配置环境变量 path配置 1.3、配置全局包存放目录和缓存目录 在根目录下创建node_global&#xff08;全局包存放目录&#xff09;和node_cache&…...

JAVA练习104-四数相加 II

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-四数相加 II 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 4月10日练…...

【C++基础】引用(引用的概念;引用的特性;常引用;使用场景:做输出型参数、大对象传参、做输出型返回值、返回大对象的引用);引用和指针的区别)

六、引用 6.1 引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。&#xff08;语法上&#xff09; 格式&#xff1a;类型& 引用变量名(对象名) …...

Redis只用来做缓存?来认识一下它其他强大的能力吧。

当今互联网应用中&#xff0c;随着业务的发展&#xff0c;数据量越来越大&#xff0c;查询效率越来越高&#xff0c;对于时序数据的存储、查询和分析需求也越来越强烈&#xff0c;这时候 Redis 就成为了首选的方案之一。 Redis 提供了多种数据结构&#xff0c;如字符串、哈希表…...

【ES】数据同步集群

【ES】数据同步&集群3.数据同步3.1.思路分析3.1.1.同步调用3.1.2.异步通知3.1.3.监听binlog3.1.4.选择3.2.实现数据同步3.2.1.思路3.2.2.导入demo3.2.3.声明交换机、队列1&#xff09;引入依赖2&#xff09;声明队列交换机名称3&#xff09;声明队列交换机3.2.4.发送MQ消息…...

37岁男子不愿熬夜,回乡养鸡每天准时下班,青山绿水中养鸡,直播间里卖鸡蛋...

37岁男子不愿熬夜&#xff0c;回乡养鸡每天准时下班&#xff0c;青山绿水中养鸡&#xff0c;直播间里卖鸡蛋。今天和大家分享一个创业案例&#xff0c;他叫胡铭浩&#xff0c;来自安徽省旌德县&#xff0c;今年37岁&#xff0c;曾做过车床操作工&#xff0c;开过婚纱摄影店&…...

深度学习和人工智能之间是什么样的关系?

深度学习与人工智能概念的潜在联系&#xff0c;我们依然借助维恩图来说明&#xff0c;如图4.1所示。 1、人工智能 “人工智能”这个概念新鲜时髦但又含混模糊&#xff0c;同时包罗万象。尽管如此,我们仍尝试对 人工智能进行定义:用一台机器处理来自其周围环境的信息,然后将这些…...

实战打靶集锦-016-lampiao

提示&#xff1a;本文记录了博主打靶过程中一次曲折的提权经历 文章1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 80端口探查4.2 1898端口探查4.3 EXP搜索4.3.1 exploit/unix/webapp/drupal_coder_exec4.3.2 exploit/unix/webapp/drupal_drupalgeddon25. 提权5.1 系统信息…...

《Web前端应用开发》考试试卷(模拟题)

一、产品搜索页面 打开“考试文件夹”中的input.html&#xff0c;完成以下步骤&#xff1a; 注意&#xff1a;本题仅能在input.html的&#xff08;1&#xff09;为产品名称所在的div添加样式属性&#xff0c;使得产品名称保持在文本框的左边&#xff1b; &#xff08;2&#xf…...

【react全家桶学习】react简介

react是什么&#xff1f; react是用于构建用户界面的JS库&#xff0c;是一个将数据渲染为HTML视图的开源JS库 谁开发的&#xff1f; 由Facebook开发&#xff0c;且开源 为什么要学&#xff1f; 原生JavaScript操作DOM繁琐、效率低 ( DOM-API操作 UI)使用JavaScript直接操作…...

此战成硕,我成功上岸西南交通大学了~~~

友友们&#xff0c;好久不见&#xff0c;很长时间没有更一个正式点的文章了&#xff01; 是因为我在去年年底忙着准备初试&#xff0c;今年年初在准备复试&#xff0c;直到3月底拟录取后&#xff0c;终于可以写下这篇上岸贴&#xff0c;和大家分享一下考研至上岸的一个过程 文章…...

光耦继电器工作原理及优点概述

光耦继电器是一种电子元器件&#xff0c;也是固态继电器的一种&#xff0c;其主要作用是隔离输入与输出电路&#xff0c;用于保护或者控制电路的正常工作。 光耦继电器工作原理是利用光电转换器将外界信号转化为光信号&#xff0c;通过光纤传输到另一端&#xff0c;再由另一端的…...

【Mysql】mysql8.0.26解压包部署方式

版本背景&#xff1a; 操作系统&#xff1a;centos7.3 mysql版本&#xff1a;mysql-8.0.26-linux-glibc2.12-x86_64.tar 一、前期准备 1、检测操作系统自带安装的mysql和mariadb服务&#xff0c;如存在&#xff0c;需卸载 rpm -qa | grep mysql rpm -qa | grep mariadb 卸载…...

进销存管理系统能为企业带来哪些实际效益?

随着互联网的不断发展&#xff0c;如今的商业世界已经越来越向数字化转型。拥有一套完整的数字化的进销存管理能够极大地提升公司货物进出库存情况的效率和准确性&#xff0c;避免过程中出现不必要的错误和漏洞&#xff0c;从而帮助企业更加稳健地自我发展。那么&#xff0c;一…...

图片怎么转换成pdf格式?这几个方法帮你一键转换

现今电子书籍越来越受到欢迎&#xff0c;其中PDF格式也成为了一种常用的电子书籍格式。无论是工作还是学习&#xff0c;我们都可能会遇到需要将图片转换成PDF格式的情况&#xff0c;例如保存一些资料证明、公文公告、学习资料等。在这篇文章中&#xff0c;我们将为大家介绍三种…...

数据结构exp1_2学生成绩排序

目录 数据结构exp1_2学生成绩排序 程序设计 程序分析 数据结构exp1_2学生成绩排序 【问题描述】 对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输…...

在DongshanPI-D1开箱使用分享与折腾记录实现MPU6050数据读取

前言 上一篇文章使用RT-Smart的IIC驱动OLED屏幕&#xff0c;进行基本的字符串显示,在使用过程中对RT-Smart有了一定熟悉&#xff0c;准备使用SPI驱动ST7789&#xff0c;但SPI接口没有引出&#xff0c;本次使用手上已有的传感器MPU6050进行使用。 过程 本次直接开始添加离线包…...

Nature子刊 定制饮食去除半胱氨酸和蛋氨酸可诱导细胞自毁进而治疗脑瘤?

恶性胶质瘤是成人最常见的脑部肿瘤。恶性胶质瘤的致死率为100%&#xff0c;无法治愈&#xff0c;是一种极度的恶性肿瘤。如此糟糕的预后促使研究者及神经外科医生不断学习研究肿瘤生物学&#xff0c;期望创造更好的疗法。神经外科助理教授Dominique Higgins博士从事肿瘤生物学的…...

抛弃 TCP 和 QUIC 的 HTTP

下班路上发了一则朋友圈&#xff1a; 周四听了斯坦福老教授 John Ousterhout 关于 Homa 的分享&#xff0c;基本重复了此前那篇 It’s Time To Rep… 的格调&#xff0c;花了一多半时间喷 TCP… Ousterhout 关于 Homa 和 TCP 之间的论争和论证&#xff0c;诸多反复回执&…...

Cowabunga Lite完全指南:从入门到精通的iOS个性化解决方案

Cowabunga Lite完全指南&#xff1a;从入门到精通的iOS个性化解决方案 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite iOS设备的封闭性常常让用户在个性化定制时感到束手束脚&#xff0c;既想…...

避开这些坑!算法工程师自学必备的5个高效学习法与工具推荐

避开这些坑&#xff01;算法工程师自学必备的5个高效学习法与工具推荐 1. 为什么大多数自学算法工程师会失败&#xff1f; 在咖啡馆见到老张时&#xff0c;他正对着电脑屏幕上的LeetCode题目发呆。这位转行学习算法的前机械工程师已经坚持了8个月&#xff0c;但最近一次面试还是…...

手把手教学:用SiameseAOE从海量文本中提取“属性-观点”对

手把手教学&#xff1a;用SiameseAOE从海量文本中提取"属性-观点"对 1. 为什么需要属性观点抽取&#xff1f; 在日常工作中&#xff0c;我们经常遇到这样的场景&#xff1a;面对成千上万条用户评论、社交媒体反馈或调查问卷&#xff0c;如何快速找出有价值的信息&a…...

用PyTorch和snnTorch库5分钟搞定一个脉冲神经网络(SNN)手写数字识别Demo

用PyTorch和snnTorch库5分钟搞定一个脉冲神经网络&#xff08;SNN&#xff09;手写数字识别Demo 脉冲神经网络&#xff08;SNN&#xff09;作为第三代神经网络模型&#xff0c;正逐渐从学术研究走向工业应用。与传统人工神经网络不同&#xff0c;SNN通过模拟生物神经元的脉冲发…...

YOLO-v5小目标检测:微小物体识别效果惊艳展示

YOLO-v5小目标检测&#xff1a;微小物体识别效果惊艳展示 1. 小目标检测的技术挑战 在计算机视觉领域&#xff0c;小目标检测一直是个棘手的问题。当目标在图像中占据的像素面积小于3232时&#xff0c;传统检测算法往往会遇到以下困难&#xff1a; 特征信息不足&#xff1a;…...

Nano-Banana效果展示:多款产品高清拆解图生成作品集

Nano-Banana效果展示&#xff1a;多款产品高清拆解图生成作品集 1. 专业级拆解效果惊艳呈现 想象一下&#xff0c;只需简单输入文字描述&#xff0c;就能获得堪比专业设计师制作的产品爆炸图。Nano-Banana产品拆解引擎让这一想象成为现实&#xff0c;它专为产品拆解、平铺展示…...

Qwen3-VL量化版实测:8bit精度仅降0.13%的奥秘

Qwen3-VL量化版实测&#xff1a;8bit精度仅降0.13%的奥秘 【免费下载链接】Qwen3-VL-8B-Instruct-w8a8s-310 项目地址: https://ai.gitcode.com/Eco-Tech/Qwen3-VL-8B-Instruct-w8a8s-310 导语&#xff1a;阿里云Qwen3-VL视觉语言模型推出8bit量化版本Qwen3-VL-8B-Inst…...

智能预处理预览功能详解:Anything to RealCharacters 2.5D引擎稳定性保障机制

智能预处理预览功能详解&#xff1a;Anything to RealCharacters 2.5D引擎稳定性保障机制 1. 项目概述 Anything to RealCharacters 2.5D转真人引擎是一款专为RTX 4090显卡优化的图像转换系统&#xff0c;能够将卡通、二次元、2.5D风格的图像高质量转换为写实真人照片。该系统…...

OpenClaw+GLM-4.7-Flash:自动化会议纪要生成实践

OpenClawGLM-4.7-Flash&#xff1a;自动化会议纪要生成实践 1. 为什么需要自动化会议纪要 每周三下午的团队例会是我最头疼的时刻。作为技术负责人&#xff0c;我需要同时参与讨论、记录关键决策点、跟踪行动项&#xff0c;最后还要整理成文档发给全员。手忙脚乱的结果往往是…...

OFA-Image-Caption赋能Android应用:移动端图像智能描述实战

OFA-Image-Caption赋能Android应用&#xff1a;移动端图像智能描述实战 你有没有想过&#xff0c;手机拍下一张照片&#xff0c;它就能立刻告诉你照片里有什么&#xff1f;对于视障朋友来说&#xff0c;这不仅仅是便利&#xff0c;更是打开世界的一扇窗。而对于内容平台&#…...