21 октября, воскресенье 07:27
Bankir.Ru

Объявление

Свернуть
Пока нет объявлений.

Надоело каждый раз искать счета по кредитному договору, поэтому написал следующий код

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Надоело каждый раз искать счета по кредитному договору, поэтому написал следующий код

    Код:
    CREATE OR REPLACE 
    TYPE nm_t_moreaccounts AS OBJECT
    -- + Автор: ...
    -- + Объект для выборки/хранения счетов, привязанных к кред. договору или кредитной линии
    -- + из таблицы MoreAcc
    (
      AccNum       VARCHAR2(35),                                                    -- "Старый" номер счета
      CurrCode     VARCHAR2(35),                                                    -- Код валюты
      NewAccNum    VARCHAR2(35),                                                    -- "Новый" номер счета
      AccName      VARCHAR2(128),                                                   -- Наименование счета
      AccTypeName  VARCHAR2(256),                                                   -- Наименование типа счета
      Arm          NUMBER,                                                          -- Код арма
      
      -- Ф-ия для инициализации объекта
      -- p_nARM  - номер арма: 6 - кредитные договора, 16 - кредитные линии
      -- p_sCont - номер кредитного договора/линии
      -- p_nCode - код счета
      STATIC FUNCTION GetObject(p_nARM  NUMBER,
                                p_sCont VARCHAR2,
                                p_nCode NUMBER
                               ) RETURN NM_T_MoreAccounts,
    
      MEMBER FUNCTION isNull RETURN BOOLEAN						   
    )
    /
    
    CREATE OR REPLACE 
    TYPE BODY nm_t_moreaccounts
    IS
      STATIC FUNCTION GetObject(p_nARM NUMBER,
                                p_sCont VARCHAR2,
                                p_nCode NUMBER
                               )
      RETURN NM_T_MOREAccounts
      IS
        MoreAccR MoreAcc%ROWTYPE;
        v_sAccNum      VARCHAR2(35);
        v_sCurrCode    VARCHAR2(35);
        v_sNewAccNum   VARCHAR2(35);
        v_sAccName     VARCHAR2(128);
        v_sAccTypeName VARCHAR2(256);
        
      BEGIN
    
      IF    p_nCode = 1 THEN
        v_sAccTypeName := 'Резервы на возможные потери';
      ELSIF p_nCode = 2 THEN
        v_sAccTypeName := 'Резервы на возможные потери по просроченным ссудам';
      ELSIF p_nCode = 3 THEN
        v_sAccTypeName := 'Не используется';
      ELSIF p_nCode = 4 THEN
        v_sAccTypeName := 'Расчетный/списания';                                     -- для некоторых договоров
      ELSIF p_nCode = 5 THEN
        v_sAccTypeName := 'Рублевый счет для валютных договоров';
      ELSIF p_nCode = 11 THEN
        v_sAccTypeName := 'Требования банка по получению процентов';
      ELSIF p_nCode = 12 THEN
        v_sAccTypeName := 'Предстоящие поступления по операциям, связанным с представлением (размещением) денежных средств улиентам';
      ELSIF p_nCode = 13 THEN
        v_sAccTypeName := 'Проценты полученные по предоставленным кредитам';
      ELSIF p_nCode = 14 THEN
        v_sAccTypeName := 'Штрафы, пени, неустойки полученные';
      ELSIF p_nCode = 15 THEN
        v_sAccTypeName := 'Расходы банка по списаниб просроченной задолженности';
      ELSIF p_nCode = 16 THEN
        v_sAccTypeName := 'Просроченные проценты за предоставленные кредиты, полученные';
      ELSIF p_nCode = 17 THEN
        v_sAccTypeName := '???';
      ELSIF p_nCode = 18 THEN
        v_sAccTypeName := 'Предстоящие поступления по штафам';
      ELSIF p_nCode = 19 THEN
        v_sAccTypeName := 'Предстоящие поступления по просроченным процентам';
      ELSE
        v_sAccTypeName := 'Невозможно определить тип счета';
      END IF;
    
      SELECT * INTO MoreAccR FROM MoreAcc M WHERE M.Arm = p_nARM AND M.ContNum = p_sCont AND M.Code = p_nCode;
    
      IF p_nCode IN (1, 2, 3, 4) THEN                                               -- Представление в виде AccNum+CurrCode
        SELECT A.AccNum, A.CurrCode, A.NewAccNum, A.AccName
          INTO v_sAccNum, v_sCurrCode, v_sNewAccNum, v_sAccName
          FROM Accounts A WHERE A.AccNum = MoreAccR.AccNum AND A.CurrCode = MoreAccR.CurrCode;
          
      ELSIF p_nCode IN (5, 11, 12, 13, 14, 15, 16, 17, 18, 19) THEN
        SELECT A.AccNum, A.CurrCode, A.NewAccNum, A.AccName
          INTO v_sAccNum, v_sCurrCode, v_sNewAccNum, v_sAccName
          FROM Accounts A WHERE A.NewAccNum = MoreAccR.AccNum;
      ELSE
        RETURN NM_T_MOREAccounts(NULL, NULL, NULL, NULL, v_sAccTypeName, p_nARM);
      END IF;
      
    
    
      RETURN NM_T_MOREAccounts(v_sAccNum, v_sCurrCode, v_sNewAccNum, v_sAccName, v_sAccTypeName, p_nARM);
    
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          RETURN NM_T_MOREAccounts(NULL, NULL, NULL, NULL, v_sAccTypeName, p_nARM);
      END;
    
    
      MEMBER FUNCTION isNull RETURN BOOLEAN
      IS
      BEGIN
        IF AccNum       IS NULL OR AccNum = chr(1)      THEN RETURN TRUE;
    		ELSIF CurrCode  IS NULL OR CurrCode = chr(1)    THEN RETURN TRUE;
    		ELSIF NewAccNum IS NULL OR NewAccNum = chr(1)   THEN RETURN TRUE;
    		ELSIF AccName   IS NULL OR AccName = chr(1)     THEN RETURN TRUE;
    		ELSE RETURN FALSE;
    		END IF;
      END;
    END;
    /
    как это работает:

    Код:
    DECLARE 
     oAcc nm_t_moreaccounts;
     cont VARCHAR2(9) := '     2700';
    BEGIN
      oAcc := nm_t_moreaccounts.getobject(6, cont, 1);
      
      IF oAcc.IsNull THEN
        dbms_output.put_line('Не найден счет "' || oAcc.AccTypeName || '" в договоре ' || cont);
      ELSE
        dbms_output.put_line(oAcc.AccNum);
        dbms_output.put_line(oAcc.CurrCode);
        dbms_output.put_line(oAcc.NewaccNum);
        dbms_output.put_line(oAcc.AccName);
        dbms_output.put_line(oAcc.AccTypeName);
      END IF;
    END;

  • #2
    Код:
    CREATE OR REPLACE 
    TYPE nm_t_vbalacc AS OBJECT
    -- + Объект для выборки/хранения счетов, представленных как "внебалансовые" 
    (11 или 12 последних цифр 
    (покажите мне автора этого "изобретения !!!") )
    (
      AccNum       VARCHAR2(35),                                                    -- "Старый" номер счета
      CurrCode     VARCHAR2(35),                                                    -- Код валюты
      NewAccNum    VARCHAR2(35),                                                    -- "Новый" номер счета
      AccName      VARCHAR2(128),                                                   -- Наименование счета
    
      
      -- Ф-ия для инициализации объекта
      -- p_sVBalAcc2  - Номер счета 2-го порядка
      -- p_sCurrCode  - Код валюты счета
      -- p_sVBalAcc11 - Последние 11 или 12 цифр счета
      STATIC FUNCTION GetObject(p_sVBalAcc2  VARCHAR2,
                                p_sCurrCode  VARCHAR2,
                                p_sVBalAcc11 VARCHAR2
                               ) RETURN nm_t_VBalAcc,
    
      MEMBER FUNCTION isNull RETURN BOOLEAN						   
    )
    /
    
    
    CREATE OR REPLACE 
    TYPE BODY nm_t_vbalacc
    IS
      STATIC FUNCTION GetObject(p_sVBalAcc2  VARCHAR2,
                                p_sCurrCode  VARCHAR2,
                                p_sVBalAcc11 VARCHAR2
                               ) 
      RETURN nm_t_VBalAcc
      IS
        v_sAccNum      VARCHAR2(35);
        v_sCurrCode    VARCHAR2(35);
        v_sNewAccNum   VARCHAR2(35);
        v_sAccName     VARCHAR2(128);
        
      BEGIN
    
      v_sNewAccNum := CredFunc.CalcAccByVBAcc(p_sVBalAcc2, p_sCurrCode, p_sVBalAcc11);
    
      SELECT A.AccNum, A.CurrCode, A.NewAccNum, A.AccName
        INTO v_sAccNum, v_sCurrCode, v_sNewAccNum, v_sAccName
        FROM Accounts A WHERE A.NewAccNum = v_sNewAccNum;
    
      RETURN nm_t_VBalAcc(v_sAccNum, v_sCurrCode, v_sNewAccNum, v_sAccName);
    
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          RETURN nm_t_VBalAcc(CHR(1), CHR(1), CHR(1), CHR(1));
      END;
    
    
      MEMBER FUNCTION isNull RETURN BOOLEAN
      IS
      BEGIN
        IF    AccNum    = chr(1)   THEN RETURN TRUE;
    		ELSIF CurrCode  = chr(1)   THEN RETURN TRUE;
    		ELSIF NewAccNum = chr(1)   THEN RETURN TRUE;
    		ELSE RETURN FALSE;
    		END IF;
      END;
    END;
    /
    Последний раз редактировалось RedPank; 11.10.2004, 12:37.

    Комментарий

    Пользователи, просматривающие эту тему

    Свернуть

    Присутствует 1. Участников: 0, гостей: 1.

    Обработка...
    X