1. 程式人生 > >DB2儲存過程(Oracle對比)

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);
      --宣告出錯處理

      DECLARE EXIT HANDLER FOR SQLEXCEPTIONBEGIN
            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;