千家信息网

Oracle 数据库12c新特性总结(四)

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,【TechTarget中国原创】本文是Oracle数据库12c新特性的系列文章的第四篇,作者将重点介绍一些对开发者而言非常有用的新特性。相关阅读:Oracle 数据库12c新特性总结(一)、Oracl
千家信息网最后更新 2026年11月04日Oracle 数据库12c新特性总结(四)

【TechTarget中国原创】本文是Oracle数据库12c新特性的系列文章的第四篇,作者将重点介绍一些对开发者而言非常有用的新特性。相关阅读:Oracle 数据库12c新特性总结(一)、Oracle 数据库12c新特性总结(二)、Oracle 数据库12c新特性总结(三)

第四部分包括:

  • 如何在子表包含数据的情况下截断一个主表
  • 限制Top-N查询结果的记录
  • SQL*Plus的各种增强
  • 会话级序列
  • WITH语句的改善
  • 扩展数据类型

截断表CASCADE

在之前的版本中,在子表引用一个主表以及子表存在记录的情况下,是不提供截断此主表操作的。而在12c中的带有CASCADE操作的TRUNCATE TABLE可以截断主表中的记录,并自动对子表进行递归截断,并作为DELETE ON CASCADE服从外键引用。由于这是应用到所有子表的,所以对递归层级的数量是没有CAP的,可以是孙子表或是重孙子表等等。

这一增强摈弃了要在截断一个主表之前先截断所有子表记录的前提。新的CASCADE语句同样也可以应用到表分区和子表分区等。


SQL> TRUNCATE TABLE CASCADE;
SQL> TRUNCATE TABLE PARTITION CASCADE;


如果对于子表的外键没有定义ON DELETE CASCADE 选项,便会抛出一个ORA-14705错误。

对Top-N查询结果限制记录

在之前的版本中有多种间接手段来对顶部或底部记录获取Top-N查询结果。而在12c中,通过新的FETCH FIRST|NEXT|PERCENT语句简化了这一过程并使其变得更为直接。为了从EMP表检索排名前10的工资记录,可以用以下新的SQL语句:


SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 ROWS ONLY;


以下示例获取排名前N的所有相似的记录。例如,如果第十行的工资值是5000,并且还有其他员工的工资符合排名前N的标准,那么它们也同样会由WITH TIES语句获取。


SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 ROWS ONLY WITH TIES;


以下示例限制从EMP表中获取排名前10%的记录:


SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 PERCENT ROWS ONLY;


以下示例忽略前5条记录并会显示表的下5条记录:


SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;


所有这些限制同样可以很好的应用于PL/SQL块。


BEGIN
SELECT sal BULK COLLECT INTO sal_v FROM EMP
FETCH FIRST 100 ROWS ONLY;
END;


对SQL*Plus的各种增强

SQL*Plus的隐式结果:12c中,在没有实际绑定某个RefCursor的情况下,SQL*Plus从一个PL/SQL块的一个隐式游标返回结果。这一新的dbms_sql.return_result过程将会对PL/SQL 块中由SELECT 语句查询所指定的结果加以返回并进行格式化。以下代码对此用法进行了描述:


SQL> CREATE PROCEDURE mp1
res1 sys_refcursor;
BEGIN
open res1 for SELECT eno,ename,sal FROM emp;
dbms_sql.return_result(res1);
END;
SQL> execute mp1;


当此过程得以执行,会在SQL*Plus上返回格式化的记录。

显示不可见字段:在本系列文章的第一部分,我已经对不可见字段的新特性做了相关阐述。当字段定义为不可见时,在描述表结构时它们将不会显示。然而,你可以通过在SQL*Plus提示符下进行以下设置来显示不可见字段的相关信息:


SQL> SET COLINVISIBLE ON|OFF


以上设置仅对DESCRIBE 命令有效。目前它还无法对不可见字段上的SELECT 语句结果产生效果。

会话级序列

在12c中现在可以创建新的会话级数据库序列来支持会话级序列值。这些序列的类型在有会话级的全局临时表上最为适用。

会话级序列会产生一个独特范围的值,这些值是限制在此会话内的,而非超越此会话。一旦会话终止,会话序列的状态也会消失。以下示例解释了创建一个会话级序列:


SQL> CREATE SEQUENCE my_seq START WITH 1 INCREMENT BY 1 SESSION;
SQL> ALTER SEQUENCE my_seq GLOBAL|SESSION;


对于会话级序列,CACHE, NOCACHE, ORDER 或 NOORDER 语句会予以忽略。

WITH语句的改善

在12c中,你可以用SQL更快的运行PL/SQL函数或过程,这些是由SQL语句的WITH语句加以定义和声明的。以下示例演示了如何在WITH语句中定义和声明一个过程或函数:


WITH
PROCEDURE|FUNCTION test1 (…)
BEGIN
END;
SELECT FROM table_name;
/


尽管你不能在PL/SQL单元直接使用WITH语句,但其可以在PL/SQL单元中通过一个动态SQL加以引用。

扩展数据类型

在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的大小会从4K以及2K字节扩展至32K字节。只要可能,扩展字符的大小会降低对LOB数据类型的使用。为了启用扩展字符大小,你必须将MAX_STRING_SIZE的初始数据库参数设置为EXTENDED。

要使用扩展字符类型需要执行以下过程:

1. 关闭数据库

2. 以升级模式重启数据库

3. 更改参数: ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;

4. 执行 utl32k.sql as sysdba : SQL> @?/rdbms/admin/utl32k.sql

5. 关闭数据库

6. 以读写模式重启数据库

对比LOB数据类型,在ASSM表空间管理中,扩展数据类型的字段以SecureFiles LOB加以存储,而在非ASSM表空间管理中,它们则是以BasciFiles LOB进行存储的。

注意:一旦更改,你就不能再将设置改回STANDARD。



原文链接: http://www.searchdatabase.com.cn/showcontent_75994.htm


数据 语句 数据库 序列 类型 结果 特性 字段 过程 示例 限制 查询 大小 字符 工资 情况 版本 应用 函数 单元 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司排名 青岛互联网科技公司 有马互联网科技 碳银互联网科技有限公司 广州善班互联网科技 上游互联网科技 郑州华宇互联网科技 多迪互联网科技有限公司 深圳卡尔迅互联网科技有限公司怎么样 佩信高科技互联网 宁夏众和广鑫互联网科技有限公司 宁夏科技产业互联网案例 如何创新互联网科技 西安小鹰速贷互联网科技有限公司 互联网行业科技股 广东工业互联网大赛深圳学泰科技 互联网科技企业商标注意事项 互联网科技收购价值 悟空问答互联网科技 武汉亿视互联网科技有限公司 广东猪兼强互联网科技有限公司 科技和互联网公司 致骋互联网科技 碳银互联网科技有限公司 昭通云南众福互联网科技有限公司 厦门千工互联网科技有限公司 河南住房之家互联网科技 神州科技互联网有限公司 绵阳真晨互联网科技有限公司 10位科技互联网大佬
0