oracle procedure总结

CREATE OR REPLACE PROCEDURE PROCEDURE_NAME(args1 in varchar2,...args2 out varchar2)
is
LVC_ERROR  VARCHAR2(4000);          -- 错误序号   自定义变量
BEGIN
...
EXCEPTION   
  WHEN OTHERS THEN  
    LVC_ERROR := SQLERRM;   
    ROLLBACK;   
    RAISE_APPLICATION_ERROR(2000, 'ERROR:' || LVC_ERROR);   
END PROCEDURE_NAME;

知识点 

变量赋值:

AVC_CODE := '2004';

每一句sql语句的结尾需要加上分号";"

日期比较用trunc 函数 select trunc(sysdate)-2 from dual

游标的使用:

变量声明

CUR_DRXX_LIST  OUT PKG_TYPES.REF_CURSOR     

赋值

OPEN CUR_DRXX_LIST FOR        
select ... from table

 空值

OPEN CUR_DRXX_LIST FOR     
       SELECT NULL nsrsbh,      
             NULL nsrmc,   
             NULL nsrSwjgDm   
        FROM DUAL;      
RETURN

 判断条件为空时,返回可直接用 return;

 当使用游标时, GOTO ONERROR;   

IF AVG_PCL_XH IS NULL THEN  
      AVC_CODE := '2004';   
      AVC_ERR_MESS := 'P_NSFW_XYDJ_MDDR_SAVE_HXCL.AVG_PCL_XH为空';   
      GOTO ONERROR;   
   END IF;  
。。。
 <<ONERROR>>      
   OPEN CUR_DRXX_LIST FOR     
       SELECT NULL nsrsbh,      
             NULL nsrmc,   
             NULL nsrSwjgDm   
        FROM DUAL;      
   RETURN;  

update语句可以使用普通的方法,也可以用下面这种

UPDATE NSFW_XYDJ_MDDR_LSB L   
   SET (NSRMC, NSR_SWJG_DM,DRJG) =   
    (SELECT NSRMC, NSR_SWJG_DM, 'Y' FROM CTAIS2.DJ_NSRXX C WHERE C.NSRSBH = L.nsrsbh)   
   where L.pcl_xh = AVG_PCL_XH;   

If的使用,类似VB的语法

if then
...
else
...
end if

  

猜你喜欢

转载自pyez1158.iteye.com/blog/2076074