Oracle11G新特性——虚拟列

C语言 在合并编译 ( 多.c文件 ) 情况下 实现 linked list ( 链表 ) 教程 . 更新ing 写在前面  依旧是参考借鉴了 浙江大学 温老师 的视频教程,很不错,在中国大学MOOC上,强力推荐!  虽说有借鉴,但是能保证的是每一行代码都是我自己经过理解后手敲出来的,所以才来做了这部分的教程。  最后,带 * 字符是我个人觉得可以添加的功能,按理来讲是可以不看的,而且大概率是可以有更好的改进的。  PS: 文章还在更新,如果文字蓝了(有超链接),说明写完了,如果没蓝,说明我在开军舰.jpg 源代码:  这里→源代码. 第一步:前置工作  先说一下每一篇都会出现 main 函数的,stage1 只是给没 阅读详情

打算写一系列的文章介绍11g的新特性和变化。

Oracle11g增加了表的虚拟列,这个列的数据并没有存储在数据文件中,而是Oracle通过列数据的生成放到了数据字典中。

 

看一个简单的虚拟列的例子:

SQL> CREATE OR REPLACE FUNCTION F_GETTYPE(P_TYPE IN VARCHAR2) RETURN NUMBER
2 DETERMINISTIC AS
3 BEGIN
4 IF P_TYPE IN ('TABLE', 'INDEX', 'LOB', 'TABLE PARTITION', 'INDEX PARTITION', 'LOB PARTITION',

5 'TABLE SUBPARTITON', 'INDEX SUBPARTITION', 'LOB SUBPARTITION', 'CLUSTER') THEN
6 RETURN 1;
7 ELSE
8 RETURN 0;
9 END IF;
10 END;
11 /

函数已创建。

SQL> CREATE TABLE T_VIRTUAL_COLUMN
2 (
3 ID NUMBER PRIMARY KEY,
4 V_LENGTH AS (CEIL(LENGTH(TO_CHAR(ID)) / 2) 1 LENGTH(NAME) LENGTH(TYPE)),
5 NAME VARCHAR2(30),
6 V_NAME CHAR(50) GENERATED ALWAYS AS (LOWER(NAME)) VIRTUAL,
7 TYPE VARCHAR2(30),
8 V_TYPE AS (F_GETTYPE(TYPE))
9 );

表已创建。

上面例子中,V_LENGTH、V_NAME和V_TYPE都是虚拟列,虚拟列的数值是通过真实列中的数据计算而来的。

虚拟列的位置可以放在它参考的列的前面,也可以包括多个实际列的值,但是不能引用其他的虚拟列:

SQL> CREATE TABLE T_VIRTUAL_COLUMN_ERR
2 (ID NUMBER,
3 V_ID1 AS (ID * 5),
4 V_ID2 AS (V_ID1 45)
5 );
V_ID1 AS (ID * 5),
*
第 3 行出现错误:
ORA-54012:
在列表达式中引用了虚拟列

虚拟列的完整写法如上面例子中V_NAME列,包括列名、数据类型、GENERATED ALWAYS关键字、AS加列表达式和VIRTUAL关键字。其中GENERATED ALWAYS和VIRTUAL为可选关键字,主要用于描述虚拟列的特性,写与不写没有本质区别。而列的数据类型如果忽略,那么Oracle会根据AS后面的表达式最终结果的数据类型来确定虚拟列的数据类型。

虚拟列可以使用Oracle自带的函数,也可以使用用户定义的函数,不过对于用户定义的函数要求必须声明函数的确定性:

SQL> CREATE OR REPLACE FUNCTION F_TEST RETURN NUMBER AS
2 BEGIN
3 RETURN 1;
4 END;
5 /

函数已创建。

SQL> CREATE TABLE T_VIRTUAL_COLUMN_DETER
2 (ID NUMBER, VID AS (F_TEST));
(ID NUMBER, VID AS (F_TEST))
*
第 2 行出现错误:
ORA-54016:
指定了无效的列表达式

IXDBA.NET社区论坛

虚拟列必须是对实际列进行操作后的结果,不能像上面这样直接写一个返回常数的函数,换句话说,表不能只包括虚拟列:

