Descriptions
Вызывается клиентом. Поколение изменений в таблице DB_PROFILE. [in]A_CLIENT_ID - ID БД клиента. [in]A_SERV_GEN - поколение изменений на сервере, которое запросил клиент. Возвращает набор записей. [out]LOG_ACTION - действие которое должен выполнить клиент(I - вставить, D - удалить (изменение запрещено)).
 
Input Parameters
Parameter | Type |
---|---|
A_CLIENT_ID |
INTEGER |
A_SERV_GEN |
INTEGER |
 
Output Parameters
Parameter | Type |
---|---|
LOG_DB_ID |
INTEGER |
LOG_ACTION |
CHAR (1) |
 
Definition
CREATE PROCEDURE DB_ID_GEN (
A_CLIENT_ID INTEGER,
A_SERV_GEN INTEGER)
RETURNS (
LOG_DB_ID INTEGER,
LOG_ACTION CHAR (1))
AS
DECLARE VARIABLE LOG_UPD_GEN INTEGER;
DECLARE VARIABLE LOG_INS_GEN INTEGER;
DECLARE VARIABLE LOG_IS_DELETED INTEGER;
BEGIN
FOR
SELECT
LOG_DB_ID,
LOG_UPD_GEN,
LOG_INS_GEN,
LOG_IS_DELETED
FROM
LOG_DB_PROFILE LEFT JOIN DB_PROFILE ON LOG_DB_ID = DB_ID
WHERE
LOG_UPD_GEN IS NOT NULL/*С установленным поколением(если LOG_INS_GEN не установлено, то LOG_UPD_GEN тоже не установлено)*/
AND LOG_DB_ID <> :A_CLIENT_ID/*Только ÷ужие*/
INTO
:LOG_DB_ID,
:LOG_UPD_GEN,
:LOG_INS_GEN,
:LOG_IS_DELETED
DO
BEGIN
IF( LOG_INS_GEN = A_SERV_GEN )THEN
BEGIN
LOG_ACTION = 'I';/*Клиент должен вставить запись, если она уже не вставлена*/
IF( LOG_IS_DELETED = 0 )THEN SUSPEND;/*Если запись не была удалена в том же поколении в кот. вставлена*/
END
ELSE IF( LOG_UPD_GEN = A_SERV_GEN )THEN
BEGIN
IF( LOG_IS_DELETED <> 0 ) THEN LOG_ACTION = 'D';/*Клиент должен удалить запись, если она ещ¸ не удалена*/
ELSE EXCEPTION EINTERNAL_UPDATED_DB_PROFILE;/*Обновление DB_PROFILE не предусмотрено*/
SUSPEND;
END
END
END
This file was generated with EMS InterBase/FireBird Manager (www.ibmanager.com) at 11/13/2006 10:51 PM |
![]() ![]() ![]() |