CREATE OR REPLACE TRIGGER SCOTT.SET_UPDATE 
BEFORE INSERT 
ON SCOTT.Table 
FOR EACH ROW 
DECLARE 
JG VARCHAR2(50); 
BEGIN 
SELECT DIC_XZQH.NAME INTO JG FROM DIC_XZQH WHERE DIC_XZQH.CODE = :NEW.Table_JG_CODE; 
:NEW.Table_JG_NAME := JG; 
END SET_UPDATE; 

我是通过字典表 更新Table, 字典表DIC_XZQH 两列  Code    Name; 
当在字典表里能找到Table里的Table_JG_CODE的时候即:DIC_XZQH.CODE = Table_JG_CODE成立,上面句子执行顺利, 
当在Table里的Table_JG_CODE在DIC_XZQH得不到映射的时候,就是没有的时候,触发器提示找不到数据, 
这个问题能解决下么? 两个表不能完全映射情况既定,我想的是 能不能找不到的时候就插入空 或什么的?

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER SCOTT.SET_UPDATE 
    BEFORE INSERT 
    ON SCOTT.Table 
    FOR EACH ROW 
    DECLARE 
    JG VARCHAR2(50); 
    l_count pls_integer;
    BEGIN 
    select count(*) into l_count from DIC_XZQH where DIC_XZQH.CODE = :NEW.Table_JG_CODE;
    if nvl(l_count,0)<>0 then
    SELECT DIC_XZQH.NAME INTO JG FROM DIC_XZQH WHERE DIC_XZQH.CODE = :NEW.Table_JG_CODE; 
    :NEW.Table_JG_NAME := JG; 
    end if;
    END SET_UPDATE; 
      

  2.   

    楼上的可以,也可以这样
    CREATE OR REPLACE TRIGGER SCOTT.SET_UPDATE 
    BEFORE INSERT 
    ON SCOTT.Table 
    FOR EACH ROW 
    DECLARE 
    JG VARCHAR2(50); 
    BEGIN 
    SELECT NVL(DIC_XZQH.NAME,' ') INTO JG FROM DIC_XZQH WHERE DIC_XZQH.CODE = :NEW.Table_JG_CODE; 
    :NEW.Table_JG_NAME := JG; 
    END SET_UPDATE;