当前位置:数据库 > Oracle >>

oracle 中 update trigger 中 嵌入 select 语句出错

CREATE OR REPLACE TRIGGER BFINSERT_uup_company_baseinfo BEFORE INSERT OR UPDATE ON uup_company_baseinfo REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE c_num NUMBER; BEGIN if inserting then SELECT COUNT(*) INTO c_num FROM uup_company_baseinfo t WHERE NVL(t.is_deleted,'0')='0' AND t.active_mark='0' AND t.status_code='20' AND t.bsp_company_code=:NEW.bsp_company_code; IF c_num > 0 THEN RAISE_APPLICATION_ERROR(-20001, '客户公司已存在'); END IF; end if; if updating then SELECT COUNT(*) INTO c_num FROM uup_company_baseinfo t WHERE NVL(t.is_deleted,'0')='0' AND t.active_mark='0' AND t.status_code='20' AND t.bsp_company_code=:NEW.bsp_company_code; if :NEW.IS_DELETED='0' AND :NEW.ACTIVE_MARK='0' AND :NEW.STATUS_CODE='20' AND c_num > 0 THEN RAISE_APPLICATION_ERROR(-20001, '更新错误,改公司已存在'); END IF; end if; END; --------------------反正就是不能在update 里面 嵌入 select语句 嵌入 就报错,我菜鸟 求高手指点。。。
追问:求 正确 修改 : 应该如何修改  ???这个不就是 修改的的新sal不能小于 老的 sal嘛   少就抛错    这个跟我的问题有什么出路哦,我的问题是 不能在update  里面嵌套 select 语句 而且 是 求修改正确 !!! 谢谢 回答!!!大哥啊 我需要 用NEW.bsp_company_code这个字段查数据库啊 ,  我的意思是:不想在修改数据后 数据库有重复的记录     跪求 大侠 大哥  大嫂 们  我是一只小小的菜鸟   求给力啊!!!!!!
答案:Oracle 的 FOR EACH ROW 触发器, 不允许在 触发器里面, 
SELECT / UPDATE / DELETE 自己这个表。
你的触发器是 
BEFORE INSERT OR UPDATE
ON uup_company_baseinfo
FOR EACH ROW

但是触发器代码里面有
SELECT ... FROM uup_company_baseinfo 
是不允许的。
因此要抱错。
其他:create or replace trigger check_sal_cq
	before update of sal on emp
	for each row
when (new.sal < old.sal)
begin
        raise_application_error(-20001, '工资不能比以前的少!');
end;

能看明白的话,你这个问题就有点好理解了 SELECT COUNT(*) INTO c_num FROM uup_company_baseinfo t
    WHERE NVL(t.is_deleted,'0')='0' AND t.active_mark='0'
    AND t.status_code='20' AND t.bsp_company_code=:NEW.bsp_company_code;
 你看看可不可以把下上面select 的语句改成
if NVL(old.is_deleted , '0') = '0' and old.active_mark = '0' and old.status_code = '20' .....then
    c_num = 1;
end if; 如果仅仅是查重,最好创建unique index 让数据库帮你维护唯一性,而不是用trigger。 

上一个:关于Oracle初学者的几个简单问题
下一个:求Oracle rac或者dataguard相关视频?

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,