我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ORA-54029: Virtual column cannot be updated in trigger body ORACLE 报错 故障修复 远程处理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ORA-54029: Virtual column cannot be updated in trigger body ORACLE 报错 故障修复 远程处理

文档解释

ORA-54029: Virtual column cannot be updated in trigger body

Cause: Attempted to change the value of virtual column in a trigger body”

Action: This is not valid, change the trigger definition.

左右

ORA-54029:虚拟列在触发器体内不能更新

错误说明:

ORA-54029是Oracle数据库的一种错误,当在触发器体里更新虚拟列时报出。内部细节显示该错误是由Oracle引擎本身传播的,说明尝试在触发器体里更新虚拟列是不被允许了。虚拟列是Oracle数据库12c中新出现的概念,是由表中已有数据派生出来的列。

常见案例

假设有一个表table1,其中有3列,分别为num1,num2,num3。要创建一个虚拟列sum,其值等于num1+num2+num3。在AS部分,我们会创建一个虚拟列:

sum number GENERATED ALWAYS AS (num1+num2+num3)

现在我们以此虚拟列sum为触发条件,创建一个触发器,该触发器将对表中sum值大于1000的行更新。如下创建触发器:

CREATE OR REPLACE TRIGGER table1_trig

BEFORE UPDATE OF sum ON table1

FOR EACH ROW

WHEN (NEW.sum > 1000)

BEGIN

UPDATE table1 SET sum = NEW.sum;

END;

执行该触发器时,将会报出ORA-54029错误,表明在触发器体内不能更新虚拟列。

解决方法:

1、从表中删除该虚拟列。可以使用alter table table1的形式,将该虚拟列从表中删除,对虚拟列的操作体现在“drop column”是alter table的形式,然后在触发器体里,只需要更新其它两列源数据即可,即保留虚拟列的触发器:

CREATE OR REPLACE TRIGGER table1_trig

BEFORE UPDATE OF num1, num2 ON table1

FOR EACH ROW

WHEN (NEW.num1+NEW.num2 > 1000)

BEGIN

UPDATE table1 SET num1 = NEW.num1, num2 = NEW.num2;

END;

2、在触发器体里不更新虚拟列sum,只保留虚拟列条件:

CREATE OR REPLACE TRIGGER table1_trig

BEFORE UPDATE OF num1, num2 ON table1

FOR EACH ROW

WHEN (NEW.num1+NEW.num2 > 1000)

BEGIN

— DO NOT UPDATE sum

END;

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ORA-54029: Virtual column cannot be updated in trigger body ORACLE 报错 故障修复 远程处理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ORA-54029: Virtual column cannot be updated in trigger body ORACLE 报错 故障修复 远程处理

文档解释ORA-54029: Virtual column cannot be updated in trigger bodyCause: Attempted to change the value of virtual column
ORA-54029: Virtual column cannot be updated in trigger body ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-54038: Virtual column cannot be encrypted ORACLE 报错 故障修复 远程处理

文档解释ORA-54038: Virtual column cannot be encryptedCause: An attempt was made to create or alter a virtual column to have
ORA-54038: Virtual column cannot be encrypted ORACLE 报错 故障修复 远程处理
2023-11-04

ORA-25032: crossedition trigger cannot be created in ORA$BASE ORACLE 报错 故障修复 远程处理

文档解释ORA-25032: crossedition trigger cannot be created in ORA$BASECause: An attempt was made to create crossedition
ORA-25032: crossedition trigger cannot be created in ORA$BASE ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-01999: password file cannot be updated in SHARED mode ORACLE 报错 故障修复 远程处理

文档解释ORA-01999: password file cannot be updated in SHARED modeCause: The operation failed because the INIT.ORA parameter
ORA-01999: password file cannot be updated in SHARED mode ORACLE 报错 故障修复 远程处理
2023-11-04

ORA-31048: Unsaved resources cannot be updated ORACLE 报错 故障修复 远程处理

文档解释ORA-31048: Unsaved resources cannot be updatedCause: An attempt was made to update a resource that was never saved
ORA-31048: Unsaved resources cannot be updated ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-55332: virtual model cannot be used in this context ORACLE 报错 故障修复 远程处理

