Межбанковский клиринг
производительности до уровня реальной системы.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Березина М.П., Крупнов Ю.С. Межбанковские расчеты. – М.: АО
“Финстатинформ”, 1993.-142с.
2. Тосунян Г.А. Клиринг и межбанковские финансовые операции: основные
понятия и финансовые инструменты. – М.: “Дело”, 1994.-56с.
3. Тосунян Г.А. Операционные технологии межбанковского финансового рынка. –
М.: “Дело”, 1994.-122с.
4. Усоскин В.М. Современный коммерческий банк: управление и операции. – М.:
ИПЦ “Вазар-Ферро”, 1994.-320с.
5. Каллаур П.В. Осуществление межбанковских расчетов по прочим платежам //
Банкаўскі веснік – 1998. №1.
6. Жуков В.В. Модернизация платежной системы Беларуси // Банкаўскі веснік –
1997. №9. – С.3-6.
ПРИЛОЖЕНИЕ 1.
SQL-КОД ППП «СИСТЕМА МЕЖБАНКОВСКОГО КЛИРИНГА»
----------------------------------------------------
-- Модуль Banks
-- Содержимое :
-- 1. Sequence BankID_Seq
-- 2. Table Banks
----------------------------------------------------
PROMPT Creating sequence BankID_Seq...
-- Последовательность уникальных идентификаторов для банков-участников
CREATE SEQUENCE BankID_Seq
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999
MINVALUE 1
NOCACHE
CYCLE;
PROMPT Creating table Banks...
-- Таблица банков, зарегистрированных в клиринговой палате
CREATE TABLE Banks
(
BankID Number(8) -- Индентификационный № банка
CONSTRAINT bankno_pk PRIMARY KEY,
BankName VARCHAR2(100) NOT NULL -- Наименование банка
CONSTRAINT bankname UNIQUE,
UserName VARCHAR(20) NOT NULL -- Имя пользователя для входа
CONSTRAINT username UNIQUE
);
-----------------------------------------------
-- Модуль BankState
-- Таблица состояния банков-участников в текущем сеансе
-----------------------------------------------
PROMPT Creating table BankState...
CREATE TABLE BankState
(
BankID NUMBER(8) -- Идентификатор банка
CONSTRAINT sessionbankid_fk REFERENCES Banks ON DELETE CASCADE,
BankStatus NUMBER(3) NOT NULL -- Статус банка в текущем сеансе
);
-----------------------------------------------
-- Пакет ClientUtils
-- Интерфейс модуля "АРМ оператора банка"
-----------------------------------------------
PROMPT Creating package ClientUtils...
CREATE OR REPLACE PACKAGE ClientUtils
AS
-- Возвращает флаг состояния текущей сессии
FUNCTION GetSessionStatus RETURN INT;
-- Процедура начала клирингового сеанса для банка-участника
FUNCTION StartBankSession(aBankID IN INT) RETURN INT;
-- Процедура завершения клирингового сеанса для банка-участника
PROCEDURE StopBankSession(aBankID IN INT);
-- Возвращает уникальный номер вызвавшего банка
FUNCTION GetOurID RETURN INT;
-- Возвращает окончательног сальдо банка
FUNCTION GetFinalSaldo(aBankID IN INT) RETURN INT;
-- Процедура отсылки в клиринговую палату платежа в "электронном" виде
PROCEDURE SendMessage(aSourceBankID IN INT,
aDebitBankID IN INT,
aCreditBankID IN INT,
aAmount IN INT);
END ClientUtils;
/
SHOW ERROR;
-----------------------------------------------
-- Пакет процедур для работы банков-клиентов клиринговой палаты
-----------------------------------------------
PROMPT Creating package body ClientUtils...
CREATE OR REPLACE PACKAGE BODY ClientUtils
AS
-- Функция возвращает флаг состояния текущей сессии
FUNCTION GetSessionStatus RETURN INT
IS
BEGIN
RETURN ServerUtils.SessionState;
END GetSessionStatus;
-- Процедура подключения банка к очередной сессии клиринговой палаты
-- Выполняется каждый рабочий день в определенное время после выполнения
-- на сервере КП процедуры инициализации клирингового сеанса
FUNCTION StartBankSession(aBankID IN INT) RETURN INT
IS
BEGIN
IF ServerUtils.SessionState = GlobalConst.cSessionActive THEN
UPDATE BankState
SET BankStatus = GlobalConst.cBankWork
WHERE BankID = aBankID;
END IF;
RETURN ServerUtils.SessionState;
END StartBankSession;
-- Процедура выхода банка из текущего клирингового сеанса
-- Выполняется кажый день в определенное время до закрытия сеанса
-- на сервере КП
PROCEDURE StopBankSession(aBankID IN INT)
IS
BEGIN
UPDATE BankState
SET BankStatus = GlobalConst.cBankStopWork
WHERE BankId = aBankID;
END StopBankSession;
-- Функция возвращает уникальный номер вызывающего банка
FUNCTION GetOurID RETURN INT
IS
Res INT;
BEGIN
SELECT BankID INTO Res FROM Banks
WHERE UserName = USER;
END GetOurID;
-- Функция возвращает чистую позицию банка по окончанию сеанса
FUNCTION GetFinalSaldo(aBankID IN INT) RETURN INT
IS
aSaldo INT;
BEGIN
BEGIN
SELECT DebitPos-CreditPos INTO aSaldo FROM Results
WHERE BankID = aBankID;
EXCEPTION
WHEN No_Data_Found THEN aSaldo := NULL;
END;
RETURN aSaldo;
END GetFinalSaldo;
-- Процедура отсылки на сервер КП "электронного" платежа
PROCEDURE SendMessage(aSourceBankID IN INT,
aDebitBankID IN INT,
aCreditBankID IN INT,
aAmount IN INT)
IS
aMsgID INT;
BEGIN
SELECT Msg_Seq.NextVal INTO aMsgID FROM Dual;
INSERT INTO Messages
VALUES (aMsgID, aSourceBankID, aDebitBankID,
aCreditBankID, aAmount, GlobalConst.cMsgNotProcessed);
END SendMessage;
END ClientUtils;
/
SHOW ERROR;
-----------------------------------------------
-- Пакет CommonUtils
-- Интерфейс общих подпрограмм
-----------------------------------------------
PROMPT Creating package CommonUtils...
CREATE OR REPLACE PACKAGE CommonUtils
AS
-- Возвращает уникальный номер банка по его имени
FUNCTION GetBankID(aBankName IN VARCHAR2) RETURN INT;
-- Возвращает текущее дебетовое сальдо
FUNCTION GetCurrentDebitSaldo(aBankID IN INT) RETURN INT;
-- Возвращает текущее кредитовое сальдо
FUNCTION GetCurrentCreditSaldo(aBankID IN INT) RETURN INT;
END CommonUtils;
/
SHOW ERROR;
-----------------------------------------------
-- Процедуры и функции общего пользования
-----------------------------------------------
PROMPT Creating package CommonUtils...
CREATE OR REPLACE PACKAGE BODY CommonUtils
AS
-- Возвращает уникальный идентификатор банка-участника по его имени
FUNCTION GetBankID(aBankName IN VARCHAR2) RETURN INT
IS
Res INT;
BEGIN
BEGIN
SELECT BankID INTO Res FROM Banks
WHERE BankName = aBankName;
EXCEPTION
WHEN No_Data_Found THEN Res := NULL;
END;
RETURN Res;
END GetBankID;
-- Возвращает текущее дебетовое сальдо банка-участника
FUNCTION GetCurrentDebitSaldo(aBankID IN INT) RETURN INT
IS
Res INT;
BEGIN
BEGIN
SELECT DebitPos INTO Res FROM TmpRes
WHERE BankID = aBankID;
EXCEPTION
WHEN No_Data_Found THEN
Res := 0;
END;
RETURN Res;
END GetCurrentDebitSaldo;
-- Возвращает текущее кредитовое сальдо банка-участника
FUNCTION GetCurrentCreditSaldo(aBankID IN INT) RETURN INT
IS
Res INT;
BEGIN
BEGIN
SELECT CreditPos INTO Res FROM TmpRes
WHERE BankID = aBankID;
EXCEPTION
WHEN No_Data_Found THEN
Res := 0;
END;
RETURN Res;
END GetCurrentCreditSaldo;
END CommonUtils;
/
SHOW ERROR;
--------------------------------------------------------
-- Модуль содержит глобальные константы
--------------------------------------------------------
PROMPT Creating package GlobalConst
CREATE OR REPLACE PACKAGE GlobalConst
AS
cStatusClass CONSTANT INT := -1;
cBankWork CONSTANT INT := 1;
cBankStopWork CONSTANT INT := 2;
cBankNotWork CONSTANT INT := 3;
cMsgNotProcessed CONSTANT INT := 1;
cMsgAccepted CONSTANT INT := 2;
cMsgSourceError CONSTANT INT := 3;
cMsgDebitError CONSTANT INT := 4;
cMsgCreditError CONSTANT INT := 5;
cMsgProcessed CONSTANT INT := 6;
cSessionUnActive CONSTANT INT := 1;
cSessionActive CONSTANT INT := 2;
END GlobalConst;
/
SHOW ERROR;
------------------------------------------------------
-- Модуль инициализации системы в СУБД Oracle 7.3.3
------------------------------------------------------
CONNECT INTERNAL
SPOOL createdb.log
SET ECHO ON
CREATE TABLESPACE "CLEARING" DATAFILE 'C:\ORAWIN95\DATABASE\clearing.dbf'
SIZE 5M REUSE DEFAULT STORAGE (INITIAL 10K NEXT 10K MINEXTENTS 1
MAXEXTENTS 120 PCTINCREASE 0);
CREATE USER "ALEX" IDENTIFIED BY "ALEX"
DEFAULT TABLESPACE "CLEARING";
GRANT "DBA" TO "ALEX" WITH ADMIN OPTION;
GRANT UNLIMITED TABLESPACE to "ALEX" WITH ADMIN OPTION;
GRANT SELECT ANY TABLE to "ALEX" WITH ADMIN OPTION;
GRANT GRANT ANY ROLE to "ALEX" WITH ADMIN OPTION;
GRANT CREATE ANY SYNONYM to "ALEX" WITH ADMIN OPTION;
GRANT DROP ANY SYNONYM to "ALEX" WITH ADMIN OPTION;
GRANT EXECUTE ANY PROCEDURE to "ALEX";
GRANT CREATE USER to "ALEX";
GRANT ALTER USER to "ALEX";
GRANT DROP USER to "ALEX";
GRANT GRANT ANY PRIVILEGE to "ALEX";
SPOOL OFF
EXIT
--------------------------------------------------
-- Начальное создание объектов системы
--------------------------------------------------
PROMPT Creating databases and sequences...
@@consts.pkg
@@banks
@@messages
@@status
@@statinit
@@bnkstate
@@results
@@tmpres
@@statist
PROMPT Creating packages...
@@srvrutil.pkg
@@srvrutil.bdy
@@clntutil.pkg
@@clntutil.bdy
@@commutil.pkg
@@commutil.bdy
-------------------------------------------------------------
-- Таблица и последовательность для обработки сообщений
-------------------------------------------------------------
PROMPT Creating sequence Msg_Seq...
CREATE SEQUENCE Msg_Seq
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999
MINVALUE 1
NOCACHE
CYCLE;
PROMPT Creating table Messages...
CREATE TABLE Messages
(
MessageID NUMBER(8) -- Номер сообщения
CONSTRAINT message_pk PRIMARY KEY,
SourceBankID NUMBER(8) -- Банк-источник сообщения
CONSTRAINT sourcebank_fk REFERENCES Banks ON DELETE CASCADE,
DebitBankID NUMBER(8) -- Банк-получатель
CONSTRAINT debitbank_fk REFERENCES Banks ON DELETE CASCADE,
CreditBankID NUMBER(8) -- Банк-плательщик
CONSTRAINT creditbank_fk REFERENCES Banks ON DELETE CASCADE,
Amount INT NOT NULL, -- Сумма
MsgStatus INT NOT NULL -- Статус сообщения
);
--------------------------------------------------------------
-- Таблица окончательных результатов клирингового сеанса
--------------------------------------------------------------
PROMPT Creating table Results...
CREATE TABLE RESULTS
(
BankID NUMBER(8)
CONSTRAINT resultbankid_fk REFERENCES Banks ON DELETE CASCADE,
DebitPos INT,
CreditPos INT
);
-------------------------------------------------------
-- Интерфейс модуля "АРМ оператора клиринговой палаты"
-------------------------------------------------------
PROMPT Creating package ServerUtils...
CREATE OR REPLACE PACKAGE ServerUtils
AS
SessionState INT DEFAULT GlobalConst.cSessionUnActive;
PROCEDURE StartClearingSession;
PROCEDURE StopClearingSession;
FUNCTION GetActiveBanksCountInSession RETURN INT;
-- Процедура регистрации банка-участника клиринговой системы
FUNCTION RegisterBank(aBankName IN VARCHAR2,
aUserName IN VARCHAR2,
aPassword IN VARCHAR2) RETURN INT;
PROCEDURE UnRegisterBank(aBankName IN VARCHAR2);
-- Процедура выхода банка из клиринговой системы
PROCEDURE UnRegisterBank(aBankID IN INT);
FUNCTION CheckMessage(aMessageID IN INT) RETURN INT;
PROCEDURE ConfirmMessage(aMessageID IN INT);
END ServerUtils;
/
SHOW ERROR;
-----------------------------------------------
-- Процедуры и функции сервера КП
-----------------------------------------------
PROMPT Creating package body ServerUtils...
CREATE OR REPLACE PACKAGE BODY ServerUtils
AS
-- Процедура инициализации клирингового сенса в клиринговой палате
-- Выполняется каждый день в определенное время
PROCEDURE StartClearingSession
IS
BEGIN
DELETE FROM Messages;
DELETE FROM BankState;
DELETE FROM Results;
DELETE FROM TmpRes;
FOR x IN
(
SELECT BankID
FROM Banks
)
LOOP
INSERT INTO BankState (BankID, BankStatus)
VALUES (x.BankID, GlobalConst.cBankNotWork);
END LOOP;
SessionState := GlobalConst.cSessionActive;
END StartClearingSession;
-- Процедура завершения клирингового сеанса
-- Выполняется каждый день
PROCEDURE StopClearingSession
IS
aDebitSum INT;
aCreditSum INT;
BEGIN
SessionState := GlobalConst.cSessionUnActive;
UPDATE BankState
SET BankStatus = GlobalConst.cBankStopWork
WHERE BankStatus = GlobalConst.cBankWork;
FOR x IN
(
SELECT BankID
FROM BankState
WHERE BankStatus = GlobalConst.cBankStopWork
)
LOOP
BEGIN
SELECT Sum(Amount) INTO aDebitSum
FROM Messages
WHERE MsgStatus = GlobalConst.cMsgAccepted AND DebitBankID =
x.BankID;
EXCEPTION
WHEN No_Data_Found THEN
aDebitSum := 0;
END;
BEGIN
SELECT Sum(Amount) INTO aCreditSum
FROM Messages
WHERE MsgStatus = GlobalConst.cMsgAccepted AND CreditBankID =
x.BankID;
EXCEPTION
WHEN No_Data_Found THEN
aCreditSum := 0;
END;
INSERT INTO Results(BankID, DebitPos, CreditPos)
VALUES(x.BankID, aDebitSum, aCreditSum);
END LOOP;
INSERT INTO Statistics(ItemNo, WorkDay, BankID, DebitPos, CreditPos)
SELECT Stat_Seq.NextVal, SYSDATE, BankID, DebitPos, CreditPos
FROM Results;
DELETE FROM Messages;
DELETE FROM BankState;
DELETE FROM Results;
DELETE FROM TmpRes;
END StopClearingSession;
-- Возвращает количество активных участников текущего сеанса
FUNCTION GetActiveBanksCountInSession RETURN INT
IS
Res INT;
BEGIN
BEGIN
SELECT Count(*) INTO Res FROM BankState
WHERE BankStatus = GlobalConst.cBankWork;
EXCEPTION
WHEN No_Data_Found THEN
Res :=0;
END;
RETURN Res;
END GetActiveBanksCountInSession;
-- Регистрирует новый банк в клиринговой системе
FUNCTION RegisterBank(aBankName IN VARCHAR2,
aUserName IN VARCHAR2,
aPassword IN VARCHAR2) RETURN INT
IS
Res INT;
Cur INT;
Col INT;
BEGIN
BEGIN
SELECT BankID INTO Res FROM Banks
WHERE BankName = aBankName;
EXCEPTION
WHEN No_Data_Found THEN
SELECT BankID_Seq.NextVal INTO Res FROM Dual;
INSERT INTO Banks(BankID, BankName, UserName)
VALUES (Res, aBankName, aUserName);
cur:=dbms_sql.open_cursor;
dbms_sql.parse(cur,
'CREATE USER '||aUserName||' IDENTIFIED BY '||aPassword,
dbms_sql.v7);
Col := dbms_sql.execute(Cur);
dbms_sql.parse(cur,
'GRANT CREATE SESSION to '||aUserName,
dbms_sql.v7);
Col := dbms_sql.execute(Cur);
dbms_sql.close_cursor(cur);
END;
RETURN Res;
END RegisterBank;
-- Удаляет банк из числа участников по его номеру
PROCEDURE UnRegisterBank(aBankID IN INT)
IS
BEGIN
DELETE FROM Banks
WHERE BankID = aBankID;
END UnRegisterBank;
-- Удаляет банк из числа участников по его имени
PROCEDURE UnRegisterBank(aBankName IN VARCHAR2)
IS
BEGIN
DELETE FROM Banks
WHERE BankName = aBankName;
END UnRegisterBank;
-- Проверяет допустимость поступившего платежного документа
FUNCTION CheckMessage(aMessageID IN INT) RETURN INT
IS
aMsgStatus INT;
aBankStatus INT;
aSourceBank INT;
aDebitBank INT;
aCreditBank INT;
BEGIN
SELECT SourceBankID INTO aSourceBank FROM Messages
WHERE MessageID = aMessageID;
SELECT DebitBankID INTO aDebitBank FROM Messages
WHERE MessageID = aMessageID;
SELECT CreditBankID INTO aCreditBank FROM Messages
WHERE MessageID = aMessageID;
BEGIN
SELECT BankStatus INTO aBankStatus FROM BankState
WHERE BankID = aSourceBank;
EXCEPTION
WHEN No_Data_Found THEN
UPDATE Messages
SET MsgStatus = GlobalConst.cMsgSourceError
WHERE MessageID = aMessageID;
RETURN GlobalConst.cMsgSourceError;
END;
IF aBankStatus = GlobalConst.cBankNotWork THEN
UPDATE Messages
SET MsgStatus = GlobalConst.cMsgSourceError
WHERE MessageID = aMessageID;
RETURN GlobalConst.cMsgSourceError;
END IF;
BEGIN
SELECT BankStatus INTO aBankStatus FROM BankState
WHERE BankID = aDebitBank;
EXCEPTION
WHEN No_Data_Found THEN
UPDATE Messages
SET MsgStatus = GlobalConst.cMsgDebitError
WHERE MessageID = aMessageID;
RETURN GlobalConst.cMsgDebitError;
END;
IF aBankStatus = GlobalConst.cBankNotWork THEN
UPDATE Messages
SET MsgStatus = GlobalConst.cMsgDebitError
WHERE MessageID = aMessageID;
RETURN GlobalConst.cMsgDebitError;
END IF;
BEGIN
SELECT BankStatus INTO aBankStatus FROM BankState
WHERE BankID = aCreditBank;
EXCEPTION
WHEN No_Data_Found THEN
UPDATE Messages
SET MsgStatus = GlobalConst.cMsgCreditError
WHERE MessageID = aMessageID;
RETURN GlobalConst.cMsgCreditError;
END;
IF aBankStatus = GlobalConst.cBankNotWork THEN
UPDATE Messages
SET MsgStatus = GlobalConst.cMsgCreditError
WHERE MessageID = aMessageID;
RETURN GlobalConst.cMsgCreditError;
END IF;
UPDATE Messages
SET MsgStatus = GlobalConst.cMsgProcessed
WHERE MessageID = aMessageID;
RETURN GlobalConst.cMsgProcessed;
END CheckMessage;
-- Подтверждает платежный документ, вызывается при наличии необходимых
-- документов
PROCEDURE ConfirmMessage(aMessageID IN INT)
IS
aMsgStatus INT;
aTmpID INT;
aAmount INT;
aDebitBank INT;
aCreditBank INT;
BEGIN
SELECT MsgStatus, DebitBankID, CreditBankID
INTO aMsgStatus, aDebitBank, aCreditBank
FROM Messages
WHERE MessageID = aMessageID;
IF aMessageID = GlobalConst.cMsgProcessed THEN
UPDATE Messages
SET MsgStatus = GlobalConst.cMsgAccepted
WHERE MessageID = aMessageID;
SELECT Amount INTO aAmount FROM Messages
WHERE MessageID = aMessageID;
BEGIN
SELECT BankID INTO aTmpID FROM TmpRes
WHERE BankID = aDebitBank;
EXCEPTION
WHEN No_Data_Found THEN
INSERT INTO TmpRes (BankID, DebitPos, CreditPos)
VALUES (aDebitBank, 0, 0);
END;
UPDATE TmpRes
SET DebitPos = DebitPos + aAmount
WHERE BankID = aDebitBank;
BEGIN
SELECT BankID INTO aTmpID FROM TmpRes
WHERE BankID = aCreditBank;
EXCEPTION
WHEN No_Data_Found THEN
INSERT INTO TmpRes (BankID, DebitPos, CreditPos)
VALUES (aCreditBank, 0, 0);
END;
UPDATE TmpRes
SET CreditPos = CreditPos - aAmount
WHERE BankID = aCreditBank;
END IF;
END ConfirmMessage;
END ServerUtils;
/
SHOW ERROR;
---------------------------------------------------------
-- Таблица и последовательность для ведения статистики
---------------------------------------------------------
PROMPT Create table Statistics...
PROMPT Creating sequence Stat_Seq...
CREATE SEQUENCE Stat_Seq
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999
MINVALUE 1
NOCACHE
CYCLE;
CREATE TABLE Statistics
(
ItemNo NUMBER(8) -- Номер элемента выборки
CONSTRAINT itemno_pk PRIMARY KEY,
WorkDay DATE, -- Дата и время платежа
BankID NUMBER(8) -- Номер банка
DebitPos INT, -- Дебетовая позиция
CreditPos INT -- Кредитовая позиция
);
-----------------------------------------------
-- Заполнение таблицы классификаторов
-----------------------------------------------
PROMPT Inserting data into table Status ...
BEGIN
DELETE FROM Status WHERE StatusClass = 1;
INSERT INTO Status VALUES (1, GlobalConst.cStatusClass,
'Статус банка в текущем сеансе');
INSERT INTO Status VALUES (1, GlobalConst.cBankWork,
'Банк участвует в текущем сеансе');
INSERT INTO Status VALUES (1, GlobalConst.cBankStopWork,
'Банк закончил текущий сенс');
INSERT INTO Status VALUES (1, GlobalConst.cBankNotWork,
'Банк не участвует в текущем сенсе');
COMMIT;
DELETE FROM Status WHERE StatusClass = 2;
INSERT INTO Status VALUES (2, GlobalConst.cStatusClass,
'Статус сообщения о платеже');
INSERT INTO Status VALUES (2, GlobalConst.cMsgNotProcessed,
'Сообщение не обработано');
INSERT INTO Status VALUES (2, GlobalConst.cMsgSourceError,
'Банк-источник не работает');
INSERT INTO Status VALUES (2, GlobalConst.cMsgDebitError,
'Банк по дебету счета не работает');
INSERT INTO Status VALUES (2, GlobalConst.cMsgCreditError,
'Банк по кредиту счета не работает');
INSERT INTO Status VALUES (2, GlobalConst.cMsgProcessed,
'Сообщение обработано и требует документального подтверждения');
INSERT INTO Status VALUES (2, GlobalConst.cMsgAccepted,
'Сообщение обработано и принято в систему взаимозачета');
COMMIT;
END;
/
-----------------------------------------------
-- Таблица классификаторов
-----------------------------------------------
PROMPT Create table Status ...
CREATE TABLE Status
(
StatusClass NUMBER(3),
StatusNo NUMBER(3),
StatusText VARCHAR2(70) NOT NULL,
CONSTRAINT status_pk PRIMARY KEY (StatusClass, StatusNo)
);
-------------------------------------------------------
-- Таблица текущих результатов клирингового сеанса
-------------------------------------------------------
PROMPT Creating table TmpRes...
CREATE TABLE TmpRes
(
BankID NUMBER(8)
CONSTRAINT tmpresbankid_fk REFERENCES Banks ON DELETE CASCADE,
DebitPos INT,
CreditPos INT
);
---------------------------------------------------
-- Удаление объектов системы
---------------------------------------------------
PROMPT Deleting databases...
SET ECHO ON;
DROP SEQUENCE Stat_Seq;
DROP TABLE Statistics;
DROP TABLE BankState;
DROP TABLE Status;
DROP SEQUENCE Msg_Seq;
DROP TABLE Messages;
DROP TABLE Results;
DROP TABLE TmpRes;
DROP SEQUENCE BankID_Seq;
DROP TABLE Banks;
PROMPT Deleting packages...
DROP PACKAGE BODY ServerUtils;
DROP PACKAGE ServerUtils;
DROP PACKAGE BODY ClientUtils;
DROP PACKAGE ClientUtils;
DROP PACKAGE BODY CommonUtils;
DROP PACKAGE CommonUtils;
SET ECHO OFF;
----------------------------------------------------------------
-----------------------
[pic]
[pic]
[pic]
Страницы: 1, 2, 3, 4, 5
|