tcbs_oracle plsql程式設計之cursor_索引表型別聯合演練
摘自TCBS,略有刪修
//包規範
CREATE OR REPLACE PACKAGE "PACK_GETBANKCALCVARS" AS
----定義索引表型別
TYPE array_inout_CALCVARCD IS TABLE OF CalcTypVarValue.CalcVarCd%TYPE
INDEX BY BINARY_INTEGER;
TYPE array_inout_CALCVARVALUE IS TABLE OF CalcTypVarValue.CalcVarValue%TYPE
INDEX BY BINARY_INTEGER;
---索引表型別的變數
inout_CALCVARCD array_inout_CALCVARCD;
inout_CALCVARVALUE array_inout_CALCVARVALUE;
PROCEDURE proc_GETBANKCALCVARS( in_EFFDATE IN CHAR,
in_CALCTYPCD IN CalcTyp.CalcTypCd%TYPE,
inout_CALCVARCD IN OUT pack_GETBANKCALCVARS.array_inout_CALCVARCD,
inout_CALCVARVALUE IN OUT pack_GETBANKCALCVARS.array_inout_CALCVARVALUE,
in_DEBUGYN IN CHAR,
out_CALCVARARRAYSIZE OUT INTEGER,
out_ERRORNBR OUT INTEGER,
out_ERRORMSG OUT VARCHAR2,
out_ORAERRORMSG OUT VARCHAR2 );
END pack_GETBANKCALCVARS;
包體,這才是真正作事的地兒,哈哈
CREATE OR REPLACE PACKAGE BODY "PACK_GETBANKCALCVARS" AS
//注意下述的array相關的引數,這就是索引表型別的引數
PROCEDURE proc_GETBANKCALCVARS( in_EFFDATE IN CHAR,
in_CALCTYPCD IN CalcTyp.CalcTypCd%TYPE,
inout_CALCVARCD IN OUT pack_GETBANKCALCVARS.array_inout_CALCVARCD,
inout_CALCVARVALUE IN OUT pack_GETBANKCALCVARS.array_inout_CALCVARVALUE,
in_DEBUGYN IN CHAR,
out_CALCVARARRAYSIZE OUT INTEGER,
out_ERRORNBR OUT INTEGER,
out_ERRORMSG OUT VARCHAR2,
out_ORAERRORMSG OUT VARCHAR2 ) AS
CURSOR curs_GetCalcTypVarInfo ( cpsCalcTypCd CalcTypVarValue.CalcTypCd%TYPE, cpdEffDate CalcTypVarValue.InactiveDate%TYPE ) IS
SELECT A.CalcVarCd, A.CalcVarValue
FROM CalcTypVarValue A
WHERE A.CalcTypCd = cpsCalcTypCd
AND A.ValueEffDate = ( SELECT MAX( ValueEffDate )
FROM CalcTypVarValue
WHERE CalcTypCd = cpsCalcTypCd
AND CalcVarCd = A.CalcVarCd
AND ( InactiveDate > cpdEffDate OR InactiveDate IS NULL )
AND ValueEffDate <= cpdEffDate )
ORDER BY A.CalcVarCd;
/************************************************************************************/
/***** GENERAL ERROR PROCESSING VARIABLES *****/
/************************************************************************************/
OSI_GENERAL_ERROR EXCEPTION;
lvsActvMsg VARCHAR2(100);
lvsORACLEMsg VARCHAR2(100);
lvnSubProcErrorNbr INTEGER;
lvnErrorNbr INTEGER;
lvnUserPersNbr INTEGER;
/************************************************************************************/
/***** PROCEDURE VARIABLES *****/
/************************************************************************************/
lvdEffDate DATE;
lvsCalcTypCd CalcTyp.CalcTypCd%TYPE;
lvnCalcTypCdCnt INTEGER;
lvsCalcVarCd CalcVar.CalcVarCd%TYPE;
lvsCalcVarValue CalcTypVarValue.CalcVarValue%TYPE;
lvnLoopCtr INTEGER;
/************************************************************************************/
/***** PROCEDURE CONSTANTS *****/
/************************************************************************************/
lcsDebugProcCd VARCHAR2(4) := 'BCLV';
BEGIN
/********************************************************************************************************/
/***** CLEAN UP STUFF PASSED THRU ROUTER... UNTIL FIXED *****/
/********************************************************************************************************/
lvdEffDate := TO_DATE(in_EFFDATE, 'YYYY-MM-DD');
lvsCalcTypCd := FUNC_CLEANSTR( in_CALCTYPCD );
IF ( in_DEBUGYN = 'Y' ) THEN
INSERT INTO SP_Debug (SeqNbr, DebugDate, DebugTime, PersNbr, ProcName, DebugText)
VALUES ( SP_DebugSeqNbr.nextval, SYSDATE, TO_CHAR( SYSDATE, 'HH24:MI:SS' ), lvnUserPersNbr, 'PROC_GETCALCVARS',
'BEGIN in_CALCTYPCD: ' || in_CALCTYPCD || ', in_EFFDATE: ' || lvdEffDate);
END IF;
lvsActvMsg := 'Attempting to Open curs_GetCalcTypVarInfo.';
//開啟遊標
OPEN curs_GetCalcTypVarInfo( lvsCalcTypCd, lvdEffDate );
//開啟遊標之後,馬上為此引數初始化一個值,這個引數用於上述的索引表型別的元素下標,大家可以理解為C語言的陣列,起一個定位陣列的作用
lvnLoopCtr := 0;
LOOP
lvsActvMsg := 'Prior to Fetch.';
FETCH curs_GetCalcTypVarInfo
INTO lvsCalcVarCd, lvsCalcVarValue;
EXIT WHEN curs_GetCalcTypVarInfo%NOTFOUND;
IF ( lvsCalcVarValue IS NOT NULL ) THEN
IF ( in_DEBUGYN = 'Y' ) THEN
INSERT INTO SP_Debug (SeqNbr, DebugDate, DebugTime, PersNbr, ProcName, DebugText)
VALUES ( SP_DebugSeqNbr.nextval, SYSDATE, TO_CHAR( SYSDATE, 'HH24:MI:SS' ), lvnUserPersNbr,
'PROC_GETCALCVARS', ' inout_CALCVARCD(' || lvnLoopCtr || '): ' || lvsCalcVarCd ||
', inout_CALCVARVALUE(' || lvnLoopCtr || '): ' || lvsCalcVarValue );
END IF;
//上述元素下標變數每次會隨著遊標的值而發生變化,
lvnLoopCtr := lvnLoopCtr + 1;
//這是關鍵的程式碼,透過上述的元素下標變數lvnloopctr與索引表變數
//inout_calcvarcd與遊標變數lvscalcvarcd,這三者就聯絡起來了
inout_CALCVARCD( lvnLoopCtr ) := lvsCalcVarCd;
inout_CALCVARVALUE( lvnLoopCtr ) := lvsCalcVarValue;
END IF;
END LOOP;
CLOSE curs_GetCalcTypVarInfo;
out_CALCVARARRAYSIZE := lvnLoopCtr;
EXCEPTION
WHEN OTHERS THEN
lvsORACLEMsg := SUBSTR(SQLERRM, 1, 100);
out_ORAERRORMSG := lvsORACLEMsg;
out_ERRORNBR := ABS(SQLCODE);
out_ERRORMSG := lvsActvMsg || ' - ' || lcsDebugProcCd;
INSERT INTO SP_Debug (SeqNbr, DebugDate, DebugTime, PersNbr, ProcName, DebugText)
VALUES ( SP_DebugSeqNbr.nextval, SYSDATE, TO_CHAR(SYSDATE, 'HH24:MI:SS'), lvnUserPersNbr, 'PROC_GETCALCVARS',
lvsActvMsg || ' *** ' || lvsORACLEMsg );
END proc_GETBANKCALCVARS;
END pack_GETBANKCALCVARS;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-733766/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PL/SQL基本結構---PLSQL複合型別---表型別變數tableSQL型別變數
- 《Python程式設計練習與解答》之程式設計概論Python程式設計
- C# 列表型別 增加 刪除 計數C#型別
- 程式設計練習程式設計
- Python資料視覺化之Pygal圖表型別Python視覺化型別
- 【TcaplusDB知識庫】預設Schema表型別介紹型別
- Mysql研磨之設計索引原則MySql索引
- MySQL效能優化之索引設計MySql優化索引
- T-SQL——關於表型別SQL型別
- Java程式設計練習_241206Java程式設計
- 物聯網教程Linux系統程式設計——特殊程式之殭屍程式Linux程式設計
- 物聯網教程Linux系統程式設計——特殊程式之守護程式Linux程式設計
- PLSQL程式語言SQL
- 程式設計師程式設計,你的練習是不是有效的?程式設計師
- 程式設計師進階之演算法練習:LeetCode專場程式設計師演算法LeetCode
- 物聯網學習教程—Linux系統程式設計之程式介紹Linux程式設計
- mysql索引設計MySql索引
- Linux中檔案顏色代表型別Linux型別
- 關於程式設計的基本練習程式設計
- Day40--練習--程式設計2程式設計
- 精通MySQL之索引篇,這篇注重練習!MySql索引
- 好程式設計師web前端教程分享前端javascript練習題之promise程式設計師Web前端JavaScriptPromise
- .NET 歡樂程式設計術之型別超級轉換之術??程式設計型別
- 程式設計思想之冪等性 | 程式設計之道程式設計
- 好程式設計師Java分享SQL語言之索引程式設計師JavaSQL索引
- Elasticsearch之索引模板index template與索引別名index aliasElasticsearch索引Index
- elasticsearch如何設計索引Elasticsearch索引
- 阻塞式程式設計和非阻塞式程式設計區別程式設計
- Linux之shell程式設計Linux程式設計
- Spring之切面程式設計Spring程式設計
- python之超程式設計Python程式設計
- 團體程式設計天梯賽-練習集程式設計
- 序列模型第一週程式設計練習模型程式設計
- 那些程式設計高手是如何練成的?程式設計
- 《Linux系統程式設計訓練營》5_環境變數程式設計Linux程式設計變數
- 初探 TypeScript 型別程式設計TypeScript型別程式設計
- 機器學習之整合演算法機器學習演算法
- GPU程式設計--CPU和GPU的設計區別GPU程式設計
- 好程式設計師web前端教程分享前端javascript練習題之閉包案例程式設計師Web前端JavaScript