База данных для хранения и обработки информации, которая требуется типичной психиатрической больнице, страница 27

        employs.Add(new DbEmployee("Шафоростов", "Никита", "Васильевич", "...", "(81369)29542", new DateTime(1986, 2, 14), new DateTime(2000, 1, 30), null, 5, "nik", "sober", Sample.Никита));

        employs.Add(new DbEmployee("Никульшин", "Михаил", "Сергеевич", "....", "4936785", new DateTime(1986, 2, 14), new DateTime(2000, 1, 30), null, 5, "mixer", "i love oraforms", Sample.MadMike));

        employs.Add(new DbEmployee("Чечеткин", "Дмитрий", "Владимирович", ".....", "обрубили за неуплату", new DateTime(1986, 2, 14), new DateTime(2000, 1, 30), null, 1, "morf", "java is is my naT!v$ l@ng#@ge", Sample.Морфикус));

        employs.Add(new DbEmployee("Смирнов", "Георгий", "Вадимович", "......", "430-72-69", new DateTime(1986, 1, 5), new DateTime(2000, 1, 30), null, 5, "cooler", "afftarjjot", Sample.Пратиффный));

        employs.Add(new DbEmployee("Шиван", "Малак", null, ".......", "", new DateTime(1986, 1, 5), new DateTime(2000, 1, 30), null, 5, "wivan", "??????", Sample.Шиванчик));

        employs.Add(new DbEmployee("Орландо", "Блум", "Блумыч", "abcd", "3708198(Анютка,звони:P )", new DateTime(1986, 1, 5), new DateTime(2000, 1, 30), null, 5, "bloom", "gloom", Sample.ОрландоБлум));

        foreach (DbEmployee emp in employs)

                 DbHelper.AddNewEmployee(emp, true);

        DbEmployee root = DbHelper.AdminGetEmploys()[1];

        root.Photography = Properties.Sample.JackWithBat;

        DbHelper.AdminUpdateEmployeeInfo(root);

        DbHelper.RestoreEmployee(petrovi4);

}

#endregion


Часть SQL скрипта.

--для получения информации о себе

CREATE PROCEDURE GetPersonalInfo (pLOGIN VARCHAR2, pPASSWORD VARCHAR2, pИМЯ OUT VARCHAR2, pФАМИЛИЯ OUT VARCHAR2, pОТЧЕСТВО OUT VARCHAR2, pПАСПОРТ OUT VARCHAR2, pДОЛЖНОСТЬ OUT VARCHAR2, pКОГДА_УСТРОИЛСЯ OUT DATE, pКОГДА_УВОЛИЛСЯ OUT DATE, pДАТА_РОЖДЕНИЯ OUT DATE, pID OUT NUMBER, pФОТОГРАФИЯ OUT BLOB, pКОНТАКТНЫЙ_ТЕЛЕФОН OUT VARCHAR2, pAdministerOptions OUT NUMBER) AS

BEGIN

       select ИМЯ, ФАМИЛИЯ, ОТЧЕСТВО, ПАСПОРТ, ДОЛЖНОСТЬ, КОГДА_УСТРОИЛСЯ, КОГДА_УВОЛИЛСЯ, ДАТА_РОЖДЕНИЯ, ID, ФОТОГРАФИЯ, КОНТАКТНЫЙ_ТЕЛЕФОН, AdministerOptions INTO pИМЯ, pФАМИЛИЯ, pОТЧЕСТВО, pПАСПОРТ, pДОЛЖНОСТЬ, pКОГДА_УСТРОИЛСЯ, pКОГДА_УВОЛИЛСЯ, pДАТА_РОЖДЕНИЯ, pID, pФОТОГРАФИЯ, pКОНТАКТНЫЙ_ТЕЛЕФОН, pAdministerOptions from ADMINGETALLEMPLOYS WHERE pLOGIN = LOGIN AND PASSWORD = pPASSWORD AND КОГДА_УВОЛИЛСЯ IS NULL;

END;

/

--смена аккаунта

CREATE PROCEDURE ChangeAccount (pID NUMBER, pLOGIN VARCHAR2, pPASSWORD VARCHAR2) AS

       num number;

BEGIN

       select count(*) into num from СОТРУДНИК where LOGIN = pLOGIN AND КОГДА_УВОЛИЛСЯ IS NULL AND ID <> pID;

       if num > 0 then RAISE_APPLICATION_ERROR(-20060, 'Этот логин уже задействован!'); end if;

       UPDATE СОТРУДНИК SET LOGIN = pLOGIN, PASSWORD = pPASSWORD WHERE ID = pID;

