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