Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Create procedure get_kod_rasxod




RETURNS (NR INTEGER) AS

BEGIN NR=GEN_ID(RASXOD_KOD,1); END

В результате наших действий на сервере формируется следующая база:

/* Extract Database c:\uchbase\sklad\ib_sklad.gdb */

CREATE DATABASE "c:\uchbase\sklad\ib_sklad.gdb" PAGE_SIZE 1024

DEFAULT CHARACTER SET WIN1251;

/* Domain definitions */

CREATE DOMAIN KEY_TYPE AS INTEGER DEFAULT 0 NOT NULL;

/* Table: POKUPATELI, Owner: SYSDBA */

CREATE TABLE POKUPATELI (KOD_POKUP KEY_TYPE,

POKUP VARCHAR(30) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,

GOROD VARCHAR(20) CHARACTER SET WIN1251 DEFAULT ''

COLLATE PXW_CYRL,

ADRES VARCHAR(25) CHARACTER SET WIN1251 DEFAULT ''

COLLATE PXW_CYRL,

TEL VARCHAR(8) CHARACTER SET WIN1251 COLLATE PXW_CYRL,

PRIMARY KEY (KOD_POKUP));

/* Table: RASXOD, Owner: SYSDBA */

CREATE TABLE RASXOD (KOD_RASH KEY_TYPE,

DATA_RASH TIMESTUMP NOT NULL,

KOLVO INTEGER DEFAULT 0,

STOIM KEY_TYPE,

KOD_TOVAR KEY_TYPE,

KOD_POKUP KEY_TYPE,

PRIMARY KEY (KOD_RASH));

/* Table: TOVARY, Owner: SYSDBA */

CREATE TABLE TOVARY (KOD_TOVAR INTEGER NOT NULL,

TOVAR VARCHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL,

ED_IZM VARCHAR(10) CHARACTER SET WIN1251 DEFAULT ''

COLLATE PXW_CYRL,

ZENA INTEGER DEFAULT 0,

COUNT_TOV INTEGER,

PRIMARY KEY (KOD_TOVAR));

ALTER TABLE RASXOD ADD CONSTRAINT TOV_RASH FOREIGN KEY (KOD_TOVAR) REFERENCES TOVARY(KOD_TOVAR) ON UPDATE CASCADE ON DELETE CASCADE;

ALTER TABLE RASXOD ADD CONSTRAINT POK_RASH FOREIGN KEY (KOD_POKUP) REFERENCES POKUPATELI(KOD_POKUP);

CREATE GENERATOR TOVARY_KOD;

CREATE GENERATOR POKUPATELI_KOD;

CREATE GENERATOR RASXOD_KOD;

ALTER TABLE TOVARY ADD

CHECK (ZENA >= 0);

COMMIT WORK;

SET AUTODDL OFF;

SET TERM ^;

/* Stored procedures */

CREATE PROCEDURE GET_KOD_POKUP AS BEGIN EXIT; END ^

CREATE PROCEDURE GET_KOD_RASXOD AS BEGIN EXIT; END ^

CREATE PROCEDURE GET_KOD_TOVAR AS BEGIN EXIT; END ^

ALTER PROCEDURE GET_KOD_POKUP RETURNS (NR INTEGER) AS

BEGIN

NR=GEN_ID(POKUPATELI_KOD,1);

END

^

ALTER PROCEDURE GET_KOD_RASXOD RETURNS (NR INTEGER) AS

BEGIN

NR=GEN_ID(RASXOD_KOD,1);

END

^

ALTER PROCEDURE GET_KOD_TOVAR RETURNS (NR INTEGER) AS

BEGIN

NR=GEN_ID(TOVARY_KOD,1);

END

^

SET TERM; ^

COMMIT WORK;

SET AUTODDL ON;

SET TERM ^;

/* Triggers only will work for SQL triggers */

CREATE TRIGGER AU_POKUPATELI FOR POKUPATELI

ACTIVE AFTER UPDATE POSITION 0 AS

BEGIN

IF (OLD.KOD_POKUP <> NEW.KOD_POKUP) THEN

 

UPDATE RASXOD

SET KOD_POKUP=NEW.KOD_POKUP

WHERE KOD_POKUP = OLD.KOD_POKUP;

END

^

CREATE TRIGGER AD_POKUPATELI FOR POKUPATELI

ACTIVE AFTER DELETE POSITION 0 AS

BEGIN

DELETE FROM RASXOD

WHERE RASXOD.KOD_POKUP = POKUPATELI.KOD_POKUP;

END

^

CREATE TRIGGER AI_RASXOD1 FOR RASXOD

ACTIVE AFTER INSERT POSITION 1 AS

BEGIN

UPDATE TOVARY

SET COUNT_TOV= COUNT_TOV-NEW.KOLVO

WHERE KOD_TOVAR = NEW.KOD_TOVAR;

END

^

CREATE TRIGGER AU_RASXOD1 FOR RASXOD

ACTIVE AFTER UPDATE POSITION 1 AS

BEGIN

IF ((OLD.KOLVO <> NEW.KOLVO) AND

(OLD.KOD_TOVAR = NEW.KOD_TOVAR)) THEN

UPDATE TOVARY

SET COUNT_TOV= COUNT_TOV+OLD.KOLVO-NEW.KOLVO

WHERE KOD_TOVAR = OLD.KOD_TOVAR;

END

