oracle 存储过程中调用存储过程

时间:2022-02-25 14:04:35
A,较sql server中区别 : 
1,无exec
2,无output
3,添加()
B,oracle存储过程的入参
1,纯输入参数可以引用其值,但不可以赋值
解决:建立本地参数暂存其数据,然后操作本地参数
2,输出参数可赋值,可引用

CREATE OR REPLACE PROCEDURE P_AM_WOSORD_SET_LOG(
AS_USERID VARCHAR2,
AS_WLDM VARCHAR2,
AS_FUNC VARCHAR2,
AS_LX VARCHAR2,
AS_HM VARCHAR2,
AS_NR VARCHAR2,
AN_ERRORCODE OUT NUMBER,
AS_ERRORMSG OUT VARCHAR2
) As
BEGIN
AN_ERRORCODE := 0;
AS_ERRORMSG := NULL;
BEGIN
INSERT INTO T02
(GDCZHM, GDRZLX, GDRZRQ, GDRZRY, GDRZNR)
VALUES
(AS_HM, AS_LX, SYSDATE, AS_USERID, AS_NR);
END;
END;

CREATE OR REPLACE PROCEDURE P_AM_WOSORD_ORDER_REVOKE
(
AS_USERID VARCHAR2,
AS_WLDM VARCHAR2,
AS_FUNC VARCHAR2,
AS_GDCZHM VARCHAR2,
AS_MBZBDM VARCHAR2,
AN_ERRORCODE OUT NUMBER,
AS_ERRORMSG OUT VARCHAR2
) As
BEGIN
AN_ERRORCODE := 0;
AS_ERRORMSG := NULL;
BEGIN
AN_ERRORCODE := -1;
AS_ERRORMSG := '工单打回失败';
P_AM_WOSORD_SET_LOG(AS_USERID,
AS_WLDM,
AS_FUNC,
'30',
AS_GDCZHM,
LS_LOG,
AN_ERRORCODE,
AS_ERRORMSG);
     --sqlserver中引用存储过程
--EXEC p_am_wosord_set_log @as_userid,@as_wldm,@as_func,
-- '10',@as_new_gdczhm,@ls_nr,@an_errorcode OUTPUT,@as_errormsg OUTPUT ;
  IF AN_ERRORCODE <> 0 THEN
BEGIN
RETURN;
END;
END IF;

AN_ERRORCODE := 0;
AS_ERRORMSG := NULL;
EXCEPTION
WHEN OTHERS THEN
AN_ERRORCODE := -1;
IF LENGTH(NVL(AS_ERRORMSG, NULL)) = 0 THEN
BEGIN
AS_ERRORMSG := SQLERRM;
END;
END IF;
AS_ERRORMSG := LS_STORENAME || ':' || AS_ERRORMSG;
RAISE_APPLICATION_ERROR(-20001, AS_ERRORMSG);
END;
END;