Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Firebird Π Π£ΠšΠžΠ’ΠžΠ”Π‘Π’Π’Πž Π ΠΠ—Π ΠΠ‘ΠžΠ’Π§Π˜ΠšΠ БАЗ ДАННЫΠ₯Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 149

Автор Π₯Π΅Π»Π΅Π½ Π‘ΠΎΡ€Ρ€ΠΈ

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ записСй Π·Π°ΠΊΠ°Π·ΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ BEFORE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ этих ΠΏΡ€Π°Π²ΠΈΠ» Π²Ρ‹Π΄Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ.

Для любой вСрсии Firebird ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π²Π° Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° для осущСствлСния этих ΠΏΡ€Π°Π²ΠΈΠ»: BEFORE INSERT ΠΈ BEFORE UPDATE.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для Π΄Π²ΡƒΡ… условий:


CREATE EXECPTION E_CANT_ACCEPT

'Operation refused. REASON: Customer is on hold.' ^

/* ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ отклоняСтся. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°: Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ покупатСля приостановлСна */

CREATE EXCEPTION E_CANT_EXTEND

'Operation refused. REASON: Order already shipped.' ^

/* ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ отклоняСтся. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°: Π·Π°ΠΊΠ°Π· ΡƒΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ */

COMMIT ^


Π’Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ для вСрсии 1.0.x:


CREATE TRIGGER BI_SALES0 FOR SALES

ACTIVE BEFORE INSERT POSITION 0 AS

BEGIN

IF (EXISTS (SELECT 1 FROM CUSTOMER

WHERE CUST_NO = NEW.CUST_NO

AND ON_HOLD IS NOT NULL)) THEN

EXCEPTION E_CANT_ACCEPT;

END ^

/* */

CREATE TRIGGER BU_SALES0 FOR SALES

ACTIVE BEFORE UPDATE POSITION 0 AS

BEGIN

IF (OLD.ORDER_STATOS = 'shipped') THEN

EXCEPTION E_CANT_EXTEND; ELSE

IF (EXISTS (SELECT 1 FROM CUSTOMER

WHERE CUST_NO = NEW.CUST_NO

AND ON_HOLD IS NOT NULL) ) THEN

EXCEPTION E_CANT_ACCEPT;

END ^


БообщСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π²ΠΎ врСмя выполнСния

НСкоторыС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ вСрсии 1.5 ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сообщСний ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ большС возмоТностСй написания ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. БтатичСскоС сообщСниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π² CREATE EXCEPTION, Π²ΠΎ врСмя выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ тСкст, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π»ΡƒΡ‡ΡˆΠΈΠΉ контСкст для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ возмоТности вСрсии 1.5 ΠΏΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ самых ΠΏΡ€Π°Π²ΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΈ Π² Π΄Π²ΡƒΡ… Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°Ρ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. На этот Ρ€Π°Π· ΠΌΡ‹ помСстим эти ΠΏΡ€Π°Π²ΠΈΠ»Π° Π² ΠΎΠ΄ΠΈΠ½ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ сообщСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

Π’ΠΎΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

CREATE EXCEPTION E_REFUSE_ORDER 'Operation refused. ' ^

/* ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚Π° */

А Π²ΠΎΡ‚ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€:


CREATE TRIGGER BA_SALES0 FOR SALES

ACTIVE BEFORE INSERT OR UPDATE POSITION 0 AS

DECLARE VARIABLE ORDER_STATE SMALLINT = 0;

BEGIN

IF (UPDATING AND OLD.ORDER_STATUS = 'shipped') THEN

ORDER_STATE = 1;