SQL> CREATE OR REPLACE FUNCTION F_TEST(P_IN IN NUMBER) RETURN NUMBER AS
2 BEGIN
3 RETURN 1;
4 END;
5 /

函数已创建。

SQL> CREATE TABLE T_VIRTUAL_COLUMN_DETER
2 (
3 ID NUMBER,
4 V_ID AS (F_TEST(ID))
5 );
V_ID AS (F_TEST(ID))
*
第 4 行出现错误:
ORA-30553:
函数不能确定

现在错误信息显示,函数没有声明确定性:

SQL> CREATE OR REPLACE FUNCTION F_TEST(P_IN IN NUMBER) RETURN NUMBER DETERMINISTIC AS
2 BEGIN
3 RETURN 1;
4 END;
5 /

函数已创建。

SQL> CREATE TABLE T_VIRTUAL_COLUMN_DETER
2 (
3 ID NUMBER,
4 V_ID AS (F_TEST(ID))
5 );

表已创建。

Oracle虽然在创建创建的时候会检查函数的确定性,在表建立之后,却可以将函数替换为非确定性函数:

SQL> INSERT INTO T_VIRTUAL_COLUMN_DETER (ID) VALUES (1);

已创建 1 行。

SQL> SELECT * FROM T_VIRTUAL_COLUMN_DETER;

ID V_ID
---------- ----------
1 1

SQL> DROP FUNCTION F_TEST;

函数已删除。

SQL> SELECT * FROM T_VIRTUAL_COLUMN_DETER;
SELECT * FROM T_VIRTUAL_COLUMN_DETER
*
第 1 行出现错误:
ORA-00904: "YANGTK"."F_TEST":

标识符无效

python实现边缘检测Canny算子 (附完整源码) 阅读详情

相关推荐

从ESP/ABS选型看轮速传感器:为什么你的车用了AK+PWM+7/14mA三种协议?

本文深入解析了汽车轮速传感器的三种主流协议(7/14mA电流型、PWM型和AK协议型)及其混合应用场景。通过对比不同协议的技术特点、成本效益和工程挑战,揭示了现代车辆采用多种传感器协议背后的设计逻辑,包括成本控制、性能平衡和冗余设计等关键因素。

weixin_29266679的博客 532

oracle删除无效的列,怎么修改删除虚拟列 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...

