Oracle的触发器的问题

仓井NULL 2017-01-03 07:40:06
create or replace trigger patient_BEF
before update on his.zy_patient
for each row

declare
begin
insert into itf.tb_inpatient
( IR_ID)
values
( '8888888888');

end patient_BEF;
...全文
367 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2017-01-04
  • 打赏
  • 举报
回复
原表中没有记录,并不会触发这个 update 触发器,所以在目标表中,也不会有新记录;
仓井NULL 2017-01-04
  • 打赏
  • 举报
回复
引用 5 楼 wmxcn2000 的回复:
楼主贴一下建表语句,和 你的 update 语句
我的update逻辑是不是有问题,感觉怪怪的 我要做的触发器是在update原表没有的一条记录,但是要在目标表生成该记录
仓井NULL 2017-01-04
  • 打赏
  • 举报
回复
引用 5 楼 wmxcn2000 的回复:
楼主贴一下建表语句,和 你的 update 语句
装触发器的表: create table ZY_PATIENT_INFORMATION ( PATIENT_NO NUMBER(20) not null, JS_NO NUMBER(2), NAME VARCHAR2(20), ZYCS NUMBER(5), JZKH VARCHAR2(50), BAH VARCHAR2(20), BIRTHDAY DATE, SEX NUMBER(1), MARRY_STATUS NUMBER(1), NATION_CODE NUMBER(4), NATION_NAME VARCHAR2(30), MZ_NO NUMBER(4), MZ_NAME VARCHAR2(30), OCCUPATION_CODE NUMBER(4), OCCUPATION_NAME VARCHAR2(30), JG VARCHAR2(20), SOCIAL_ID VARCHAR2(18), HOME_TEL VARCHAR2(16), HOME_ADDRESS VARCHAR2(100), HOME_ZIP VARCHAR2(6), EMPLOYER VARCHAR2(100), EMPLOYER_TEL VARCHAR2(16), EMPLOYER_ZIP VARCHAR2(6), EMPLOYER_ADDRESS VARCHAR2(60), DBR VARCHAR2(50), RELATION_NAME VARCHAR2(8), RELATION_CODE NUMBER(2), RELATION_ADDRESS VARCHAR2(60), RELATION_TEL VARCHAR2(16), RELATION_ZIP VARCHAR2(6), CONTRACT_CODE NUMBER(4), CONTRACT_NAME VARCHAR2(30), INSURE_CODE VARCHAR2(6), INSURE_NAME VARCHAR2(30), EMP_ID NUMBER(20), EMP_NAME VARCHAR2(200), YL_ID VARCHAR2(40), PZH VARCHAR2(20), SHBZH VARCHAR2(20), DBJZ_RQ DATE, RETIRE_FLAG NUMBER(1), BRLB NUMBER(2), BRXZ VARCHAR2(10), DBTC_RQ DATE, ADMISS_DATE DATE, PREOUT_DATE DATE, OUT_DATE DATE, JZ_DATE DATE, ADMISS_KS_CODE VARCHAR2(10), ADMISS_KS_NAME VARCHAR2(30), ADMISS_BED VARCHAR2(6), LEND_KS VARCHAR2(10), LEND_BED VARCHAR2(6), CURR_KS VARCHAR2(10), CURR_BED VARCHAR2(6), DIAG_CODE NUMBER(15), DIAG_NAME VARCHAR2(100), YS_CODE VARCHAR2(10), YS_NAME VARCHAR2(10), INFANT_FLAG NUMBER(1), INFANT_BRXZ VARCHAR2(10), JTBF_FLAG NUMBER(1), JTBF_SPRQ DATE, BORROW_FLAG NUMBER(1), STATUS NUMBER(10), JLXH1 NUMBER(10) default 0, JLXH2 NUMBER(10) default 0, JLXH3 NUMBER(10) default 0, JLXH4 NUMBER(10) default 0, JLXH5 NUMBER(10) default 0, DJ_FLAG NUMBER(1) default 0, MZYS VARCHAR2(10), ZZYS VARCHAR2(10), OP_ID VARCHAR2(5), CURR_BQ VARCHAR2(10), SLOCK VARCHAR2(20), BQDM VARCHAR2(10), SCRQ DATE default to_date('1900/01/01','yyyy/mm/dd'), PROTECT VARCHAR2(30) default '00000000000000000000', OUT_DIAG_CODE NUMBER(5), OUT_DIAG_NAME VARCHAR2(100), JGBM VARCHAR2(8), MPATIENT_NO NUMBER(10) default 0, SBRQ DATE, OUT_DIAY_CODE NUMBER(5), KYE NUMBER(12,2) default 0, CBXZ VARCHAR2(30), CB_DATE DATE, JFNX NUMBER(5), SECOND_BRXZ VARCHAR2(20), BED_TYPE NUMBER(10), IC_FLAG NUMBER(1), SERIAL_NO VARCHAR2(16), INDI_ID VARCHAR2(40), ZDXSLB VARCHAR2(3), FYBH NUMBER(2), TXMZQYBZ NUMBER(1), LJZYCS NUMBER(3), HFRQ DATE, HFBZ NUMBER(1) default 0, HLZH VARCHAR2(20), TKBZ NUMBER(1), FSJBZ NUMBER(1) default 0, QFJE NUMBER(10,2), CYZT VARCHAR2(20), OUT_DIAG_NAME2 VARCHAR2(50), OUT_DIAG_NAME3 VARCHAR2(50), FMLX NUMBER(1), YNKH VARCHAR2(45), BZ VARCHAR2(100), GJTJ_FLAG NUMBER(1), QJCS NUMBER(2), DNZHJE NUMBER(10,2), LNZHJE NUMBER(10,2), YSZH VARCHAR2(10), QFXE NUMBER(16,2), OUT_DIAG_CODE2 NUMBER(5), OUT_DIAG_CODE3 NUMBER(5), JLXH6 NUMBER(10), CENTER_ID VARCHAR2(20), DBZXJ NUMBER(12,2), BJDYBZ NUMBER(1), PASS_FLAG NUMBER(1), YBLSH VARCHAR2(40), NONGYIBBM VARCHAR2(10), JIAZHANGXM VARCHAR2(20), IC VARCHAR2(500), YBXX VARCHAR2(21), HMBZ NUMBER(16,2), ZYYS VARCHAR2(10), ZRYS VARCHAR2(10), RYQX NUMBER(1), YYJYLSH VARCHAR2(30), YBJYLSH VARCHAR2(30), YWZQH VARCHAR2(30), ZYZT NUMBER(1), ZY_NO NUMBER(1), CKXZ VARCHAR2(10), ZXZCS NUMBER(3), ZDYS VARCHAR2(10), BK_FLAG NUMBER(5), BRYXHZJ NUMBER(10,2), SFYELBR NUMBER(1), TBBZ CHAR(1), SH_DATE DATE, SHR VARCHAR2(20), GDBZ NUMBER(2), CWFP_DATE DATE, QTXX VARCHAR2(100), LJJIATINGJCTS NUMBER(12,2), BORROW_BEGIN DATE, YHLB NUMBER(2), LYBZ NUMBER(1), TSBZBZ NUMBER(1), DISTRICTID NUMBER(1), JYLSH VARCHAR2(30), ZHUANZHENQY VARCHAR2(100), HMZH VARCHAR2(20), DBYSDH VARCHAR2(20), SFSX VARCHAR2(10), RENYUANID VARCHAR2(20), IN_DIAG_NAME2 VARCHAR2(70), IN_DIAG_CODE2 NUMBER(16), JSQXDM VARCHAR2(20), TES NUMBER(3), CKJE NUMBER(12,2), YCFBZ NUMBER(1), RONGYULB VARCHAR2(20), DIBAOLB VARCHAR2(20), YOUFUJB VARCHAR2(20), EMPLOYER_TYPE VARCHAR2(20), RYDJRQ DATE default SYSDATE, CSD_SF VARCHAR2(20), CSD_XS VARCHAR2(20), TBSHBZ NUMBER(1), BLLX NUMBER(2), BILILX VARCHAR2(10), MZH NUMBER(8), BADH VARCHAR2(20), IN_DIAG_NAME3 VARCHAR2(70), IN_DIAG_CODE3 NUMBER(16), DBZSC NUMBER(1), CKBZ VARCHAR2(50), DQ_DM VARCHAR2(20), RY_FLDM VARCHAR2(20), FYSHBZ NUMBER(1), DJXTRQ DATE, YHFAID NUMBER(10), DYBZ NUMBER(5), YHGRBH VARCHAR2(50), BZLX VARCHAR2(8), ZYPID VARCHAR2(50), YZYPID VARCHAR2(50), RUZHUSJ DATE, PID VARCHAR2(50), YPID VARCHAR2(50), SUOSHUXQ NUMBER(4), YCFYHBZ NUMBER(1), WZYBZ NUMBER(1) ) 目标表: create table TB_SMS_INPATIENTRECORD ( IR_ID VARCHAR2(16) not null, ID VARCHAR2(50), NAME VARCHAR2(40), SEX VARCHAR2(4), DOCT_ID VARCHAR2(6), DEPT_ID VARCHAR2(6), DEPT_NAME VARCHAR2(30), IN_TIME VARCHAR2(30), OUT_TIME VARCHAR2(30), DIAGNOSIS VARCHAR2(200), JBZG VARCHAR2(16), FLAG1 VARCHAR2(100), FLAG2 VARCHAR2(10), FLAG3 VARCHAR2(10), FLAG4 VARCHAR2(10), CREATETIME VARCHAR2(20), UPDATETIME VARCHAR2(20), QPKESHI VARCHAR2(400), BPKESHI VARCHAR2(100), COL_SEND VARCHAR2(10), COL_QUES VARCHAR2(30), COL_RES VARCHAR2(10), COL_VISIT VARCHAR2(1800), HISID VARCHAR2(10), DOCT_NAME VARCHAR2(30), UPDATE_FIELDS VARCHAR2(200), FLAG_SYNC VARCHAR2(10), OP_SYNC VARCHAR2(20), HOSID VARCHAR2(10), PHONE_ZY VARCHAR2(20) ) 更新语句: update zy_patient_information set name = 'James' where patient_no = 88888
卖水果的net 2017-01-04
  • 打赏
  • 举报
回复
楼主贴一下建表语句,和 你的 update 语句
仓井NULL 2017-01-04
  • 打赏
  • 举报
回复
引用 3 楼 sych888 的回复:
你的触发器 是 UPDATE 不是 INSERT
我想表达的是我可以插入进去这两个字段,说明:我这条记录其他字段都可以为空 然后 如果我 update的话,那么这条记录也就应该存在啊
sych888 2017-01-03
  • 打赏
  • 举报
回复
你的触发器 是 UPDATE 不是 INSERT
仓井NULL 2017-01-03
  • 打赏
  • 举报
回复
itf.tb_inpatient的主键是 IR_ID,并且在这张表中,其他字段都可为null, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 如下语句是可以的 insert into zy_patient(patient_no,name) values(888893,'JimGree') ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 很简单的一个问题,不是应该我在A表插入B表就能生成的吗?如此简单粗暴,都不能达到想要的结果
仓井NULL 2017-01-03
  • 打赏
  • 举报
回复
按照如上的触发器,如果插入一条记录的话,那么在插入之前是不是会在itf库表中生成一条记录呢,可是我在插入的时候并没有生成想要的结果

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