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 ^ 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
Читайте также: CREATE TABLE имя_таблицы Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|