SQL> drop table t_fun;Table droppedSQL> create table t_fun(a varchar2(10) not null,b varchar2(10) not null,c char(1000) not null);Table createdSQL> select dbms_stats.create_extended_stats(own...

weixin_39591455的博客 733

TMS320C6678开发笔记1-6---C6678单核烧写程序

第6节 单核烧写加载程序 6.1节 TI参考文档 参考文档:《KeystoneI Bootloader Resources and FAQ》讲的非常好,建议一定要看 https://processors.wiki.ti.com/index.php/KeystoneI_Bootloader_Resources_and_FAQ#Direct_Boot_Examples_.28without_IBL.29 里面有三个工程: C6678 EVM SPI boot example C6657 EVM ..

kunkliu的博客 5695

Oracle虚拟列测试

3、删除虚拟列,一定加括号。

364

学Simulink——基于直流电机的建模与控制场景实例:他励直流电机的起动与制动过程仿真

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

xiaoheshang_123的博客 227

MTK平台Wi-Fi学习--wifi channel 通过国家码进行功率限制和wifi eFEM 基本配置和wifi Tx SEM问题

本文介绍了WiFi功率限制配置和eFEM硬件设置方法。在功率限制方面,通过国家码可针对不同信道设置功率上限,需在rlm_txpwr_init.h文件中配置信道和功率值(单位0.5dBm),WiFi6的HE_TB模式还可分RU设置。eFEM硬件配置需参考平台设计,注意VDET接口处理,首次使用建议提交HW/SW案例审核。软件配置需获取专用FEM包,包含NVRAM、GPIO等文件,按指导合并后版本才会切换为eFEM版本。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 484

oracle12虚拟列,ORACLE-1:虚拟列影响alter修改表字段操作!

一、问题:昨天想要修改Oracle数据库中某张表的某个字段,发现怎么都修改不成功!!!并给出了如下提示:ORA-54031:要删除或修改的列由某个虚拟列表达式使用二、啥是“虚拟列” 【不可见的列】虚拟列的创建一般是数据库自动创建的,当然也可以手动创建。什么时候创建:表中的数据,大量或频繁的发生变化的时候,数据库一般会自动创建虚拟列!我觉得截一个漂亮的图,比我的一个字一个字的敲的更容易理解!哈哈哈!...

weixin_39946364的博客 395

【大模型】SpringBoot整合LangChain4j实现RAG检索实战详解

SpringBoot整合LangChain4j实现RAG检索实战详解

congge 1万+

【Oracle专栏】Oracle中的虚拟列

(1) 只有堆组织表(heap-organized table)才可以定义虚拟列(2) 虚拟列不能引用其他的虚拟列(3) 虚拟列只能引用自己表中的列, 不能引用其他表中的列。(4) 虚拟列值只能是标量 scalar value (a single value, not a set of values)(5)虚拟类自动计算,不可插入Oracle 采用虚拟列占用CPU时间,但节约了磁盘的存储空间项目管理--相关知识项目管理-项目绩效域1/2-优快云博客。

weixin_42081167的博客 1295

SAP采购申请审批策略配置简介

SAP采购申请审批策略配置简介 1、CT04创建特征

我小时候很黑的博客 8162

【MATLAB代码】二维平面的TOA定位,GDOP(几何精度因子)和CRLB(克拉美罗下界)计算与输出

本文介绍了一个MATLAB程序,用于计算二维定位场景中的几何精度因子(GDOP)和克拉美罗下界(CRLB)。该程序针对单目标和四个锚点配置,通过网格扫描法计算空间各点的GDOP分布,并以等高线图可视化展示。程序还可计算特定位置的理论定位精度下限(CRLB),输出X/Y方向标准差和GDOP值。核心算法通过构建几何矩阵和费舍尔信息矩阵实现,考虑了测量误差影响,并处理了特殊位置情况。程序提供了完整的源代码和参数修改说明,适用于定位系统精度分析。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 803

Oracle 修改表 虚拟列

添加表列 ALTER TABLE [schema_name.] table_name { ADD column_name data_type [column_attributes] | --添加表列 DROP COLUMN column_name | --删除表列 MODIFY column_name data_type [column_attributes] --修改表列 } table_name 要修改的表名称 colu.

qq_43085982的博客 1383

损失函数大汇总(六十一)(Signed Distance Map Loss附公式推导与代码)

摘要 本文介绍了Signed Distance Map (SDM) Loss,一种将形状先验直接融入分割任务的方法。SDM将每个像素表示为到目标边界的带符号距离(内部为负,外部为正),相比二值mask能更连续地表达形状几何信息。SDM Loss的核心思想是让网络学习这个隐式形状场,通过可微的Heaviside函数近似将SDM转换为分割结果。文中重点分析了一种product-based regression loss,它能同时关注距离数值和内外符号的正确性,对边界区域尤为敏感。SDM Loss通常与传统的分割

悦学共鸣,温柔以待,汇聚光芒,共同成长 188

oracle11g 虚拟列,Oracle11G新特性——虚拟列

打算写一系列的文章介绍11g的新特性和变化。Oracle11g增加了表的虚拟列,这个列的数据并没有存储在数据文件中,而是Oracle通过列数据的生成放到了数据字典中。看一个简单的虚拟列的例子:SQL> CREATE OR REPLACE FUNCTION F_GETTYPE(P_TYPE IN VARCHAR2) RETURN NUMBER2 DETERMINISTIC AS3 BEGIN4...

weixin_33955307的博客 463

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

oracle11g 虚拟列,Oracle11新特性——虚拟列(二)

打算写一系列的文章介绍11g的新特性和变化。Oracle11g增加了表的虚拟列,这个列的数据并没有存储在数据文件中,而是Oracle通过列数据的生成放到了数据字典中。这篇介绍虚拟列的进一步的研究。对于虚拟列又有一点新的研究。虽然虚拟列不能参考其他的虚拟列,但是可以通过其他的方法来变相实现:SQL> CREATE TABLE T_V_COL_P2 (3 ID NUMBER PRIMARY...

weixin_28991555的博客 306

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ORACLE 11g新特性-虚拟列

在上周六的ACOUG活动中,张乐奕(kamus)老师分享了一个关于ORACLE 11g新特性的主题,本人觉得在10g这个过渡版本已成过去(官网已不提供10g版本的介质下载),12c马上发布,11g已经成熟而有些人还没有开始使...

congfuwei3949的博客 166

oracle 创建虚拟列,Oracle 11g的新特性:虚拟列

今天我将为大家解释 Oracle 11g 数据库的新特性 —— 虚拟列介绍在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引。现在 Oracle 11g 允许我们直接在表上使用虚拟列来存储表达式。来看一个简单的例子:CREATETABLEEMP(EMPNONUMBER(6),SAL...

weixin_28979345的博客 654

oracle不允许对虚拟列执行,【oracle】11g新特性虚拟列

之前做数据仓库的时候没有用到虚拟列,最近在看其他人设计的数据模型的时候,发现用了很多虚拟列,12g都出了,我还在学习11g特性,呵呵,要补的功课还是很多啊。虚拟列(virtualcolumn):并没有存储在数据文件中,而是通过列数据的生成放到了数据字典中,通过真实列的数值计算而来,位置可以随意摆放,可以引用多个实际列的值,但是不能引用其他的虚拟列(但可以使用其他宾变通的方式),也不能只包含虚拟列。...

weixin_39779739的博客 731

oracle如何查询虚拟列,Oracle11g新特性之--虚拟列(VirtualColumn)

Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引。 我们从 Oracle 官Oracle 11g新特性之--虚拟列(Virtual Column)Oracle 11G虚...

weixin_35737757的博客 1055

Oracle 11g 新特性(一)-- 虚拟列

数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Oracle11g 增加了虚拟列的新特性, 具体说明如下: 1>...

congjiao6983的博客 132

oracle10g 虚拟列,Oracle 11g新特性虚拟列分区

现在有个需求:一个单据表要按照月份来分区,如果是在Oracle 10g上,只能再加一个字段。在Oracle 11g以后就不一样了,可以用虚拟列处理。SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle D...

weixin_28931449的博客 148

oracle generated always,ORACLE 11g新特性-虚拟列

建表时指定虚拟列,示例代码如下:SQL> create table dbdream(id number,identifier varchar2(255),keyword varchar2(20),fond_code varchar2(20) generated always as(substr(identifier,1,2)));Table created.也可以在已有的表中增加虚拟列:SQ...

weixin_40005542的博客 1552

Oracle 11g 数据库的新特性--虚拟列

Oracle 11g 数据库的新特性 —— 虚拟列 介绍 在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引。 现在 Oracle 11g 允许我们直接在表上使用虚拟列来存储表达式。 来看一个简单的例子: CREATE TABLE EMP  (    EMPNO     NU

liumm0000的专栏 2288

[oracle 11g 新特性] virtual column虚拟列

总结:虚拟列可以使用于一些特殊场合,实质是类似于函数列(即以 表中已有的列 经过函数运算得来),“虚拟列不存储在数据库中,是在执行查询时由oracle后台计算出来返回给用户”,因此虚拟列不会增加存储空间,但是由于需要计算,需要消耗额外的CPU Time。 ---创建表时使用虚拟列 SQL> create table test4(id number,name varchar2(3...

deyu2539的博客 499

Oracle 11g 的新特性 —— 虚拟列

今天我将为大家解释 Oracle 11g 数据库的新特性 —— 虚拟列介绍在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引。现在 Oracle 11g 允许我们直接在表上使用虚拟列来存储表达式。

yu766588220的专栏 451

oracle+11g+rda,Oracle11g新特性之--虚拟列(VirtualColumn)

Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引。 我们从 Oracle 官Oracle 11g新特性之--虚拟列(Virtual Column)Oracle 11G虚...

weixin_39910523的博客 319

oracle+字段+virtual,Oracle 11g新特性之--虚拟列(Virtual Column)

Oracle 11g新特性之--虚拟列(Virtual Column)Oracle 11G虚拟列Virtual Column介绍Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值。定义一个虚拟列的语法:column_name [datatype] [GENERATED ALWAYS] AS [expression] [VIRTUAL]1...

weixin_42122306的博客 1610
上一篇: ORACLE获取操作系统目录下文件列表
下一篇: sql多表连接查询inner join, left join , right join ,full join ,cross join
suncrafted
博客等级 码龄24年 103粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值