文档解释ORA-55332: virtual model cannot be used in this contextCause: A virtual model was used as input instead of a
ORA-55332: virtual model cannot be used in this context ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-32016: parameter “string” cannot be updated in SPFILE ORACLE 报错 故障修复 远程处理

文档解释ORA-32016: parameter string cannot be updated in SPFILECause: Database is mounted.Action: Unmount the database to
ORA-32016: parameter “string” cannot be updated in SPFILE ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-54033: column to be modified is used in a virtual column expression ORACLE 报错 故障修复 远程处理

文档解释ORA-54033: column to be modified is used in a virtual column expressionCause: Attempted to modify the data type of
ORA-54033: column to be modified is used in a virtual column expression ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-54032: column to be renamed is used in a virtual column expression ORACLE 报错 故障修复 远程处理

文档解释ORA-54032: column to be renamed is used in a virtual column expressionCause: Attempted to rename a column that was
ORA-54032: column to be renamed is used in a virtual column expression ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-04092: cannot string in a trigger ORACLE 报错 故障修复 远程处理

文档解释ORA-04092: cannot string in a triggerCause: A trigger attempted to commit or rollback.Action: Rewrite the trigger
ORA-04092: cannot string in a trigger ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-12996: cannot drop system-generated virtual column ORACLE 报错 故障修复 远程处理

文档解释ORA-12996: cannot drop system-generated virtual columnCause: An attempt was made to drop a virtual column generated
ORA-12996: cannot drop system-generated virtual column ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-54012: virtual column is referenced in a column expression ORACLE 报错 故障修复 远程处理

文档解释ORA-54012: virtual column is referenced in a column expressionCause: This virtual column was referenced in an
ORA-54012: virtual column is referenced in a column expression ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-54005: keyword VIRTUAL cannot be specified here ORACLE 报错 故障修复 远程处理

文档解释ORA-54005: keyword VIRTUAL cannot be specified hereCause: The keyword VIRTUAL was either repeated or incorrectly
ORA-54005: keyword VIRTUAL cannot be specified here ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-25003: cannot change NEW values for this column type in trigger ORACLE 报错 故障修复 远程处理

文档解释ORA-25003: cannot change NEW values for this column type in triggerCause: Attempt to change NEW trigger variables
ORA-25003: cannot change NEW values for this column type in trigger ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-02336: column attribute cannot be accessed ORACLE 报错 故障修复 远程处理

文档解释ORA-02336: column attribute cannot be accessedCause: An attempt was made to extract an attribute of an object type
ORA-02336: column attribute cannot be accessed ORACLE 报错 故障修复 远程处理
2023-11-04

ORA-32019: The parameter SPFILE cannot be updated in the server parameter file. ORACLE 报错 故障修复 远程处理

文档解释ORA-32019: The parameter SPFILE cannot be updated in the server parameter file.Cause: An attempt was made to update
ORA-32019: The parameter SPFILE cannot be updated in the server parameter file. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-39261: Cannot modify column in cluster. ORACLE 报错 故障修复 远程处理

文档解释ORA-39261: Cannot modify column in cluster.Cause: DBMS_METADATA_DIFF was comparing two clusters with different
ORA-39261: Cannot modify column in cluster. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-54025: Virtual column cannot have a default value ORACLE 报错 故障修复 远程处理

文档解释ORA-54025: Virtual column cannot have a default valueCause: Attempted to alter a virtual column to have a default
ORA-54025: Virtual column cannot have a default value ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-54027: cannot modify data-type of virtual column ORACLE 报错 故障修复 远程处理

文档解释ORA-54027: cannot modify data-type of virtual columnCause: Attempted to change the data-type of virtual column
ORA-54027: cannot modify data-type of virtual column ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-54002: only pure functions can be specified in a virtual column expression ORACLE 报错 故障修复 远程处理

文档解释ORA-54002: only pure functions can be specified in a virtual column expressionCause: Column expression contained a
ORA-54002: only pure functions can be specified in a virtual column expression ORACLE 报错 故障修复 远程处理
2023-11-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录