База знаний предприятий

  35790931     

Типичные процедуры.


Хранимые процедуры представляют собой подпрограммы, реализованные на языке SQL.

Пример процедуры добавления данных для таблицы «Предприятия»:

ALTER PROCEDURE P_ENTR_INSERT

(

  PNAME VARCHAR(60) CHARACTER SET WIN1251, /*Название предприятия*/

  PADDRESS VARCHAR(60) CHARACTER SET WIN1251, /*Адрес предприятия*/

  PPHONE VARCHAR(30) CHARACTER SET WIN1251, /*Телефон предприятия*/

  PCOMMENT VARCHAR(300) CHARACTER SET WIN1251 /*Комментарий*/

)

AS

BEGIN

  INSERT INTO ENTERPRISES (NAME,ADDRESS,PHONE,COMMENT,ENTKEY) //добавление

данных в таблицу

  VALUES (:PNAME, :PADDRESS, :PPHONE, :PCOMMENT, 0);

END

В данной процедуре поступающие на вход данные добавляются в таблицу «Предприятия». При добавлении данных происходит автоматическое обращение к соответствующему генератору, и в поле ключа заносится уникальное значение.



Пример хранимой процедуры выдачи информации о количестве связанных записей с каждой записью таблицы «Предприятия», хранящихся в её подчинённых таблицах (т. е. выполняющей проверку на полноту):

ALTER PROCEDURE CHECK_FOR_FULL_ENTR

RETURNS

(

  ENTK INTEGER, /*Ключ записи в таблице «Предприятия»*/

  ECPARS INTEGER, /*Количество записей в таблице «Экономические показатели»*/

  MBASE INTEGER, /*Количество записей в таблице «Материальная база»*/

  SEC INTEGER, /*Количество записей в таблице «Режимы предприятия»*/

  ARCH INTEGER, /*Количество записей в таблице «Архив»*/

  IZD INTEGER /*Количество записей в таблице «Изделия»*/

)

AS

     BEGIN

       FOR SELECT ENTKEY FROM ENTERPRISES /*Для каждой записи из таблицы «Предприятия»…*/

       INTO :ENTK /*Выдаём ключ*/

       DO

       BEGIN

         SELECT COUNT(NUMBER) FROM ECONOMICPARAMS

         WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Экономические показатели»*/

         INTO :ECPARS;

         SELECT COUNT(NUMBER) FROM MATHERIALBASE

         WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Материальная база»*/

         INTO :MBASE;

         SELECT COUNT(SECKEY) FROM SECURITY

         WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Режимы предприятия»*/

         INTO :SEC;

         SELECT COUNT(NUMBER) FROM ARCHIVE

         WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Архив»*/

         INTO :ARCH;

         SELECT COUNT(IZDKEY) FROM IZDELIE

         WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Изделия»*/

         INTO :IZD;

         SUSPEND; /*Передаём параметры (т. е. строку таблицы) клиенту */

       END

END

При обращении к процедуре для каждой записи таблицы предприятия производится подсчёт связанных с ней записей в подчинённых таблицах. На выходе процедуры – таблица с числовыми значениями.

Аналогично выполняется подсчёт в таблицах, связанных с таблицей «Изделия».


Пример процедуры проверки на полноту знаний в таблицах, связанных с таблицей «Предприятия»:

erez:=false;//Признак неполноты. Устанавливается в true, если нашли неполноту.

EntrDataModule.CheckEntrQuery.FindFirst;//Переходим на первую запись информации с сервера

repeat

  j:=0;//Счётчик внутреннего цикла

  repeat

    if EntrDataModule.CheckEntrQuery.Fields[j].AsInteger=0 then

      erez:=true;//Если нашли неполноту, устанавливаем признак.

    inc(j);

  until (j=EntrDataModule.CheckEntrQuery.FieldCount) or (erez=true);//Оканчиваем

просмотр, если //просмотрели всю строку или нашли неполноту

  if erez=false then //Если неполнота не найдена, переходим к следующей строке

    EntrDataModule.CheckEntrQuery.FindNext;

until (EntrDataModule.CheckEntrQuery.RecNo=EntrDataModule.CheckEntrQuery.RecordCount-1) or (erez=true);//Заканчиваем работу, если просмотрели всю таблицу или нашли неполноту.

На вход процедуры проверки полноты знаний поступает информация с сервера, представленная в виде таблицы, в каждой строке которой занесено количество записей, связанных с записью таблицы «Предприятия», номер которой соответствует номеру строки, в каждой из подчинённых таблиц. Если присутствует нулевое значение, то в данном случае это означает, что о предприятии не занесены какие-либо данные, например, производимые изделия, режимы, экономические показатели или показатели материальной базы. Поэтому каждое нулевое значение обозначает неполноту, которую необходимо устранить для того, чтобы модуль логического вывода мог делать адекватные заключения, обращаясь к этой базе знаний.

                                                                                                                               III.      ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ


Содержание раздела