IF (

(EXISTS (SELECT ON_HOLD FROM CUSTOMER

WHERE CUST_NO = NEW.CUST_NO

AND ON_HOLD IS NOT NULL)

AND (INSERTING OR ORDER_STATE = 0)) THEN

ORDER_STATE = 2;

IF (ORDER_STATE = 1) THEN

EXCEPTION E_REFUSE_ORDER 'Order ' || NEW.PO_NUMBER || ' already shipped.';

/* EXCEPTION E_REFUSE_ORDER 'Π—Π°ΠΊΠ°Π· ' || NEW.PO_NUMBER || ' ΡƒΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½' */

ELSE

IF (ORDER_STATE = 2) THEN

EXCEPTION E_REFUSE_ORDER


'Order '|| NEW.PO_NUMBER ||'. Customer ' || NEW.CUST_NO || ' is on hold.';

/* 'Π—Π°ΠΊΠ°Π· '|| NEW.PO_NUMBER ||'. ΠŸΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»ΡŒ ' || NEW.CUST_NO || ' Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½'; */

END ^

Π’ массивС состояния ошибки ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ имя ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ вмСстС с сообщСниСм Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

Бписок кодов ошибок

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 10 содСрТит списки Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠ΄Ρ‹ SQLCODE, GDSCODE, символы для GDSCODE ΠΈ сообщСния Π½Π° английском языкС, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Ρ€Π΅Π»ΠΈΠ·Π° Firebird 1.5.0.

ΠŸΡ€ΠΈ создании Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Firebird сообщСния Π½Π° английском языкС Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠΎΠ΄Ρ‹ SQLCODE ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ, Π½ΠΎ GDSCODE Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π½Π° Π»Π΅Ρ‚Ρƒ. Π€Π°ΠΉΠ» firebird.msg Π² вашСм ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Firebird создан Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ сСрвСра.

НаписаниС вашСго собствСнного списка ΠΊΠΎΠ΄ΠΎΠ² ошибок

Π Π°Π΄ΠΈ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚ΡΡ‚Π²Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ gbak для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (с ΠΈΠΌΠ΅Π½Π΅ΠΌ gbak.msg) ΠΈΠ· рСпозитория CVS ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Firebird. Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° http:// sourceforge.net/projects/firebird ΠΈ ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС CVS Browser, ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠ±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ Π΄ΠΎ Π²Π΅Ρ‚Π²ΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ,/firebird/firebird2/src/msgs/. Π’ Π½ΠΈΠΆΠ½Π΅ΠΉ части дисплСя Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ стрСлкС Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка для поиска ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅ΠΉ вас Π²Π΅Ρ‚Π²ΠΈ. ΠžΡ‚Ρ‚ΡƒΠ΄Π° Π²Ρ‹ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ».

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ хранимая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° сгСнСрировала список для прилоТСния 10. Она Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список Π²ΠΎ внСшнюю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ подходящим для вас ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.


SET TERM ^;

/* Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» */

CREATE TABLE ERRORCODES

EXTERNAL FILE


'Π‘:\Program Files\Firebird\Firebird_1_5\MyData\27 94app10.txt'


(Listltem CHAR(169))^

COMMIT^

/* ΠŸΡ€ΠΈ нСобходимости ΡƒΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСкции ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ASCII_CHAR() для получСния символов Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки */

/* DECLARE EXTERNAL FUNCTION ascii_char

INTEGER

RETURNS CSTRING(1) FREE_IT

ENTRY_POINT 'IB_UDF_ascii_char' MODULE_NAME 'ib_udf'^

COMMIT^

/* Под ΠΊΠΎΠ½Π΅Ρ† сама хранимая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π°Ρ тСкстовый Ρ„Π°ΠΉΠ», эквивалСнтный ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ 10 Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ*/

CREATE PROCEDURE OUTPUT ERRCODES

AS

DECLARE VARIABLE SQC SMALLINT;

DECLARE VARIABLE NUM SMALLINT;

DECLARE VARIABLE FAC SMALLINT;

DECLARE VARIABLE SYM VARCHAR(32);

DECLARE VARIABLE TXTVARCHAR(118) ;

DECLARE VARIABLE GDC CHAR(9) CHARACTER SET OCTETS

DECLARE VARIABLE BASEO INTEGER = 335544320;

DECLARE VARIABLE CALCNUM INTEGER;

DECLARE VARIABLE EOL CHAR(2) ;


BEGIN

EOL = ASCII_CHAR(13) || ASCII_CHAR(10);

/* ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π° строки */

FOR SELECT

S.SQL_CODE,

S.NUMBER,

S.FAC_CODE,

S. GDS_SYMBOL,

M.TEXT

FROM SYSTEM_ERRORS S

JOIN MESSAGES M

ON

M.FAC_CODE = S.FAC_CODE

AND M.NUMBER = S.NUMBER

AND M.SYMBOL = S.GDS_SYMBOL

/* УстранСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…/Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ² */

WHERE M.TEXTNOT CONTAINING 'journal'

AND M.TEXTNOT CONTAINING 'dump'

AND s.GDS_SYMBOL NOT CONTAINING 'license'

AND S.GDS_SYMBOL NOT CONTAINING 'wal_'

AND S. GDS_SYMBOLIS NOT NOLL

AND S.SQL_CODE < 102

ORDER BY1 DESC, 2

INTO :SQC, :NUM, :FAC, :SYM, :TXT

DO

BEGIN

/* ВСксты сообщСний Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ нСбольшой Ρ‚Ρ€ΡŽΠΊ для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ */

IF (TXT IS NULL) THEN

TXT = '(Message unknown)';

ELSE

TXT = UPPER(SUBSTRING(TXT FROM 1 FOR 1)) ||

SUBSTRING(TXT FROM 2);

/* Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ значСния ΠΊΠΎΠ΄ΠΎΠ² (FAC_CODE) ΠΈ чисСл NUMBER ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ чисСл GDSCODE. ΠžΡ‡Π΅Π½ΡŒ просто ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΠΈΠ· послСдних Ρ‚Π°Π±Π»ΠΈΡ† SYSTEM_ERRORS ΠΈ MESSAGES */

IF (FAC IS NOT NULL AND NUM IS NOT NULL) THEN

/* Нам Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ошибок! */

BEGIN

CALCNUM = BASE0 + (FAC * 65535);

CALCNUM = CALCNUM + NUM + FAC;

GDC = CAST(CALCNUM AS CHAR(9));

INSERT INTO ERRORCODES

VALUES(

/* всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС */

:SQC || ' | ' || :GDC | | ' | ' || :SYM | | ' |' | | :TXT || :EOL) ;

END

END

END ^

COMMIT^

EXECUTE PROCEDURE OUTPUT_ERRCODES ^

COMMIT ^

SET TERM ; ^

/* ВСкстовый Ρ„Π°ΠΉΠ» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³ΠΎΡ‚ΠΎΠ² ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ тСкстовым процСссором для нСбольшой ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ², созданных Π² ΠΏΡ€Π°Π²ΠΎΠΉ части Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки. Быстрый поиск ΠΈ Π·Π°ΠΌΠ΅Π½Π° замСнят всС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ '|' Π½Π° ASCII 9 (tab), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊ табуляции для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ. */

Бобытия

Бобытия Firebird ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сигнализации, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сообщСния клиСнтским прилоТСниям, ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прилоТСния ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚ измСнСния Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠ΅ прилоТСния ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌ "ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ" ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… событий Ρ‡Π΅Ρ€Π΅Π· интСрфСйс сСрвСр-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π±Π΅Π· систСмных Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° опрос наличия ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠ΅ подсистСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ Ρƒ сСрвСра новости ΠΎΠ± измСнСниях состояния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅Π΄ΠΊΠΎΡΡ‚ΡŒΡŽ Π² ΠΌΠΈΡ€Π΅ рСляционных подсистСм Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. Однако модСль сообщСния ΠΎ событиях Π² Firebird Π½Π΅ расходуСт рСсурсов сСти ΠΈΠ»ΠΈ процСссора ΠΏΡ€ΠΈ опросС. Π­Ρ‚ΠΎ являСтся подсистСмой сСрвСра, которая поддСрТиваСтся сСрвСром ΠΈ Π½Π° сСрвСрС. ΠšΠ»ΠΈΠ΅Π½Ρ‚ "рСгистрируСт интСрСс" Π² событии ΠΈ сигнализируСт, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΆΠ΄Π΅Ρ‚ этого события.

Когда транзакция подтвСрТдаСтся, сообщСния ΠΎΠ±ΠΎ всСх ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… событиях ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ всСм ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΌ ΠΈΡ… клиСнтским прилоТСниям. ПослС этого клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° это событиС Π»ΡŽΠ±Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ИспользованиС сообщСний ΠΎ событиях

БистСма сообщСний ΠΎ событиях Π² Firebird ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ количСству Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ эти срСдства для быстрого рСагирования Π½Π° измСнСния состояния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ со срСдствами ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ связи, процСссом управлСния, тСхнологиями планирования ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² рСагирования.

Π­Ρ‚ΠΈ возмоТности Π±Π΅Π·Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° ΠΈ прилоТСния. НСкоторыми ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

* сСрвисы Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт;

* ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эту схСму Π² качСствС сигнала для обновлСния ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… офисах, ΠΊΠΎΠ³Π΄Π° происходит ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… мСст ΠΈΠ»ΠΈ расписания;

* ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»Ρƒ Π·Π°ΠΊΡƒΠΏΠΎΠΊ сообщСниС "запас Π½Π° исходС", ΠΊΠΎΠ³Π΄Π° количСство элСмСнтов ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ находится Π½ΠΈΠΆΠ΅ минимально допустимого уровня запасов;

* Ρ€ΠΎΠ·Π½ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ прайс-листа;

* устройство слСТСния Π·Π° мСханичСским процСссом сигнализируСт ΠΎ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ запасов ΡΡ‹Ρ€ΡŒΡ.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°

Π˜Π½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ событий ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ измСнСния состояния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… - ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ INSERT, UPDATE ΠΈ DELETE. Бигнализация ΠΎ событии выполняСтся Π² Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°Ρ… ΠΈΠ»ΠΈ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° PSQL

POST_EVENT.

Однако POST EVENT являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ элСмСнтом этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°- ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. Π­Ρ‚ΠΎ просто посылка сигнала ΡΠ»ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠΌ прилоТСниям. Он Π½Π΅ нСсСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΎ ΠΊΠ°ΠΊΠΎΠΌ событии Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ½ сигнализируСт; Π·Π°Π΄Π°Ρ‡Π΅ΠΉ прилоТСния являСтся обСспСчСниС собствСнного контСкста для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ события.

Π‘Π°ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ событий состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… взаимодСйствий ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрной стороной ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.


Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π° сторонС сСрвСра

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π½Π° сторонС сСрвСра ΡΠ²Π»ΡΡŽΡ‚ΡΡ: