CREATE OR REPLACE 
PROCEDURE debug_time
     ( 
     v_system_id in number,
     v_procedure_id in number,
     v_debug_name in varchar2,
     v_debug_time in date
     )
     
   IS
--------------------------------------------------------------------------------
-- 功能:調試程式運行時間
-- 版本:Ver 1.0
-- Marvin Hong
-- 2003-02-21 08:20
--------------------------------------------------------------------------------
   v_debug_flag number;
   
BEGIN
    select count(*) into v_debug_flag from s_program_option_info
    where system_id=v_system_id and program_id=v_procedure_id 
    and option_name='DEBUG_TIME' and flag=1;
    if v_debug_flag=1 then
       insert into s_debug_time_info 
          (system_id,program_id,parameter,value)
       values
          (v_system_id,v_procedure_id,v_debug_name,v_debug_time);
    end if;
    commit;
END; -- ProcedureCREATE OR REPLACE TRIGGER save_no_status
BEFORE INSERT  OR UPDATE 
ON s_no_status_info
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
    if inserting then
       insert into s_no_status_info_history
          (system_id,no,status,in_date)
       values
          (:new.system_id,:new.no,:new.status,:new.in_date);
    else
       insert into s_no_status_info_history
          (system_id,no,status,in_date)
       values
          (:old.system_id,:old.no,:new.status,:new.in_date);
    end if;
end;

解决方案 »

  1.   

    看看oracle的例子,照着他们的格式写就可以了。不过最重要的是代码看起来要清楚,注释要详细明了。
      

  2.   

    --
    --1  USERADD 会员触发器
    --
    CREATE OR REPLACE TRIGGER USERADD
    BEFORE INSERT ON MEMBERRG
    FOR EACH ROW
    BEGIN
        SELECT LPAD(USERID.NEXTVAL,4,'0') INTO :NEW.NUM FROM DUAL;
    END;create procedure name(a in varchar2)
    as
    --定义部分;
    begin
    --语句部分;
    end;
    /
      

  3.   

    A small example :
     
      CREATE OR REPLACE procedure minimum(v1 number, v2 number) as
         BEGIN
           IF v1 < v2 THEN
             RETURN v1;
           ELSE
             RETURN v2;
           END IF;
         END;****************************************************************  CREATE OR REPLACE TRIGGER EMP_AIUR
    AFTER INSERT OR UPDATE ON EMP
    FOR EACH ROW
    BEGIN
       IF (:NEW.sal > 100000) THEN
          IF INSERTING THEN
             RAISE_APPLICATION_ERROR 
               (-20000, 'New salary limits are limited to 100000');
          ELSE
             RAISE_APPLICATION_ERROR 
               (-20000, 'You cannot increase a salary beyond 100000');
          END IF;
       END IF;
    END;
      

  4.   

    请问是登录 SQL PLUS 上执行吗?但我写了一个触发器,在SQL PLUS 上不知道怎么结束,比如:在EDN;后打回车后,系统显示下一行的行号,让继续写触发器语句,为什么?
      

  5.   

    用什么sqlplus写代码,太垃圾啦。用pl/sql developer(强烈建议)。
    或者在utrledit中写也比在sqlplus中写好啊。