开发过程中碰到了ora-04091错误:表XX发生了错误,触发器/函数不能读
以下是模拟场景:
表PRODUCTS:
CREATE TABLE CKSP.PRODUCTS
(
ID NUMBER(1) NOT NULL,
NAME VARCHAR2(100) NOT NULL,
PRICE1 NUMBER(1) NOT NULL,
PRICE2 NUMBER(1) NOT NULL
)
TABLESPACE USERS
NOLOGGING
PCTFREE 10
PCTUSED 0
INITRANS 1
MAXTRANS 255
STORAGE(BUFFER_POOL DEFAULT)
NOPARALLEL
NOCACHE
并声明触发器TRG_PRODUCTS_INSERT:
CREATE OR REPLACE TRIGGER TRG_PRODUCTS_INSERT
BEFORE INSERT
ON PRODUCTS
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
declare
varCount number;
begin
select count(id) into varCount from products where name = :new.name;
if varCount > 0 then
varCount:= varCount +1;
:new.name :=varCount||'_'||:new.name;
end if;
end;
若执行以下SQL则会引发ORA-04091错误
begin
insert into products values(1,'p1',1,2);
insert into products
select 2 as id ,name ,price1,price2 from products where id= 1;
end;
解决方法:修改SQL 如下
declare
varName varchar2(100);
varPrice1 number;
varPrice2 number;
begin
insert into products values(1,'p1',1,2);
select name,price1,price2 into varName,varPrice1,varPrice2 from products where id =1;
insert into products values(2,varName,varprice1,varPrice2);
end;
在此情形中不能使用INSERT INTO XXX SELECT .... 语句,而应使用变量来保存值
这也许只是众多情形之一,仅供参考.
分享到:
相关推荐
ORA-01036:非法的变量名/编号 oracle特有的错误
出现原因,是因为在更新的的表和读取的表是同一个表。 CREATE or replace TRIGGER T_userupdateT BEFORE update ON T_user REFERENCING OLD AS old NEW AS N_ROW FOR EACH ROW DECLARE U_xtfidemp1 varchar(36); u...
使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查。使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查 使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查
ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法ora-00604 错误 解决 方法
oracle数据库ora-01152和ora-01110的解决办法
NULL 博文链接:https://rongren.iteye.com/blog/1886071
Drop goldengate用户时,报ORA-00604 ORA-20782 ORA-06512错误
Oracle 11gr2连Oracle 19c 报ORA-28040 ORA-01017解决方法
oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。
NULL 博文链接:https://lyh7609.iteye.com/blog/516672
oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht
在运行查询SELECT * FROM V$SESSION 会出现ORA-29275:部分多字节字符的错误,这是什么原因开始我不得其解,网上也没有介绍什么好办法。本文给出答案。
创建物化视图ORA-12014错误解决方法 创建物化视图ORA-12014错误解决方法
ORA-12560 TNS 协议适配器错误
ORACLE ORA-00132 ORA-00214
用oracle数据库新建连接时遇到ora-12505,此问题解决后又出现ora-12519错误,郁闷的半天,经过一番折腾问题解决,下面小编把我的两种解决方案分享给大家,仅供参考。 解决方案一: 今天工作时在新建连接的时候遇到...
ora-01720 授权选项对于'xxxx'不存在的解决方法,希望有帮助。
oracle启动失败,ORA-00702报错,windows,linux系统下解决办法
离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法,在解决ORA-01033的过程中,又出现ORA-01145 * 第 1 行出现错误: ORA-01145: 除非启用了介质恢复, 否则不允许立即脱机 接着的解决步骤