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

10.Oracle的同义词与序列

oracle11g的同义词与序列

  • 一、Oracle同义词:
    • 1、同义词的基本使用
    • 2、同义词的相关权限
    • 3、同义词的作用范围
  • 二、Oracle序列:
    • 1、序列的基本操作
    • 2、序列的相关权限

一、Oracle同义词:

同义词是一个数据库对象的别名,它允许用户通过不同的名称来引用同一个表、视图、序列或程序。同义词可以简化SQL语句,提高代码的可读性和可维护性。

1、同义词的基本使用

  1. 创建同义词的语法如下:

    CREATE [PUBLIC] SYNONYM synonym_name FOR object_name;
    

    其中,PUBLIC关键字表示创建公共同义词,可以被其他用户访问;synonym_name是同义词的名称;object_name是同义词所引用的对象名称。

    示例:

    创建或替换一个同义词,将表employees的名称改为emp:

    CREATE OR REPLACE SYNONYM emp FOR employees;
    
  2. 查询同义词:

    SELECT * FROM emp;
    
  3. 删除同义词

    DROP SYNONYM emp; 
    
    DROP PUBLIC SYNONYM emp; 
    

2、同义词的相关权限

同义词涉及到的相关权限包括 CREATE SYNONYM、DROP SYNONYM 以及对实际对象的权限。以下是相关权限以及不同同义词的作用范围的详细介绍,以及相应的代码示例。

  1. CREATE SYNONYM 权限:允许用户创建同义词。

    GRANT CREATE SYNONYM TO user_name;
    
  2. DROP SYNONYM 权限:允许用户删除同义词。

    GRANT DROP ANY SYNONYM TO user_name;
    

对实际对象的权限:用户在使用同义词时,实际上是在引用实际对象,因此用户需要有对实际对象的相应权限(比如 SELECT、INSERT、UPDATE、DELETE 等)。

3、同义词的作用范围

同义词的作用范围包括以下几种情况:

  1. 私有同义词(Private Synonym):创建用户自己的同义词,并且只有创建该同义词的用户可以使用它。

    CREATE SYNONYM synonym_name FOR object_name;
    
  2. 公有同义词(Public Synonym):创建公有同义词,所有用户都可以使用。

    CREATE PUBLIC SYNONYM synonym_name FOR object_name;
    
  3. 跨用户的同义词:一个用户可以创建指向其他用户拥有的对象的同义词。

    CREATE SYNONYM synonym_name FOR schema_name.object_name;
    

二、Oracle序列:

1、序列的基本操作

序列是一种数据库对象,它可以生成唯一的数字序列,通常用于为主键列提供唯一值。序列可以在多个表中使用,可以通过NEXTVAL和CURRVAL函数来获取下一个序列值和当前序列值。

  1. 创建序列的语法如下:

    CREATE SEQUENCE sequence_name[INCREMENT BY increment][START WITH start][MAXVALUE max_value | NOMAXVALUE][MINVALUE min_value | NOMINVALUE][CYCLE | NOCYCLE][CACHE cache_size | NOCACHE];
    

    其中,sequence_name是序列的名称;increment是序列的增量,默认为1;start是序列的起始值,默认为1;max_value是序列的最大值;min_value是序列的最小值;CYCLE表示序列达到最大值时是否重新从最小值开始循环;CACHE表示在内存中缓存的序列值的数量。

    示例:

    创建一个序列,名称为emp_seq,起始值为1,每次增加1:

    CREATE SEQUENCE emp_seqSTART WITH 1INCREMENT BY 1   ##可以为-1,当为-1是为递减MAXVALUE 2000MINVALUE 1NOCYCLECACHE 10;  ## 默认为20
    

    这段代码是用来创建一个名为"stu_seq"的序列(Sequence)的。序列是用来生成唯一数字值的对象,通常用于自动生成主键值或者其他需要唯一数字的场景。

    具体来说,这段代码设置了序列的起始值为1(START WITH 1),每次递增的步长为1(INCREMENT BY 1),最大值为2000(MAXVALUE 2000),最小值为1(MINVALUE 1),并且不会循环(NOCYCLE),意味着当达到最大值后不会重新从最小值开始。另外,它还设置了缓存为10(CACHE 10),这意味着系统会预先缓存10个序列值,以提高性能。

    总的来说,这段代码创建了一个序列,定义了它的起始值、递增步长、最大值、最小值、循环方式以及缓存设置。

  2. 获取序列的下一个值:

    SELECT emp_seq.NEXTVAL FROM dual;
    
  3. 获取序列的当前值:

    SELECT emp_seq.CURRVAL FROM dual;
    
  4. 在表中的使用

    在具体表中使用Oracle11g序列的常见方法包括:

    • 在INSERT语句中使用序列:

      INSERT INTO employee (id, name, age)
      VALUES (employee_seq.NEXTVAL, 'John Doe', 30);
      
    • 在UPDATE语句中使用序列:

      UPDATE employee
      SET id = employee_seq.NEXTVAL
      WHERE name = 'John Doe';
      
    • 在SELECT语句中使用序列:

      SELECT employee_seq.NEXTVAL
      FROM dual;
      
    • 在表的默认值中使用序列:

      ALTER TABLE employee
      MODIFY (id DEFAULT employee_seq.NEXTVAL);
      
    • 在Oracle11g中,可以使用序列的CURRVAL和NEXTVAL函数来生成一串有规律的数。下面是一个示例代码,可以将序列的值拼接为一个有规律的字符串:

      CREATE SEQUENCE my_seqSTART WITH 1INCREMENT BY 1NOCACHENOCYCLE;SELECT 'ABC' || LPAD(my_seq.NEXTVAL, 4, '0') AS my_string
      FROM dual;
      

      上面的代码中,LPAD函数将序列的值填充为4位,不足4位的用0填充。然后将序列的值拼接到字符串“ABC”后面,生成一个有规律的字符串。每次执行上面的SELECT语句,都会生成一个新的字符串。

      如果需要将这个字符串插入到表中的某个列中,可以使用INSERT语句:

      INSERT INTO my_table (id, my_string)
      VALUES (my_seq.NEXTVAL, 'ABC' || LPAD(my_seq.CURRVAL, 4, '0'));
      

      上面的代码中,将序列的值插入到表的id列中,将拼接后的字符串插入到my_string列中。每次执行上面的INSERT语句,都会生成一个新的字符串,并将它插入到表中。

      总之,使用序列的CURRVAL和NEXTVAL函数,可以方便地生成一串有规律的数,并将它们插入到表中的某个列中。

