tcbs_批量儲存過程_輸出引數out與異常的關係
PROCEDURE proc_FINDNEXTQUEUE ( in_QUETYPCATCD IN QueTypCat.QUETYPCATCD%TYPE,
in_NTWKNODENBR IN Que.AssignedNtwkNodeNbr%TYPE,
in_POSTDATE IN DATE,
in_DEBUGYN IN CHAR,
out_QueNbr OUT Que.QueNbr%TYPE,
out_ERRORNBR OUT NUMBER,
out_ERRORMSG OUT VARCHAR2,
out_ORAERRORMSG OUT VARCHAR2 )
/************************************************************************************************/
/***** *****/
/***** PROCEUDRE NAME: pack_BATCHAUTO.proc_FINDNEXTQUEUE *****/
/***** *****/
/***** DESCRIPTION: This procedure will find the next queue to be assigned *****/
/***** and return the number to the calling procedure. *****/
/***** *****/
/***** *****/
/***** MODIFICATION HISTORY: *****/
/***** *****/
/***** 2/6/2006 - MSG - Rewritten to only find the next queue, not copy them all *****/
/***** *****/
/***** 12/12/2005, Modified by Sachin at RSI for new Month Code Parameter *****/
/***** while calculating schedule date and copying templates with *****/
/***** RequiredNtwkNodeNbr as NULL *****/
/***** *****/
/************************************************************************************************/
AS
/***************************************************************************************/
/***** CURSOR VARIABLE *****/
/***************************************************************************************/
CURSOR curs_QUETEMPLATE ( cpsQueTypCatCd QueTypCat.QueTypCatCd%TYPE ) IS
SELECT A.QueNbr, A.EffDateCalc, B.CalPeriodCd, B.DayNbr, B.WeekDayCd, B.MonthCd,
A.Priority, A.SeqNbr, A.RequiredNtwkNodeNbr
FROM Que A, QueTyp B, QueTypCat C
WHERE A.QueTypCd = B.QueTypCd
AND B.QueTypCatCd = C.QueTypCatCd
AND C.QueTypCatCd = cpsQueTypCatCd
AND A.TemplateYN = 'Y'
AND (( A.RequiredNtwkNodeNbr = in_NTWKNODENBR) OR ( A.RequiredNtwkNodeNbr IS NULL) ) -- Modified by Sachin at RSI on 12/12/2005
AND (( A.DateLastCopied < in_POSTDATE) OR (A.DateLastCopied IS NULL ) )
ORDER BY A.Priority , A.SeqNbr ;
/************************************************************************************/
/***** OSI ERROR PROCESSING VARIABLES *****/
/************************************************************************************/
OSI_GENERAL_ERROR EXCEPTION;
lvnErrorNbr INTEGER;
lvnUserPersNbr INTEGER;
lvsActvMsg VARCHAR2(100);
lvsSubProcErrorMsg VARCHAR2(100);
lvsORACLEMsg VARCHAR2(100);
/************************************************************************************/
/***** GENERAL PROCEDURE VARIABLES *****/
/************************************************************************************/
OSI_FOUND_A_QUEUE EXCEPTION;
lvnQueNbr Que.QueNbr%TYPE;
lvnPriority Que.Priority%TYPE;
lvnLastPriority Que.Priority%TYPE;
lvnSeqNbr Que.SeqNbr%TYPE;
lvsEffDateCalc Que.EffDateCalc%TYPE;
lvdPostDate DATE;
lvsCalPeriodCd QueTyp.CalPeriodCd%TYPE;
lvsWeekDayCd QueTyp.WeekDayCd%TYPE;
lvnDayNbr QueTyp.DayNbr%TYPE;
lvsMonthCd QueTyp.MonthCd%TYPE;
lvnRequiredNtwkNodeNbr Que.AssignedNtwkNodeNbr%TYPE;
lvsCopy CHAR(1);
/************************************************************************************/
/***** PROCEDURE CONSTANTS *****/
/************************************************************************************/
lcsDebugProcCd CONSTANT VARCHAR2(4) := 'CAQU';
BEGIN
lvdPostDate := TO_DATE(TO_CHAR(in_POSTDATE, 'MM-DD-YYYY'), 'MM-DD-YYYY');
lvnLastPriority := -1;
lvsActvMsg := 'Opening the cursor curs_QUETEMPLATE';
OPEN curs_QUETEMPLATE ( in_QUETYPCATCD ) ;
LOOP
lvsActvMsg := 'Fetch curs_QUETEMPLATE for quetypcatcd';
FETCH curs_QUETEMPLATE
INTO lvnQueNbr ,
lvsEffDateCalc ,
lvsCalPeriodCd ,
lvnDayNbr ,
lvsWeekDayCd,
lvsMonthCd,
lvnPriority,
lvnSeqNbr,
lvnRequiredNtwkNodeNbr;
EXIT WHEN curs_QUETEMPLATE%NOTFOUND;
lvsActvMsg := 'Executing proc_SCHEDATE';
proc_SCHEDATE (lvsCalPeriodCd, lvnDayNbr, lvsWeekDayCd, lvsMonthCd, lvdPostDate, in_DEBUGYN, -- Modified by Sachin at RSI on 12/12/2005
lvsCopy, lvnErrorNbr, lvsSubProcErrorMsg, lvsORACLEMsg );
IF ( lvnErrorNbr > 0 ) THEN
lvsActvMsg := lvsSubProcErrorMsg;
RAISE OSI_GENERAL_ERROR;
END IF;
IF lvsCopy = 'Y' THEN
RAISE OSI_FOUND_A_QUEUE;
End If;
END LOOP;
out_QueNbr := 0;
EXCEPTION
WHEN OSI_FOUND_A_QUEUE THEN
out_QueNbr := lvnQueNbr;
out_ERRORNBR := 0;
WHEN OSI_GENERAL_ERROR THEN
IF ( lvnErrorNbr > 0 ) THEN
out_ERRORNBR := lvnErrorNbr;
ELSE
out_ERRORNBR := 1001;
END IF;
out_ORAERRORMSG := lvsORACLEMsg;
out_ERRORMSG := lvsActvMsg||'-'||lcsDebugProcCd;
WHEN OTHERS THEN
lvsORACLEMsg := SUBSTR(SQLERRM, 1, 100);
out_ORAERRORMSG := lvsORACLEMsg;
out_ERRORNBR := ABS(SQLCODE);
out_ERRORMSG := lvsActvMsg;
END proc_FINDNEXTQUEUE;
小結:儲存過程的輸出引數可以在異常中輸出,當然一般不發生異常則正常輸出
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-734772/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL儲存過程in、out、inout引數示例與總結MySql儲存過程
- mysql儲存過程的引數MySql儲存過程
- 儲存過程——異常捕獲&列印異常資訊儲存過程
- 詳解MySQL儲存過程引數有三種型別(in、out、inout)MySql儲存過程型別
- MySQL儲存過程的異常處理方法MySql儲存過程
- go 如何呼叫 sqlserver 帶傳出引數的儲存過程GoSQLServer儲存過程
- 簡單的mysql儲存過程,輸出結果集MySql儲存過程
- 服務端執行部署好的CLR儲存過程時出現如下異常服務端儲存過程
- [MySQL光速入門]017 儲存過程中的"異常處理"MySql儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- 造數儲存過程儲存過程
- mssql sqlserver 批量刪除所有儲存過程的方法分享SQLServer儲存過程
- 數倉血緣關係資料的儲存與讀寫
- SqlServer儲存過程的建立與使用SQLServer儲存過程
- LMT和DMT下儲存引數的異同(轉)
- 【SQL Server】常見系統儲存過程SQLServer儲存過程
- mySql 儲存過程與函式MySql儲存過程函式
- 關於Entity Freamwork 儲存過程操作儲存過程
- oracle的儲存過程Oracle儲存過程
- mysql 儲存過程中變數的定義與賦值操作MySql儲存過程變數賦值
- MongoDB 異常當機與引數cacheSizeGBMongoDB
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL--儲存過程與檢視MySql儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程
- MySQL全面瓦解16:儲存過程相關MySql儲存過程
- SpringFlux中Request與HandlerMapping關係的形成過程SpringUXAPP
- Sqlserver中的儲存過程SQLServer儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- kubernetes儲存類與PV與PVC關係及實踐
- MySQL自定義函式與儲存過程MySql函式儲存過程
- [20180502]PLDEVELOP與儲存過程除錯.txtdev儲存過程除錯
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- 【PARANETERS】Oracle異常恢復相關的隱含引數Oracle