DB2儲存過程(Oracle對比)
DROP PROCEDURE [email protected]
CREATE PROCEDURE CDI.PRC_CIM_IDENTITY_FIND(
IN I_ID_NUM VARCHAR(21), --oracle I_ID_NUM in VARCHAR(21) DB2也有in out
IN I_CERT_TYPE VARCHAR(5),
IN I_NUM_TYPE INTEGER,
OUT O_RESPNOSE_TYPE VARCHAR(1),
OUT O_RESPNOSE_CODE VARCHAR(6)
)
DYNAMIC RESULT SETS 2
LANGUAGE SQL
NOT DETERMINISTIC
CALLED ON NULL INPUT
MODIFIES SQL DATA
INHERIT SPECIAL REGISTERS
BEGIN
DECLARE V_ID_NUM VARCHAR (21); --oracle:在is/as中對變數宣告且沒有DECLARE
--查詢號碼(傳入資料預處理)
DECLARE V_CERT_TYPE VARCHAR (8); --查詢證件型別(傳入資料預處理)
DECLARE V_NUM_TYPE INTEGER; --查詢型別(傳入資料預處理)1:查詢號碼是卡號;2:查詢號碼是證件號碼;--3:查詢號碼是客戶號;
DECLARE V_CUST_UNION_ID VARCHAR(21);
--宣告出錯處理
SET O_RESPNOSE_TYPE = 'E';--
SET O_RESPNOSE_CODE = '000005';--
END;--
--宣告結束
--對傳入引數空(值NULL)進行初始化
SET V_ID_NUM = RTRIM(LTRIM(I_ID_NUM));--可代替函式trim() replace()
SET V_CERT_TYPE = RTRIM(LTRIM(I_CERT_TYPE));--ora 賦值 :=
SET V_NUM_TYPE = I_NUM_TYPE;
--當V_NUM_TYPE查詢型別為1時,查詢結果為此卡所屬客戶的所有標識
--當V_NUM_TYPE查詢型別為2時,查詢結果為此證件號碼所屬客戶的所有標識;
--當證件型別為空時,查詢所有證件 --當V_NUM_TYPE查詢型別為3時,查詢結果為此客戶號所屬客戶的所有標識
IF V_CUST_UNION_ID is NULL THEN
SET V_CUST_UNION_ID='';
END IF;
IF V_CERT_TYPE is NULL THEN
SET V_CERT_TYPE='';
END IF;
--查詢號碼與查詢型別不能為空
IF V_ID_NUM IS NULL OR V_ID_NUM = '' OR V_NUM_TYPE < 1 THEN
SET O_RESPNOSE_TYPE = 'E';
SET O_RESPNOSE_CODE = '000003';
RETURN;--終止儲存過程繼續執行
ELSE
--查詢號碼型別為1卡號並且查詢號碼不為空||測試資料--5218990187677975
IF V_NUM_TYPE = 1 AND V_ID_NUM IS NOT NULL THEN
BEGIN
select DISTINCT CUST_UNION_ID INTO V_CUST_UNION_ID from
CDI.CIM_CARD_INFO where CARD_NUM=V_ID_NUM WITH UR;--髒讀
END;
--查詢號碼型別為2並且證件型別不為空
ELSEIF V_NUM_TYPE = 2 AND V_CERT_TYPE <>'' THEN
BEGIN
select DISTINCT CUST_UNION_ID INTO V_CUST_UNION_ID from
CDI.CIM_CUST_IDEN_INFO
where CERT_NUM=V_ID_NUM AND CERT_TYPE_CD=V_CERT_TYPE FETCH FIRST 1 ROWS ONLY WITH UR;
END;
ELSEIF V_NUM_TYPE = 2 AND V_CERT_TYPE = '' THEN
BEGIN
SELECT CUST_UNION_ID INTO V_CUST_UNION_ID from
CDI.CIM_CUST_IDEN_INFO
where CERT_NUM=V_ID_NUM FETCH FIRST 1 ROW ONLY WITH UR;--
END;--
ELSEIF V_NUM_TYPE <> 1 AND V_NUM_TYPE <> 2 THEN
BEGIN
select DISTINCT CUST_UNION_ID INTO V_CUST_UNION_ID from
CDI.CIM_CUST_BASE_INFO
where CUST_REF_NUM=V_ID_NUM WITH UR;--
END;--
END IF;--
IF V_CUST_UNION_ID = '' THEN
SET O_RESPNOSE_TYPE = 'N';--
SET O_RESPNOSE_CODE = '000004';--
RETURN;--
END IF;--
IF V_NUM_TYPE = 1 THEN --查詢卡號 /*卡標識*/
BEGIN
DECLARE RESULT_CARD CURSOR WITH RETURN FOR
SELECT * from tableName WITH UR;--
OPEN RESULT_CARD;--
END;--
ELSE --查詢統一編號
BEGIN
DECLARE RESULT_CARD CURSOR WITH RETURN FOR
SELECT * from tableName WITH UR;--
OPEN RESULT_IDEN;--
END;--
SET O_RESPNOSE_TYPE = 'N';--
SET O_RESPNOSE_CODE = '000000';--
END IF;--
[email protected]
GRANT EXECUTE ON PROCEDURE CDI.PRC_CIM_IDENTITY_FIND TO PUBLIC;