END;

/

--смена пароля

CREATE PROCEDURE ChangePassword (pLOGIN VARCHAR2, pOLDPASSWORD VARCHAR2, pNEWPASSWORD VARCHAR2) AS

BEGIN

       UPDATE СОТРУДНИК SET PASSWORD=pNEWPASSWORD WHERE LOGIN = pLOGIN AND PASSWORD = pOLDPASSWORD;

END;

/

--назначение наказания

CREATE PROCEDURE TryToLogin (pLOGIN IN OUT VARCHAR2, pPASSWORD IN OUT VARCHAR2) AS

       num INTEGER;

       CURSOR empCursor IS SELECT * FROM СОТРУДНИК WHERE pLOGIN = LOGIN AND PASSWORD = pPASSWORD AND КОГДА_УВОЛИЛСЯ IS NULL;

       ourEmpRecord empCursor%ROWTYPE;

BEGIN

       SELECT COUNT(*) INTO num FROM СОТРУДНИК WHERE pLOGIN = LOGIN AND PASSWORD = pPASSWORD AND КОГДА_УВОЛИЛСЯ IS NULL;

       IF num = 0 THEN

               pLOGIN := 'MENTAL_HOSPITAL_USER';

               pPASSWORD := 'здесь будем генерить рандомный пароль';

       ELSE

               OPEN empCursor;

                      FETCH empCursor INTO ourEmpRecord;

               CLOSE empCursor;

               IF ourEmpRecord.AdministerOptions = 0 THEN

                      pLOGIN := 'MENTAL_HOSPITAL_USER';

                      pPASSWORD := '#USER_PASSWORD#';

               ELSE

                      pLOGIN := 'MENTAL_HOSPITAL_ADMIN';

                      pPASSWORD := '#ADMIN_PASSWORD#';

               END IF;

       END IF;

END;

/

--создание записи в ДОЛЖНОСТЬ

CREATE PROCEDURE CreatePunishment (pНАЗВАНИЕ VARCHAR2, pID OUT NUMBER) AS

       num INTEGER;

BEGIN

       SELECT COUNT(*) INTO num FROM НАКАЗАНИЯ WHERE НАЗВАНИЕ = pНАЗВАНИЕ AND WAS_REMOVED = 1;

       IF num = 0 THEN

               INSERT INTO НАКАЗАНИЯ (НАЗВАНИЕ) VALUES (pНАЗВАНИЕ) RETURNING ID INTO pID;

       ELSE

               UPDATE НАКАЗАНИЯ SET WAS_REMOVED = 0 WHERE НАЗВАНИЕ = pНАЗВАНИЕ AND WAS_REMOVED = 1 RETURNING ID INTO pID;

       END IF;

END;

/

--удаление записи из списка видимых должностей

CREATE PROCEDURE RemovePunishment (pID NUMBER) AS

BEGIN

       UPDATE НАКАЗАНИЯ SET WAS_REMOVED = 1 WHERE ID = pID;

END;

/

--создание записи в ДОЛЖНОСТЬ

CREATE PROCEDURE CreateNewPost (pНАЗВАНИЕ VARCHAR2, pЗАРПЛАТА NUMBER, pID OUT NUMBER) AS

       num INTEGER;

BEGIN

       SELECT COUNT(*) INTO num FROM ДОЛЖНОСТЬ WHERE НАЗВАНИЕ = pНАЗВАНИЕ AND WAS_REMOVED=1;

       IF num = 0 THEN

               INSERT INTO ДОЛЖНОСТЬ (НАЗВАНИЕ, ЗАРПЛАТА) VALUES (pНАЗВАНИЕ, pЗАРПЛАТА) RETURNING ID INTO pID;

       ELSE

               UPDATE ДОЛЖНОСТЬ SET ЗАРПЛАТА = pЗАРПЛАТА, WAS_REMOVED=0 WHERE НАЗВАНИЕ = pНАЗВАНИЕ AND WAS_REMOVED=1 RETURNING ID INTO pID;

       END IF;

END;

/

--удаление записи из списка видимых должностей

CREATE PROCEDURE RemovePost (pID NUMBER) AS

BEGIN

       UPDATE ДОЛЖНОСТЬ SET WAS_REMOVED = 1 WHERE ID = pID;

END;

/

--создание записи в ДИАГНОЗЫ

CREATE PROCEDURE CreateNewDisease (pНАЗВАНИЕ VARCHAR2, pОПИСАНИЕ VARCHAR2, pID OUT NUMBER) AS