after delete 没有 :new
after update 也没有 :new
after update 也没有 :new
解决方案 »
- select数据的时候,没有数据,怎么能给所有select字段赋默认值
- 求一条UPDATE语句!! 谢谢!!!!!!!!!!!!!!!!!!!!11111!!!!!!!!!!11
- oracle实现sqlserver isdate函数方法
- 求助关于ADO方式连接ORACLE的问题[第一次求助]
- orcal分类统计(PLSQL)———急急急急急!!!
- oracle10g连接oracle8i问题
- 如何在视图中进行排序?!!
- 谁能告诉我怎样一步一步搭建ORACLE服务器?谢谢!
- ORACLE中type对象的方法如何创建及使用?
- 各位,请问在oracle--PL/SQL中执行存储过程是否有类似SQL Server的exec 命令
- plsql中文乱码问题...
- oracle 10g rac 配置asm出错,求帮助
create or replace trigger tri_User
after insert or update or delete
on USER_MAPPING
referencing old as old_value
new as new_value
for each row
declare UNIQUEID varchar(32);
IDCARD varchar(18);
PHONENUM varchar(11);
c_num integer;
begin
SELECT COUNT(*) INTO c_num FROM USERS WHERE UNIQUEID = :new_value.UNIQUEID;
IF c_num = 1 THEN /* 1 存在 更新 删除 */
-- update UNIQUEID
--dbms_output.put_line(1);
if updating then
update USERS set IDCARD = :new_value.IDCARD,PHONENUM=:new_value.PHONENUM
where UNIQUEID = :new_value.UNIQUEID;
end if;
-- delete
if deleting then
delete from USERS where UNIQUEID = :old_value.UNIQUEID;
end if;
ELSIF c_num < 1 THEN -- 0 不存在 就插入 1 不执行
--insert 唯一ID (UNIQUEID ) 身份证号(IDCARD)手机号(PHONENUM) *\
-- insert UFNIQUEID
-- dbms_output.put_line(2);
if :new_value.IDCARD is null THEN
IDCARD := '';
end if;
if :new_value.PHONENUM is null THEN
PHONENUM :='';
end if;
if inserting then
insert into USERS(UNIQUEID,IDCARD,PHONENUM)
values(:new_value.UNIQUEID, :new_value.IDCARD, :new_value.PHONENUM);
end if;
END IF;
end;
delete 没有 :new.
(
UNIQUEID VARCHAR(32) not null,
STATE NUMBER(2),
VERSION_TIME DATE,
IS_STOP NUMBER(2),
PHONENUM VARCHAR(11),
IDCARD VARCHAR(18),
BARCODE NVARCHAR2(50),
USER_LEVEL NVARCHAR2(10),
constraint PK_USERS primary key (UNIQUEID)
);
这个是用户mapping 表create table "dbo".USER_MAPPING
(
MAPPID NVARCHAR(32) not null,
UNIQUEID NVARCHAR2(32),
CARDID nchar(32),
ACCOUNTTYPE NUMBER(2),
CARD NVARCHAR2(20),
NAME NVARCHAR2(10),
GENDER NUMBER(2),
IDCARD NVARCHAR2(18),
PHONENUM nvarchar2(30),
NICKNAME VARCHAR2(64),
HEAD_IMG_URL nvarchar2(256),
EMAIL NVARCHAR2(128),
IS_APPLY_MEMBER NVARCHAR2(10),
UNIONID NVARCHAR2(100),
REMARK NVARCHAR2(500),
CREATETIME DATE,
SUBSCRIBE NUMBER(2),
"VipName" VARCHAR(30),
"Viprank" VARCHAR2(30),
PRANK VARCHAR2(30),
STATE VARCHAR2(30),
IDPRANK NUMBER(2),
BIRTHTIME DATE,
AGE CHAR(5),
ADDRESS VARCHAR2(50),
AREA VARCHAR2(50),
ZIPCODE NUMBER(8,0),
VOCATION VARCHAR2(30),
TELPHONE VARCHAR2(30),
STATUS CHAR(10),
INCOME NUMBER(18,2),
"Vehicle" VARCHAR2(30),
CARNUM NUMBER(8),
VALIDITY VARCHAR2(30),
LOVE VARCHAR2(30),
IS_INFORMATION CHAR(2),
PASSWORD VARCHAR2(256),
constraint PK_USER_MAPPING primary key (MAPPID),
constraint AK_KEY_2_USER_MAP unique ()
);
可以没有主外键关系的
delete无效是因为 你delete 的时候 没有 :new.uniqueid 所以 查不到记录。
建议你两个分开, 在第一个 把delete 给拿掉,第二个的话 create or replace trigger tri_User_del
after delete
on USER_MAPPING
referencing old as old_value
new as new_value
for each row
declare UNIQUEID varchar(32);
IDCARD varchar(18);
PHONENUM varchar(11);
c_num integer;
begin
SELECT COUNT(*) INTO c_num FROM USERS WHERE UNIQUEID = :old_value.UNIQUEID;
dbms_output.put_line(c_num);
IF c_num = 1 THEN /* 1 存在 更新 删除 */
-- update UNIQUEID
--dbms_output.put_line(1);
if updating then
update USERS set IDCARD = :new_value.IDCARD,PHONENUM=:new_value.PHONENUM
where UNIQUEID = :new_value.UNIQUEID;
end if;
-- delete
if deleting then
delete from USERS where UNIQUEID = :old_value.UNIQUEID;
end if;
ELSIF c_num < 1 THEN -- 0 不存在 就插入 1 不执行
--insert 唯一ID (UNIQUEID ) 身份证号(IDCARD)手机号(PHONENUM) *\
-- insert UFNIQUEID
-- dbms_output.put_line(2);
if :new_value.IDCARD is null THEN
IDCARD := '';
end if;
if :new_value.PHONENUM is null THEN
PHONENUM :='';
end if;
if inserting then
insert into USERS(UNIQUEID,IDCARD,PHONENUM)
values(:new_value.UNIQUEID, :new_value.IDCARD, :new_value.PHONENUM);
end if;
END IF;
end;自己修改一下。
第一次插入
insert into user_mapping(mappid,uniqueid,phonenum) values
('B530594F8A714D227E3244482A846109','123','6666')
第二次插入
insert into user_mapping(mappid,uniqueid,phonenum) values
('f530594F8A714D227E3224482A846109','123','7777')
建议你 还是 把你的流程用 流程图或者什么的画出来,
或者做个大概的提纲,
1.在insert 时候 如果uniqueid =1 做什么操作
如果=0 的时候 做什么操作
2. 在delete 时候如果uniqueid =1 做什么操作
如果=0 的时候 做什么操作
3 在update 的时候如果uniqueid =1 做什么操作
如果=0 的时候 做什么操作
如果容易搞混掉,那就分成三个触发器写,
如果查询不到uniqueid就insert,求代码啊大神。