^
CREATE TRIGGER BD_RASXOD1 FOR RASXOD

ACTIVE BEFORE DELETE POSITION 0 AS

BEGIN

UPDATE TOVARY

SET COUNT_TOV= COUNT_TOV+RASXOD.KOLVO

WHERE KOD_TOVAR = RASXOD.KOD_TOVAR;

END;

^

CREATE TRIGGER AU_RASXOD0 FOR RASXOD

ACTIVE AFTER UPDATE POSITION 0 AS

DECLARE VARIABLE OldKod INTEGER;

BEGIN

IF (OLD.KOD_TOVAR <> NEW.KOD_TOVAR) THEN

BEGIN OldKod = NULL;

SELECT KOD_TOVAR FROM TOVARY

WHERE KOD_TOVAR = OLD.KOD_TOVAR

INTO:OldKod;

IF (OldKod IS NOT NULL) THEN

BEGIN

UPDATE TOVARY

SET COUNT_TOV= COUNT_TOV+OLD.KOLVO

WHERE KOD_TOVAR = OLD.KOD_TOVAR;

UPDATE TOVARY

SET COUNT_TOV= COUNT_TOV-NEW.KOLVO

WHERE KOD_TOVAR = NEW.KOD_TOVAR;

END

END

ЕND

^

COMMIT WORK ^

SET TERM; ^

/* Grant permissions for this database */

При завершении работы в WINDOWS IB_CONSOLE необходимо зафиксировать изменения в базе данных, выбрав пункт меню «TRANSACTION\COMMIT». Выбор пункта меню TRANSACTION\ROLLBACK» приведет к отказу от всех изменений, произведенных в текущем сеансе работы (после последнего COMMIT).

Заполнение данных в таблице может быть выполнено в двух режимах:

1. Заполнение записей таблицы в интерактивном режиме с использованием средств IB CONSOLE. Для этого необходимо вызвать на экран интерактивное окно свойств соответствующей таблицы и, щелкнув на вкладке Data, начать набор данных. При вводе данных отрабатывают соответствующие триггеры, определенные в базе данных.

2. Другим вариантом заполнения таблицы является использование операторов языка SQL. Для этого (используя любой редактор текстов, например WordPad) подготовим SQL-программу (SQL-Script) (см. файл..\TBLOAD.SQL) и выполним ее в окне Interactive SQL (пункт меню Qwery\LOAD Script).

По

Ниже приведен протокол работы этой программы:

SET NAMES WIN1251;

CONNECT 'SKLAD\Ib_sklad.gdb'

USER 'SYSDBA' PASSWORD 'masterkey';

DELETE FROM RASXOD;

DELETE FROM POKUPATELI;

DELETE FROM TOVARY;

SELECT * FROM POKUPATELI;

INSERT INTO POKUPATELI (KOD_POKUP,POKUP,GOROD,ADRES,TEL)

VALUES (1,'Алиса','Казань','ул.Латышских стрелков','92-45-67');

INSERT INTO POKUPATELI (KOD_POKUP,POKUP,GOROD,ADRES,TEL)

VALUES (2,'Буратино','Рим','Италия','23-45-35');

INSERT INTO POKUPATELI (KOD_POKUP,POKUP,GOROD,ADRES,TEL)

VALUES (5,'Тротилла','Пруд','Италия',NULL);

INSERT INTO POKUPATELI (KOD_POKUP,POKUP,GOROD,ADRES,TEL)

VALUES (6,'Шекспир','Лондон','Англия',NULL);

 

SELECT * FROM POKUPATELI;

 

KOD_POKUP POKUP GOROD ADRES TEL

=========== ============================== ==================== ========================= ========

 

1 Алиса Казань ул.Латышских стрелков 92-45-67

2 Буратино Рим Италия 23-45-35

5 Тротилла Пруд Италия <null>

6 Шекспир Лондон Англия <null>

 

SELECT * FROM TOVARY;

INSERT INTO TOVARY (KOD_TOVAR,TOVAR,ED_IZM,ZENA,COUNT_TOV)

VALUES (1,'Сахар','кг',12,1442);

INSERT INTO TOVARY (KOD_TOVAR,TOVAR,ED_IZM,ZENA,COUNT_TOV)

VALUES (2,'Макароны','кг',5,86);

INSERT INTO TOVARY (KOD_TOVAR,TOVAR,ED_IZM,ZENA,COUNT_TOV)

VALUES (3,'Огурцы весовые','кг',6,250);

INSERT INTO TOVARY (KOD_TOVAR,TOVAR,ED_IZM,ZENA,COUNT_TOV)

VALUES (4,'Огурцы баночные','банки',10,475);

INSERT INTO TOVARY (KOD_TOVAR,TOVAR,ED_IZM,ZENA,COUNT_TOV)

VALUES (5,'Крупа манная','кг',8,1010);

 

INSERT INTO TOVARY (KOD_TOVAR,TOVAR,ED_IZM,ZENA,COUNT_TOV)

VALUES (2,'Масло подсолнечное','л',10,1977);

Statement failed, SQLCODE = -803

violation of PRIMARY or UNIQUE KEY constraint "INTEG_4" on table "TOVARY"

 

INSERT INTO TOVARY (KOD_TOVAR,TOVAR,ED_IZM,ZENA,COUNT_TOV)

VALUES (6,'Масло подсолнечное','л',-10,1977);

Statement failed, SQLCODE = -297

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...