存儲過程TYPE類型參數調試
阿新 • • 發佈:2019-04-05
uid test result 數字 變量 not null name 但是 ret
當我們寫完一段存儲過程後,必然需要調試運行一下寫的代碼是否能成功運行,當參數是字符,數字或日期時,可以直接在測試窗口輸入值。但是類型如果是定義好的TYPE,就無法簡單的輸入。
一、自定義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個元素的拷貝。
存儲過程TYPE類型參數調試