oracle 函数和触发器

CREATE OR REPLACE FUNCTION EDUBIS.getpxfx(V_pxfx in varchar2) RETURN VARCHAR2 IS
  pxfx varchar2(1000);
begin
  SELECT WM_CONCAT(b.codename)
    INTO pxfx
    FROM (SELECT COLUMN_VALUE FROM TABLE(splitstr(V_pxfx, ','))) a,
         up_codelist B
   WHERE codekind = 'NEUEDU_GS_PXFX'
     AND a.COLUMN_VALUE = b.CODEVALUE(+);
  return(pxfx);
exception
  when NO_DATA_FOUND then
    DBMS_OUTPUT.PUT_LINE('查不到数据。');
    return NULL;
end getpxfx;
CREATE OR REPLACE TRIGGER "EDUBIS".bdh_JFXSJFXXBb
   BEFORE UPDATE OR INSERT OR DELETE
   ON edubis.SFXT_JFXSJFXXB
   REFERENCING NEW AS NEW OLD AS OLD
   FOR EACH ROW
DECLARE
   err_num        NUMBER;
   err_msg        CHAR (100);
   flag           NUMBER;
   error_update   EXCEPTION;
   error_insert   EXCEPTION;
   error_delete   EXCEPTION;
BEGIN
   IF UPDATING
   --当记录被修改
   THEN
      IF (:NEW.bdhbz <> '0' AND :OLD.bdhbz = '1')
      THEN
         RAISE error_update;
      END IF;
   END IF;

   IF INSERTING
   THEN
      SELECT COUNT (*)
        INTO flag
        FROM HTXM_XMRYGX b,HTXM_XMHTGX c,BDH_SJXZ a
       WHERE a.htbh=c.htbh and b.xmbh=c.xmbh and b.xybh=:new.xyxyh;

      IF flag > 0
      THEN
         raise_application_error (-20004, '数据被本地化模块锁定');
      END IF;
   END IF;

   IF DELETING
   THEN
      IF (:OLD.bdhbz = '1')
      THEN
         RAISE error_delete;
      END IF;
   END IF;
EXCEPTION
   WHEN error_update
   THEN
      raise_application_error (-20003, '数据被本地化模块锁定');
   WHEN error_insert
   THEN
      raise_application_error (-20004, '数据被本地化模块锁定');
   WHEN error_delete
   THEN
      raise_application_error (-20003, '数据被本地化模块锁定');
   WHEN OTHERS
   THEN
      err_num := SQLCODE;
      err_msg := SUBSTR (SQLERRM, 1, 100);
      DBMS_OUTPUT.put_line (err_msg);
END;
/

ALTER TRIGGER BDH_JFXSJFXXBB DISABLE

/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值