2、序列的相关权限

在 Oracle 11g 中,序列(Sequence)涉及到的相关权限包括 CREATE SEQUENCE、ALTER、DROP、SELECT 等权限。以下是相关权限的代码示例:

  1. 授予创建序列的权限:

    GRANT CREATE SEQUENCE TO user_name;
    

    这将允许用户 user_name 在数据库中创建新的序列。

  2. 授予修改序列的权限:

    GRANT ALTER ON sequence_name TO user_name;
    

    这将允许用户 user_name 修改特定序列的定义,包括修改起始值、递增步长、最大值、最小值等属性。

  3. 授予删除序列的权限:

    GRANT DROP ANY SEQUENCE TO user_name;
    

    这将允许用户 user_name 删除任何序列。

  4. 授予查询序列的权限:

    GRANT SELECT ON sequence_name TO user_name;
    

    这将允许用户 user_name 查询特定序列的当前值,以及获取序列的下一个值。

  5. 使用权限:

    除了以上列出的权限外,用户还需要有使用序列的权限,以便在 SQL 语句中使用序列来生成唯一的序列值。通常情况下,用户在有相应表的 INSERT 权限时,也可以使用序列。

    GRANT INSERT ON table_name TO user_name;
    

    这将允许用户 user_name 向表 table_name 中插入数据,通常在插入数据时可以使用序列来生成唯一的主键值。

http://www.lryc.cn/news/235385.html

相关文章:

  • 【周报2023-11-10】
  • 搜维尔科技:业内普遍选择Varjo头显作为医疗VR/AR/XR解决方案
  • 数据结构02附录01:顺序表考研习题[C++]
  • ClientDateSet:Cannot perform this operation on a closed dataset
  • python中列表的基础解释
  • 『力扣刷题本』:链表分割
  • FISCOBCOS入门(十)Truffle测试helloworld智能合约
  • Unity Text文本首行缩进两个字符的方法
  • TS的函数重载、类型合并、类型断言
  • JVM:字节码文件,类的生命周期,类加载器
  • 【IPC】消息队列
  • 内网穿透工具NPS(保姆级教程)
  • 最长公共子序列问题
  • 服务器数据恢复—热备盘同步中断导致Raid5数据丢失的数据恢复案例
  • 桥接模式-C++实现
  • PHP字符串函数的解析
  • 科研学习|研究方法——使用python强大的Statsmodel 执行假设检验和线性回归
  • 设计模式——责任链模式
  • nginx得if语句内proxy_pass不允许携带url部分,如何处理
  • CentOS7设置 redis 开机自启动
  • C++虚函数(定义,作用,原理,案例)
  • C#中.NET 6.0 控制台应用通过EF访问新建数据库
  • conda创建pytorch环境报错
  • 数据结构-插入排序实现
  • CGlib动态代理和JDK动态代理
  • 分类预测 | Matlab实现PSO-GRU-Attention粒子群算法优化门控循环单元融合注意力机制多特征分类预测
  • Python OpenCV 视频抽帧处理并保存
  • 英伟达AI布局的新动向:H200 GPU开启生成式AI的新纪元
  • Windows11 python3.12 安装pyqt6 pyqt6-tools
  • 反弹Shell