Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Частное образовательное учреждение
высшего профессионального образования
«Южно-Уральский институт управления и экономики»
Кафедра информационных технологий и систем
ОТЧЕТ ПО УЧЕБНОЙ ПРАКТИКЕ
По направлению 230400.62 «Информационные системы и технологии»
Выполнил: студент группы ИЗс-301
Пулин А.Н.
Проверил: Удовиченко Д.А.
Челябинск
2012
Введение 3
Краткая характеристика предприятия 5
Теоритическая часть 7
Краткое описание Oracle. 7
Основные команды в Oracle на PL\SQL 8
Практическая часть 27
Описание работы. 27
Техническое задание 28
Заключение 44
Список литературы: 45
Цель преддипломной практики закрепление и укрепление полученных знаний, пополнение их новыми сведениями о прогрессивных технологиях, применение нового оборудования, изучение систем автоматизации технологических и экономических процессов, накопление практического опыта самостоятельной инженерной деятельности по использованию интеллектуальных систем поддержки принятия решений в организационной и управленческой деятельности предприятия.
Задачами практики являются:
1. Закрепление, расширение, углубление и систематизация знаний, полученных при изучении дисциплин «Информатика», «Технология программирования», «Управление данными», «Архитектура ЭВМ и систем».
2. Изучение особенностей деятельности конкретного предприятия (организации, учреждения, фирмы), его структуры, состава, информационного взаимодействия подразделений, характера взаимодействия со службой администрирования информационных ресурсов и систем, со службой разработки программного обеспечения, знакомство с применяемыми информационными технологиями и программным обеспечением.
Студент должен знать:
В 1934 году в качестве отдельной территориальной единицы РСФСР была образована Челябинская область. Одновременно с образованием области была создана Челябинская областная контора Госбанка СССР. Ее основной задачей стало финансово-кредитное, расчетное и кассовое обслуживание предприятий и организаций Челябинской области.
Процессы преобразования экономической структуры, новые методы ведения хозяйства привели в 1988 году к созданию государственных специализированных банков на базе учреждений Госбанка и Стройбанка СССР. В результате реорганизации было создано Челябинской областное управление Промышленно-строительного банка СССР, которое приняло на обслуживание практически все предприятия промышленности, строительства, транспорта и связи, торговли, материально технического снабжения и других отраслей. Областное управление имело широкую сеть филиалов на территории области и по объему операций занимало одно из первых мест в системе Промстройбанка СССР.
Переход к рыночным отношениям привел к необходимости создания двухуровневой банковской системы. 10 сентября было принято решение о создании Индустриального коммерческого банка Челябинской области (Челиндбанка), учредителями которого выступили крупнейшие предприятия области, сформировавшие уставный капитал банка в размере 150 миллионов рублей. Новое финансовое учреждение приняло на обслуживание всех клиентов бывшего Челябинского областного управления Промстройбанка СССР. На момент создания банк имел 297 пайщиков. Объемы кредитных вложений составляли около 2 млрд. рублей. «Челиндбанк» был зарегистрирован в Государственном банке Российской Федерации 16 октября 1990 года. На момент создания банк имел около 7 тысяч клиентов, 30 филиалов, свыше 1500 сотрудников.
Экономические реформы, начало процессов приватизации потребовало изменения организационно-правовой формы банка. Банк смог привлечь широкий круг индивидуальных инвесторов и предприятий негосударственных форм собственности. В 1992 году банк был преобразован в открытое акционерное общество и выпустил акции на сумму 200 млн. рублей, которые распространил между юридическими и физическими лицами. В течение 1992 года банк провел открытую подписку на акции второго выпуска, что позволило увеличить уставный капитал до 700 млн. руб. и изменить структуру акционеров. По состоянию на 1 января 1993 года уже 80% акций принадлежало физическим лицам.
В 1996 году банком принят новый устав, а в 2002 году изменения к нему, в которых изменено название банка. Сегодня банк называется: АКЦИОНЕРНЫЙ КОММЕРЧЕСКИЙ БАНК "ЧЕЛИНДБАНК" (открытое акционерное общество), сокращенно - ОАО "ЧЕЛИНДБАНК".
Oracle (Oracle Corporation) американская корпорация, крупнейший в мире разработчик программного обеспечения для организаций, крупный поставщик серверного оборудования.
Компания специализируется на выпуске систем управления базами данных, связующего программного обеспечения и бизнес-приложений (ERP- и CRM-систем, специализированных отраслевых приложений). Наиболее известный продукт компании Oracle Database, который компания выпускает с момента своего основания. С 2008 года корпорация освоила выпуск интегрированных аппаратно-программных комплексов, а с 2009 года в результате поглощения Sun Microsystems стала производителем серверного оборудования, до этого компания выпускала исключительно программное обеспечение.
Компания основана в 1977 году. Имеет подразделения более чем в 145 странах. По состоянию на 2012 год насчитывает 115 тыс. сотрудников. Штаб-квартира корпорации расположена в США, в штате Калифорния, рядом с Сан-Франциско.
Компания является вторым по объёмам продаж разработчиком программного обеспечения после Microsoft. Согласно IDC, по состоянию на 2007 год, на рынке систем управления базами данных, общим объёмом без малого 21 млрд долл., Oracle является лидером, владея долей 44,3 % и опережая IBM и Microsoft более, чем в 2 раза. На рынке инфраструктурного и связующего программного обеспечения по данным анализа Gartnerот 2009 года, Oracle является вторым по объёмам сбыта поставщиком с долей в 16 %, отставая почти в два раза от IBM (при суммарном объёме рынка 16 млрд долл.). На рынке ERP-систем компания по данным на 2010 год занимает второе место с долей 18 %, уступая SAP (24 %) и опережая Microsoft (11 %). На рынке CRM-систем, согласно оценке Gartner от 2009 года, компания также вторая, с долей 16 %, также уступая SAP первое место (у которой 22 % CRM-рынка, общий объём рынка оценён в 9 млрд долл.). IDC оценивает на начало 2011 года долю на рынке серверного аппаратного обеспечения в 6,8 % от общего объёма в 48 млрд долл. четвёртую, после IBM, Hewlett-Packard и Dell.
Изучив некоторый список литературы по Oracle приходим к выводу что всю эту информацию нужно документировать и конспектировать, т.к. объем полученный информации слишком велик, изучив некоторые книги по Oracle можно законспектировать пожалуй основные команды для дальнейшей нашей работы с базой, как разработчикам, именно как разработчиком, ведь структура Oracle на столько велика что что СУБД в больших организациях обслуживает большое количество персонала, такие как администраторы Oracle, разработчики, аналитики т.д. и так выпишем основные команды, которые нам могут понадобиться для практического задания с возможными по необходимостью примерами и описаниями команды:
SQL> SELECT REP, AVG(AMOUNT)
2 FROM ORDERS
3 GROUP BY REP
***************************
SQL> SELECT REP_OFFICE, MIN(QUOTA), MAX(QUOTA)
2 FROM SALESREPS
3 GROUP BY REP_OFFICE
*******************************
SQL> SELECT REP, CUST, SUM(AMOUNT)
2 FROM ORDERS
3 GROUP BY REP, CUST
*******************************
SELECT EMPL_NUM, NAME, SUM(AMOUNT)
FROM ORDERS, SALESREPS
WHERE REP = EMPL_NUM
GROUP BY EMPL_NUM, NAME
SQL> SELECT REP, AVG(AMOUNT)
2 FROM ORDERS
3 GROUP BY REP
4 HAVING SUM(AMOUNT) > 300
*******************************
SQL> SELECT CITY, SUM(QUOTA), SUM(SALESREPS.SALES)
2 FROM OFFICES, SALESREPS
3 WHERE OFFICE = REP_OFFICE
4 GROUP BY CITY
5 HAVING COUNT(*) >= 2
SQL> SELECT CITY, REGION, (SALES - TARGET)
2 FROM OFFICES
3 ORDER BY REGION ASC, 3 DESC
SQL> SELECT SUM(QUOTA), SUM(SALES)
**************
SQL> SELECT SUM(AMOUNT)
2 FROM ORDERS, SALESREPS
3 WHERE NAME = 'Дима Маликов'
4 AND REP = EMPL_NUM
SQL> SELECT AVG(100 * (SALES/QUOTA)) PROCENT
************
SQL> SELECT AVG(PRICE)
2 FROM PRODUCTS
3 WHERE MFR_ID = 'ACI'
SQL> SELECT MIN(ORDER_DATE)
2 FROM ORDERS
SQL> SELECT MAX(100 * (SALES/QUOTA))
2 FROM SALESREPS
SQL> SELECT COUNT(CUST_NUM)
**************************
SQL> SELECT COUNT(NAME)
2 FROM SALESREPS
3 WHERE SALES > QUOTA
SQL> SELECT COUNT(DISTINCT TITLE)
**************************
SQL> SELECT COUNT(DISTINCT REP_OFFICE)
2 FROM SALESREPS
3 WHERE SALES > QUOTA
SQL> SELECT ORDER_NUM, ORDER_DATE, MFR, PRODUCT, AMOUNT
2 FROM ORDERS
3 WHERE ORDER_DATE BETWEEN TO_DATE('01.11.1989','DD/MM/YYYY') AND TO_DATE('31.12.1989','DD/MM/YYYY')
SQL> SELECT NAME, SALES, QUOTA
2 FROM SALESREPS
3 WHERE SALES NOT BETWEEN (0.8 * QUOTA) AND (1.2 * QUOTA)
Найти все заказы, сделанные в разные дни июня месяца 1990 года.
SQL> SELECT ORDER_NUM, ORDER_DATE, AMOUNT
2 FROM ORDERS
3 WHERE ORDER_DATE IN (TO_DATE('14.06.1990','DD/MM/YYYY'), TO_DATE('08.06.1990','DD/MM/YYYY'),
4 TO_DATE('29.06.1990','DD/MM/YYYY'), TO_DATE('04.06.1990','DD/MM/YYYY'))
5 /
SQL> SELECT COMPANY, CREDIT_LIMIT
2 FROM CUSTOMERS
3 WHERE COMPANY LIKE '%бесы'
Значения Результат
-------------- ----------
TRUE AND TRUE -> TRUE
FALSE AND TRUE -> FALSE
TRUE AND FALSE -> FALSE
FALSE AND FALSE -> FALSE
NULL AND TRUE -> NULL
TRUE AND NULL -> NULL
FALSE AND NULL -> FALSE
NULL AND FALSE -> FALSE
NULL AND NULL -> NULL
Значения Результат
-------------- ----------
TRUE OR TRUE -> TRUE
FALSE OR TRUE -> TRUE
TRUE OR FALSE -> TRUE
FALSE OR FALSE -> FALSE
NULL OR TRUE -> TRUE
TRUE OR NULL -> TRUE
FALSE OR NULL -> NULL
NULL OR FALSE -> NULL
NULL OR NULL -> NULL
NOT TRUE -> FALSE
NOT FALSE -> TRUE
NOT NULL -> NULL
SQL> SELECT MFR_ID, PRODUCT_ID
2 FROM PRODUCTS
3 WHERE PRICE > 500.00
4 UNION
5 SELECT DISTINCT MFR, PRODUCT
6 FROM ORDERS
7 WHERE AMOUNT > 4.00
SQL> CREATE TABLE PEOPLE
2 ( ID NUMBER,
3 NM VARCHAR2(50),
4 FAMIL VARCHAR2(50),
5 OTCH VARCHAR2(50),
6 DROG DATE
7 )
INSERT INTO PEOPLE(ID, NM, FAMIL, OTCH, DROG)
VALUES(1, 'John', 'Godwin', 'Petrovich', TO_DATE('03-12-1967','DD-MM-YYYY'))
SELECT S.NAME, S.QUOTA, B.BIRTHDAYS.BIRTH_DAY
FROM SALESREPS S, SAM.BIRTHDAYS B
WHERE S.NAME = B.NAME
*****************
SELECT EMPS.NAME, MGRS.NAME
FROM SALESREPS EMPS, SALESREPS MGRS
WHERE EMPS.MANAGER = MGRS.EMPL_NUM
Само объединение таблицы
SQL> SELECT EMPS.NAME, EMP_OFFICE.CITY, MGRS.NAME, MGR_OFFICE.CITY
2 FROM SALESREPS EMPS, SALESREPS MGRS, OFFICES EMP_OFFICE,
3 OFFICES MGR_OFFICE
4 WHERE EMPS.REP_OFFICE = EMP_OFFICE.OFFICE
5 AND MGRS.REP_OFFICE = MGR_OFFICE.OFFICE
6 AND EMPS.MANAGER = MGRS.EMPL_NUM
7 AND EMPS.REP_OFFICE <> MGRS.REP_OFFICE
+ |
Сложение и унарный плюс |
- |
Вычитание и унарный минус |
* |
Умножение |
/ |
Деление |
** |
Возведение в степень |
= |
Равенство |
< |
Меньше |
> |
Больше |
<> |
Не равно |
!= |
Не равно (альтернатива) |
~= |
Не равно (альтернатива) |
^= |
Не равно (альтернатива) |
<= |
Меньше или равно |
>= |
Больше или равно |
:= |
Присвоение |
( |
Начало списка или подвыражения |
) |
Конец списка или подвыражения |
, |
Отдельные элементы списка (как в списке параметров) |
.. |
Оператор диапазона используется в операторах FOR-IN |
|| |
Конкатенация строк |
=> |
Ассоциация (используется в списке параметров) |
; |
Конец выражения |
% |
Атрибут курсора или типа объекта |
. |
Спецификация объекта |
@ |
Индикатор удаленной базы данных |
' |
Начало/конец строки символов |
: |
Индикатор внешней переменной |
& |
Индикатор связанной переменной |
-- |
Комментарий в одной строке |
/* |
Начало многострочного комментария |
*/ |
Конец многострочного комментария |
>> |
Начало метки |
<< |
Конец метки |
SQL> DECLARE
2
3 A VARCHAR2(1) := ' ';
4 B VARCHAR2(128) := 'Hello World!!!';
5 C VARCHAR2(128) := 'How ''are'' you?';
6 D VARCHAR2(128) := 'Hello Bob - "ok"!';
7 E VARCHAR2(128) := '12345';
8 F VARCHAR2(128) := '01/01/1989';
9 G VARCHAR2(128) := '!@#$%^&*()_":;<,.?';
10 H VARCHAR2(128) := ''' ''';
11
12 I NUMBER := 12345;
13 J NUMBER := -12345;
14 K NUMBER := 12345.023745;
15 L NUMBER := 100.;
16 M NUMBER := 1.0237E2;
17 N NUMBER := 1.0237E-2;
18 O NUMBER := 0.34223;
19 P NUMBER := .321434;
20
21 BEGIN
22
23 DBMS_OUTPUT.enable;
24
25 DBMS_OUTPUT.put_line(A);
26 DBMS_OUTPUT.put_line(B);
27 DBMS_OUTPUT.put_line(C);
28 DBMS_OUTPUT.put_line(D);
29 DBMS_OUTPUT.put_line(E);
30 DBMS_OUTPUT.put_line(F);
31 DBMS_OUTPUT.put_line(G);
32 DBMS_OUTPUT.put_line(H);
33
34 DBMS_OUTPUT.put_line(TO_CHAR(I));
35 DBMS_OUTPUT.put_line(TO_CHAR(J));
36 DBMS_OUTPUT.put_line(TO_CHAR(K));
37 DBMS_OUTPUT.put_line(TO_CHAR(L));
38 DBMS_OUTPUT.put_line(TO_CHAR(M));
39 DBMS_OUTPUT.put_line(TO_CHAR(N));
40 DBMS_OUTPUT.put_line(TO_CHAR(O));
41 DBMS_OUTPUT.put_line(TO_CHAR(P));
42
43 END;
44 /
Price NUMBER(5,2) := 12.43; - Переменная типа NUMBER (с плавающей точкой
Sytki NUMBER := 123; - Переменная типа NUMBER простая.
LGos INTEGER := 2; - Переменная типа INTEGER подкласс NUMBER типа.
Max_Dist CONSTANT REAL := 0.45; -- Константа типа REAL.
Тип CONSTANT требует обязательной инициализации!
Dis_Tp VARCHAR2(1) := NULL; - Строковая переменная типа VARCHAR2 (присвоено значение NULL)
Ds_Nm CHAR(20) := NULL - Строковая переменная типа CHAR (присвоено значение NULL)
Tk_Ir VARCHAR2(50) NOT NULL := 'Hello World!!!'; - Строковая переменная типа VARCHAR2 не может иметь значение NULL!
Tk_Sr BOOLEAN NOT NULL := TRUE; - БУЛЕВА! переменная типа BOOLEAN не может иметь значение NULL!
It_Nm VARCHAR2(50) DEFAULT 'Hummer'; - Строковая переменная типа VARCHAR2 имеет значение по умолчанию
IF ( val = 1 ) THEN -- проверка условия
.
.
ELSIF ( val = 2 ) THEN
.
.
ELSIF ( val = 3 ) THEN
.
.
ELSIF ( val = 9 ) THEN
.
.
ELSE -- не сработало не одно из условий!
END IF; -- конец условного оператора.
****************************************
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2
3 A INTEGER := 7;
4 B INTEGER := 4;
5 OPER VARCHAR2(2) := '+';
7 BEGIN
9 DBMS_OUTPUT.enable;
10 IF (OPER = '+') THEN
11 DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'sum = '||TO_CHAR(A+B));
12 ELSIF (OPER = '-') THEN
13 DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'res = '||TO_CHAR(A-B));
14 ELSIF (OPER = '*') THEN
15 DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'mul = '||TO_CHAR(A*B));
16 ELSIF (OPER = '/') THEN
17 DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'div = '||TO_CHAR(A/B));
18 END IF;
19
20 END;
Перезаливка таблицы осуществляется созданием новой таблицы, затем в нее копируем
SQL> INSERT INTO OLD_PEOPLE -пустая таблица
2 SELECT * FROM PEOPLE таблица с которой копируем
3 /
SQL> DELETE FROM PEOPLE
2 WHERE ID = 3
3 /
******************************
DELETE FROM PEOPLE удаление всех полей в талице
/
COMMIT
/
UPDATE обновление данных в таблице
SQL> UPDATE PEOPLE
2 SET FM = 'Jason'
3 WHERE FM IS NULL
4 /
*************************
SQL> UPDATE PEOPLE
2 SET NM = 'Irvin',
3 FM = 'Show',
4 OT = 'Brefovich'
5 WHERE ID = 5
***************************
SQL> UPDATE PEOPLE
2 SET ID = 5+2
3 WHERE ID = 5
SQL> DECLARE
2 k NUMBER := 0;
3
4 BEGIN
5
6 WHILE (k < 10) LOOP
7 k := k + 1;
8 END LOOP;
9
10 END;
11 /
**********************************
SQL> DECLARE
2 i NUMBER := 0;
3
4 BEGIN
5
6 LOOP
7 i := i + 1;
8 IF (i >= 100) THEN
9 i := 0;
10 EXIT;
11 END IF;
12 END LOOP;
13
14 LOOP
15 i := i + 1;
16 EXIT WHEN (i >= 100);
17 END LOOP;
18
19 END;
Вывод четных значений
SQL> DECLARE
2 i NUMBER := 0;
3
4 BEGIN
5
6 LOOP
7 i := i + 1;
8 IF (i >= 100) THEN
9 i := 0;
10 EXIT;
11 END IF;
12 END LOOP;
13
14 LOOP
15 i := i + 1;
16 EXIT WHEN (i >= 100);
17 END LOOP;
18
19 END;
SQL> DECLARE
2 s NUMBER := 0;
3
4 BEGIN
5 DBMS_OUTPUT.enable;
6 FOR i IN 1..20 LOOP
7 IF(MOD(i, 2) = 1) THEN
8 DBMS_OUTPUT.put_line(TO_CHAR(i)||' is even!');
9 s := i;
10 END IF;
11 END LOOP;
12 DBMS_OUTPUT.put_line('last odd number was '||TO_CHAR(s));
13 END;
14 /
***************************************
SQL> BEGIN
2 DBMS_OUTPUT.enable;
3 FOR i IN REVERSE 1..10 LOOP реверс цикла
4 DBMS_OUTPUT.put_line(TO_CHAR(i)||'-');
5 END LOOP;
6 DBMS_OUTPUT.put_line('Blastoff!');
7 END;
DECLARE
v_MYCITY OFFICES.CITY%TYPE;
v_MYSALES OFFICES.SALES%TYPE;
v_TEMPOLD NUMBER(7,4) NOT NULL;
v_DOPTEMP v_TEMPOLD%TYPE;
DECLARE
SUBTYPE t_LoopCn IS NUMBER; - Определяем новый тип
v_LpCounter t_LoopCn; - Объявляем переменную с эти подтипом
%ROWTYPE создание типа как таблицы
DECLARE
v_RecOffices OFFICES%ROWTYPE; - таким образом переменная v_RecOffices получает переменные таблицы OFFICES
Примеры курсоров
DECLARE
- 1.
- Выбрать все заказы:
CURSOR get_orders IS
SELECT * FROM ORDERS;
- 2.
- Выбрать несколько столбцов
- для определенного номера заказа
CURSOR get_orders(Pord_num ORDERS.order_num%TYPE) IS
SELECT ORDER_DATE, MFR, AMOUNT FROM ORDERS
WHERE order_num = Pord_num;
- 3.
- Получить полную запись
- для определенного номера заказа
CURSOR get_orders(Pord_num ORDERS.order_num%TYPE) IS
SELECT * FROM ORDERS
WHERE order_num = Pord_num
RETURN ORDERS%ROWTYPE;
- 4.
- Получение имени сотрудника
- по его номеру
CURSOR get_name(empl_nm SALESREPS.empl_num%TYPE)
RETURN SALESREPS.name%TYPE IS
SELECT name FROM SALESREPS WHERE empl_num =
На данный момент в каждом банке или же филиале банка есть так называемый операционный зал это помещение в банке, где осуществляются клиентские операции в течение банковского дня. На каждого бухгалтера в таком операционном зале есть определенная группа организаций которые они обслуживают. И естественно есть единая программа по обработки таких операций. В нашем банке данная программа написана на Oracle, что позволяет гибкое обслуживание данной программы, т.к. есть детальная раздача прав, вплоть до ограничения определённого пути, и сама структура Oracle хорошо подходит для банковских операций.
Принцип в программе следующий: Клиент оплатив платежное поручение через систему СДБО (система дистанционного банковского обслуживания) подписав платежное поручение своей подписью СКЗИ (средства криптографической защиты информации), отправляет платеж в банк, в банке же он изначального с почтового сервера падает в СУБД Oracle, где его обрабатывает демон (функция автоматической обработки), демон проверяет платеж на наличие ошибок, такие как корректно указанный счет, бик банка, ИНН, КПП и естественно подпись клиента, если на данном этапе возникли ошибки то платеж автоматически уходит отправителю, с причиной отказа, если же демон ошибок не заметил, то платеж попадает дальше в иерархическую структуру СУБД, на этом этапе платеж присваивается к определенному бухгалтеру, иными словами исполнителю, т.е. программно за ранее распределен каждый клиент по группам. Бухгалтер увидев платеж принимает меры, в зависимости он суммы платежа, оплатив и подтвердив что оплата платежа прошла СУБД так же отправляет отчет на клиент сервер СДБО об отчете проплаченной операции, после чего так же формируеться выписка по данному счету и так же отправляется через клиент сервер на СДБО клиента.
Время от времени возникают проблемы с определением групп в операционном зале, т.к. сотрудники не роботы, и могут элементарно заболеть, или же пойти в отпуск, в таких случаях группа распускается, данная ситуация еще не отработана и приводит каждый раз в затруднение инженеров и бухгалтеров операционного зала.
Автоматизировать процесс перевода групп бухгалтеров с возможностью восстановления предыдущего значения групп, т.е. если сотрудник ушел в отпуск, его группу «распускают», а по приходу собирают вновь ту же группу.
Этап 1: Сбор информации по группам:
Была разработана следующая программа для вытягивания информации с СУБД, для дальнейшего расписания с какой группы на какую нужно осуществить переброс.
Код программы:
set tab off heading on feed on
set echo off termout on
linesize 230 pagesize 400
col acc for a15 heading 'старый счет'
col accn for a21 heading 'счет'
col exeold for a6 heading 'откуда'
col exenew for a6 heading 'куда'
col name for a150 heading 'Наименование счета'
accept EXE_OLD number prompt 'ИСПОЛНИТЕЛЬ: '
spool &EXE_OLD.v.txt
select to_char(c.acc,'9999999999999') acc,
c.accn accn,
'<'||to_char(c.exe,'99')||'>' exeold,
'< >' exenew,
substr(c.name,1,150) name
from cr_acc c
where c.exe = &EXE_OLD
and not b2n in ('90901','90902')
and c.dtc is null
order by substr(accn,17,4), substr(accn,1,5), substr(accn,14,3);
;
exit;
По запросу данной программы через СУБД Oracle вытягиваем нужную нам информацию из таблицы, и формируем ее в наглядный вид, запуск программы осуществляется командной строкой: sql exe_ved.sql
После чего получаем исходящий файл в зависимости от группы которую мы раскидываем. Пример: 4 группа имя 4v.txt
После чего распечатываем данный файл и предаем на группу, после того как его отредактирует какие счета на какую группу перевести отдают нам файл обратно
Рисунок 1 счета клиентов с иполнителем.
Этап 2: Разброс группы
Для разброса группы так же была написана программа для реализации загрузки предыдущего сформированного файла и обработки его для переброса по информации операционного зала.
Код программы:
* Входной файл: Файл 99v.txt, где 99 - номер исполнителя
* Выходной файл: exe_upl.sql - этот файл загрузить в /u/home/sgv/rep/exe_move
* и отработать (в командной строке запустить ...>sql exe_upl.sql)
*
PROCEDURE upl
PARAMETERS infile
SET ALTERNATE TO exe_upl.sql
SET ALTERNATE ON
SET CONSOLE ON
loadfb3_(infile)
db_name=token(infile,[.],1)+[.dbf]
USE &db_name
GO TOP
DO WHILE !EOF()
DO CASE
CASE SUBSTR(pole_01,46,1) = "<" .and. SUBSTR(pole_01,47,3)#' '
? "execute cr_upexe("+SUBSTR(pole_01,2,13)+","+SUBSTR(pole_01,47,3)+");"
ENDCASE
SKIP
ENDDO
CLOSE DATABASES
?
? "commit;"
?
? "exit;"
erase &db_name
RETURN
PROCEDURE loadfb3_
PARAMETERS c
LOCAL k1, maxlen:=0, step_wh:=1, fl_name, db
LOCAL bufer, handle, block, area, tec_pos, strn_tec, bytes
LOCAL end_area, end_file, filelen
set scoreboard off
Fl_name = c
block=4096
bufer=space(block)
handle=fopen(fl_name)
if handle=-1
? [невозможно открыть файл, ошибка DOS]
endif
filelen=fseek(handle,0,2)
do while step_wh <= 2
fseek(handle,0,0)
area =[]
tec_pos=1
strn_tec = 0
end_file = .f.
end_area = .f.
if step_wh = 1
else
db_name=token(fl_name,[.],1)+[.dbf]
crt_dbf( db_name + [ pole_01, ] + [c,]+ STR( maxlen, 3) + [ , 0 ] )
USE &db_name
endif
do while !end_file
bytes=fread(handle,@bufer,block)
end_area=.f.
if bytes<>block
end_file=.t.
if bytes=0
end_area=.t.
else
area=substr(area,tec_pos)+substr(bufer,1,bytes)
endif
else
area=substr(area,tec_pos)+bufer
endif
tec_pos=1
do while .not.(end_area)
k1=atnum(chr(13)+chr(10),area,1,tec_pos-1)
if k1=0
k1=atnum(chr(26),area,1,tec_pos-1)
if k1<>0
end_file=.t.
if k1=tec_pos
exit
endif
else
end_area=.t.
loop
endif
endif
strn_tec=strn_tec+1
fl_rec=substr(area,tec_pos,k1-tec_pos)
tec_pos=k1+2
if step_wh = 1
maxlen=max(maxlen,LEN(fl_rec))
else
append blank
replace pole_01 with fl_rec
endif
enddo
enddo
step_wh = step_wh + 1
enddo
fclose(fl_name)
RETURN
*---Процедура crt_dbf ---------------------------------------------------------
PROCEDURE crt_dbf
PARAMETERS c
LOCAL k1,k2,i,db_name
CREATE new_stru
USE new_stru
k1=NUMTOKEN(c,[ ,])
FOR i=1 to (k1-1)/4
APPEND BLANK
k2=(i-1)*4+2
REPLACE field_name WITH TOKEN(c,[ ,],k2)
REPLACE field_type WITH TOKEN(c,[ ,],k2+1)
REPLACE field_len WITH VAL(TOKEN(c,[ ,],k2+2))
REPLACE field_dec WITH VAL(TOKEN(c,[ ,],k2+3))
NEXT
db_name=TOKEN(TOKEN(c,[ ,],1),[.],1)+[.DBF]
CREATE &db_name FROM new_stru
* CLOSE DATABASES
erase new_stru.dbf
RETURN(NIL)
Программа работает следующим способом: запускается сама программа со свойством файла сформированного предыдущего этапа, после чего программа создает файл EXE_UPL.SQL. Этот файл содержит непосредственно функцию и группу для переброса группы, после формирования данного файла можно запускать запрос SQL в СУБД следующей командой: SQL EXE_UPL.SQL, после чего СУБД Oracle обработает данный запрос и перенесет группы по им новым местам.
Рисунок 2 сформированный файл EXE_UPL.SQL
Этап 3: Возврат группы обратно
Для возращения на «круги своя» так же была разработана программа
Работает она следующим образом. Файл который сформирован на первом этапе и расписан бухгалтерами операционного зала запускаем свойствам к написанной программе с наименованием UPL_BACK.
Код программы:
PROCEDURE upl_back
PARAMETERS infile
SET ALTERNATE TO exe_upl.sql
SET ALTERNATE ON
SET CONSOLE ON
loadfb3_(infile)
db_name=token(infile,[.],1)+[.dbf]
USE &db_name
GO TOP
DO WHILE !EOF()
DO CASE
CASE SUBSTR(pole_01,46,1) = "<" .and. SUBSTR(pole_01,47,3)#' '
? "execute cr_upexe("+SUBSTR(pole_01,2,13)+","+SUBSTR(pole_01,40,3)+");"
ENDCASE
SKIP
ENDDO
CLOSE DATABASES
?
? "commit;"
?
? "exit;"
erase &db_name
RETURN
PROCEDURE loadfb3_
PARAMETERS c
LOCAL k1, maxlen:=0, step_wh:=1, fl_name, db
LOCAL bufer, handle, block, area, tec_pos, strn_tec, bytes
LOCAL end_area, end_file, filelen
set scoreboard off
Fl_name = c
block=4096
bufer=space(block)
handle=fopen(fl_name)
if handle=-1
? [невозможно открыть файл, ошибка DOS]
endif
filelen=fseek(handle,0,2)
do while step_wh <= 2
fseek(handle,0,0)
area =[]
tec_pos=1
strn_tec = 0
end_file = .f.
end_area = .f.
if step_wh = 1
else
db_name=token(fl_name,[.],1)+[.dbf]
crt_dbf( db_name + [ pole_01, ] + [c,]+ STR( maxlen, 3) + [ , 0 ] )
USE &db_name
endif
do while !end_file
bytes=fread(handle,@bufer,block)
end_area=.f.
if bytes<>block
end_file=.t.
if bytes=0
end_area=.t.
else
area=substr(area,tec_pos)+substr(bufer,1,bytes)
endif
else
area=substr(area,tec_pos)+bufer
endif
tec_pos=1
do while .not.(end_area)
k1=atnum(chr(13)+chr(10),area,1,tec_pos-1)
if k1=0
k1=atnum(chr(26),area,1,tec_pos-1)
if k1<>0
end_file=.t.
if k1=tec_pos
exit
endif
else
end_area=.t.
loop
endif
endif
strn_tec=strn_tec+1
fl_rec=substr(area,tec_pos,k1-tec_pos)
tec_pos=k1+2
if step_wh = 1
maxlen=max(maxlen,LEN(fl_rec))
else
append blank
replace pole_01 with fl_rec
endif
enddo
enddo
step_wh = step_wh + 1
enddo
fclose(fl_name)
RETURN
*---Процедура crt_dbf ---------------------------------------------------------
PROCEDURE crt_dbf
PARAMETERS c
LOCAL k1,k2,i,db_name
CREATE new_stru
USE new_stru
k1=NUMTOKEN(c,[ ,])
FOR i=1 to (k1-1)/4
APPEND BLANK
k2=(i-1)*4+2
REPLACE field_name WITH TOKEN(c,[ ,],k2)
REPLACE field_type WITH TOKEN(c,[ ,],k2+1)
REPLACE field_len WITH VAL(TOKEN(c,[ ,],k2+2))
REPLACE field_dec WITH VAL(TOKEN(c,[ ,],k2+3))
NEXT
db_name=TOKEN(TOKEN(c,[ ,],1),[.],1)+[.DBF]
CREATE &db_name FROM new_stru
* CLOSE DATABASES
erase new_stru.dbf
RETURN(NIL)
Программа работает следующим образом запускаем программу UPL_BACK с параметром сформированным на первом этапе. Пример UPL_BACK 4v.txt
После чего формируется файл EXE_UPL.SQL его так же запускаем в СУБД Oracle следующей командой SQL EXE_UPL.SQL после чего в СУБД вернется все в изначальное значение, до переброса.
За время производственной практики обучился работать с Oracle в частности в разработке программного обеспечения, за время практики было написано 3 мини программы в комплексе взаимодействующие между собой, что облегчило работу как бухгалтерии филиала так инженеров филиала, в следствии чего была произведена автоматизация процесса переброса групп в операционном зале, в следствие чего было уменьшено время обработки информации и качество полноты данных. В дальнейшем программа будет дорабатываться и 3 блочный комплекс планируется перевести на отдельный программный блок написанный на C# связанный с СУБД Oracle.