ストアドプロシージャTYPEタイプパラメータデバッグ
3887 ワード
ストレージ・プロシージャを完了すると、必ず書き込みコードが正常に実行されるかどうかをデバッグする必要があります.パラメータが文字、数字、日付の場合、テスト・ウィンドウに直接値を入力できます.ただしタイプが定義されたTYPEであれば簡単には入力できません.
簡単な例を挙げて、あるユーザーの権限をクエリーします.
方法を選択してTESTウィンドウに入ります
まず、TYPEタイプ変数を宣言し、TYPEにカプセル化する必要があるデータを格納し、メソッドに転送してテストする必要があります.
Oracleデータベースでコレクション・タイプを宣言するには、たとえばネストされたテーブル、すなわち
文の
方法を選択してTESTウィンドウに入ります
コレクションテストでは
一、カスタムTYPE
TYPEの作成
CREATE OR REPLACE TYPE "TYP_USER_INFO" AS OBJECT
(
U_ID VARCHAR2(4) -- ID
,U_NAME VARCHAR2(10) --
,U_SEX VARCHAR2(1) --
)
テストが必要なストレージ・プロシージャ
簡単な例を挙げて、あるユーザーの権限をクエリーします.
CREATE OR REPLACE PACKAGE BODY PKG_TYPE_TEST IS
TYPE typCSR IS REF CURSOR;
FUNCTION F_GET_POWER_DATA(ptUSER_INFO IN TYP_USER_INFO
,powerInfoList OUT typCSR) RETURN VARCHAR2 IS
BEGIN
OPEN pPowerInfoList FOR
'SELECT P.PID, P.PNAME
FROM D_USER_POWER P
WHERE P.UID = ' || '''' || ptUSER_INFO. U_ID || '''' || '';
END F_GET_POWER_DATA;
END PKG_TYPE_TEST;
方法を選択してTESTウィンドウに入ります
DECLARE
ptuser_info typ_user_info := typ_user_info('9572',' ','1');
BEGIN
:result := PKG_TYPE_TEST. F_GET_POWER_DATA(ptuser_info => ptuser_info,
powerInfoList => : powerInfoList,
);
END;
まず、TYPEタイプ変数を宣言し、TYPEにカプセル化する必要があるデータを格納し、メソッドに転送してテストする必要があります.
二、集合
Oracleデータベースでコレクション・タイプを宣言するには、たとえばネストされたテーブル、すなわち
IS TABLE OF
を使用する方法がいくつかあります.CREATE OR REPLACE TYPE "TYP_USER_INFO_LIST" AS TABLE OF TYP_USER_INFO
文の
TYP_USER_INFO
は、文章の先頭に作成されたTYPEです.今回は指定IDを照会したユーザーの情報ですCREATE OR REPLACE PACKAGE BODY PKG_TYPE_TEST IS
TYPE typCSR IS REF CURSOR;
FUNCTION F_GET_USER_DATA(ptUSER_INFO_LIST IN TYP_USER_INFO_LIST
,userInfoList OUT typCSR) RETURN VARCHAR2 IS
lIdList LONG := '';
lNameList LONG := '';
ptuserInfo TYP_USER_INFO;
BEGIN
IF userInfoList IS NOT NULL AND userInfoList.COUNT > 0 THEN
FOR IDX IN 1 .. userInfoList.COUNT LOOP
ptuserInfo := userInfoList(IDX);
lIdList := lIdList || '''' || ptuserInfo. U_ID || '''' || ',';
lNameList := lNameList || '''' || ptuserInfo.U_NAME || '''' || ',';
END LOOP;
lIdList := substr(lIdList,0,length(lIdList)-1);
lNameList := substr(lNameList,0,length(lNameList)-1);
END IF;
OPEN userInfoList FOR
'SELECT U.*
FROM D_USER_INFO U
WHERE AND U. U_ID IN (' || lIdList ||')
AND U.U_NAME IN (' || lNameList ||')';
END F_GET_USER_DATA;
END PKG_TYPE_TEST;
方法を選択してTESTウィンドウに入ります
DECLARE
puserinfolist TYP_USER_INFO_LIST := TYP_USER_INFO_LIST();
BEGIN
puserinfolist.Extend(3);
puserinfolist(1) := TYP_USER_INFO('9572',' ','1');
puserinfolist(2) := TYP_USER_INFO('9573',' ','2');
puserinfolist(3) := TYP_USER_INFO('9574',' ','1');
:result := PKG_TYPE_TEST. F_GET_USER_DATA(puserinfolist => puserinfolist,
userInfoList => : userInfoList,
);
END;
コレクションテストでは
Extend
キーワードを使用します.Extendメソッドは、可変配列またはネストされたテーブルの末尾に要素を追加します.集合はEMPTYであってもよいが、NULLであってはならない.Extend(n)は、集合にn個のnull要素を追加します.Extend(n,i)は,集合にn個のi番目の要素のコピーを追加する.