oracle与db2的存储过程和触发器的区别??、他们写法上有明显的区别不???oracle的存储过程,触发器能给个简单例子看看,db2中的见过;

解决方案 »

  1.   

    db2的存储过程与ORACLE区别很大:   
      (1)       DB2中不支持”or replace”的语法;且参数名与IN/OUT的位置也需互换,声明变量时须使用declare关键字,为变量赋值时须使用set关键字。(2)       而对于oracle中的%TYPE的功能,DB2中好像还没有很好的实现方式。(3)       同样,oracle中清空表的命令truncate,DB2也不能原样引用,但它也提供了2种实现方式,一是将一空文件的内容导入表中import null.dat ;二是设置表的特性为不记录日志alter table tablename .但是第二种方式会在某些情况下导致原表无法使用,具体的还没弄清楚呢。(4)       至于sql语句表现不同应该就是oracle与db2各自的语法了。比如说oracle的rownum,db2可以使用fetch first n only,或row_number() over()等。
    DB2有更好的扩展性和性能。Oracle触发器无法支持并行
             oracle 触发器例子:    CREATE OR REPLACE TRIGGER CRM.T_SUB_USERINFO_AUR_NAME AFTER UPDATE OF STAFF_NAME 
      ON CRM.T_SUB_USERINFO 
      REFERENCING OLD AS OLD NEW AS NEW 
      FOR EACH ROW 
      declare 
      begin 
      if :NEW.STAFF_NAME!=:OLD.STAFF_NAME then 
      begin 
      客户投诉 
        update T_COMPLAINT_MANAGE set SERVE_NAME=:NEW.STAFF_NAME where SERVE_SEED=:OLD.SEED; 
     
    oracle 存储过程例子:
    create or replace   
    PROCEDURE p_insert_t    
    (v_x in NUMBER)    
    IS   
    temp_id number;    
    BEGIN   
    FOR i IN 1..v_x LOOP    
    select SEQ_B_USER_ID.nextval into temp_id from dual;    
    insert into buser (id, username, nickname, status, createdtime) values(temp_id, to_char(temp_id), to_char(temp_id), 0, sysdate);    
    END LOOP;    
    END;    
    --execute