Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions tasks/lec_1/DomZ1.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
--1.
select count(*) as Fall from fw_process_log
where N_STATUS = 500
and instr( V_MESSAGE, 'Заказ 2520123')<>0;

--2.
select '2520123' as OrderNum, to_char(max(DT_TIMESTAMP),'dd.mon.yyyy') as OrderDate from fw_process_log
where N_STATUS = 500
and instr( V_MESSAGE, 'Заказ 2520123')<>0;

--3.
select distinct(ltrim(V_MESSAGE,'Загрузка порции заказов начиная с ')) as ORDER_NUM from fw_process_log
where N_ACTION=12
and V_MESSAGE<>'Загрузка порции заказов начиная с -1';

--4.
select COUNT(distinct(ltrim(V_MESSAGE,'Загрузка порции заказов начиная с '))) from fw_process_log
where N_ACTION=12;

--5.
select sum(cast (substr(V_MESSAGE, (length(V_MESSAGE)-8)) as numeric)) as DURATIO from fw_process_log
where N_ACTION=11;

--6.
select count(*) as CLOSED from fw_process_log
where N_ACTION = 11
and DT_TIMESTAMP >=TO_DATE('1, 3, 2018', 'dd.mm.yyyy')
and DT_TIMESTAMP <=TO_DATE('31, 3, 2018', 'dd.mm.yyyy');

--7.
select count(*) as REPEA from (select SID, count(ID_LOG) as Qu from fw_process_log
group by SID) X
where Qu>1;

--8.
select DT_TIMESTAMP, substr(V_MESSAGE,13,instr(V_MESSAGE, '@')-13) as LOGIN from fw_process_log
where ID_USER=11136
and DT_TIMESTAMP=(select max(DT_TIMESTAMP) from fw_process_log
where ID_USER=11136);

--9.
select to_char(trunc(DT_TIMESTAMP, 'MM'), 'Month') as Mont, count(*) as Quantity from fw_process_log
group by trunc(DT_TIMESTAMP, 'MM') ;

--10.
select count(*) as Quer, count(distinct(V_MESSAGE)) as Uniq from fw_process_log
where N_STATUS=500
and ID_PROCESS=5
and DT_TIMESTAMP > to_date('22.02.2018', 'dd.mm.yyyy')
and DT_TIMESTAMP < to_date('02.03.2018', 'dd.mm.yyyy');

--11.
select min(N_SUM) from fw_transfers
where DT_INCOMING <= to_date('14.02.2017 12:00:00', 'dd.mm.yyyy hh24:mi:ss')
and DT_INCOMING >= to_date('14.02.2017 10:00:00', 'dd.mm.yyyy hh24:mi:ss')
and ID_CONTRACT_FROM <> ID_CONTRACT_TO;

--12.
select ID_CONTRACT_TO, DT_REAL, length(V_DESCRIPTION) as V_LEN from fw_transfers
where length(V_DESCRIPTION)>22
order by V_LEN desc;

--13.
select to_char(DT_INCOMING, 'dd.mm.yyyy') as CH_DATE, count(*) as CONTRACTS from (select * from fw_transfers
where ID_CONTRACT_FROM=ID_CONTRACT_TO) X
group by to_char(DT_INCOMING, 'dd.mm.yyyy');

147 changes: 147 additions & 0 deletions tasks/lec_2/dz2.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
--1.
select t.f_sum, t.dt_event from fw_contracts f
join TRANS_EXTERNAL t
on t.id_contract = f.id_contract_inst
and t.v_status >= 'A'
and t.dt_event= (select max(t.dt_event)
from fw_contracts f
join TRANS_EXTERNAL t
on t.id_contract = f.id_contract_inst
and t.v_status >= 'A'

where f.dt_start <= current_timestamp
and f.dt_stop > current_timestamp
and f.v_ext_ident = '0102100000088207_MG1')

where f.dt_start <= current_timestamp
and f.dt_stop > current_timestamp
and f.v_ext_ident = '0102100000088207_MG1';

--2.
select f.v_ext_ident, f.dt_reg_event, d.V_NAME from fw_contracts f
left join fw_departments d
on d.id_department=f.id_department
and d.b_deleted=0
where f.dt_start<=current_timestamp
and f.dt_stop>current_timestamp;

--3.
select V_NAME from (select count(*) as Quant_Contr, V_NAME from fw_contracts c
join fw_departments d
on d.id_department=c.id_department
where c.dt_start<=current_timestamp
and c.dt_stop>current_timestamp
group by d.V_NAME)
where Quant_contr<2;


--4.
select d.V_NAME, All_sum, Q_Sum, Q_contr from
(select d.id_department as ID_D, nvl2(sum(t.f_sum), sum(t.f_sum), 0) as All_sum, count(t.f_sum) as Q_sum, count(c.id_contract_inst) as Q_Contr from fw_departments d
left join fw_contracts c
on c.id_department=d.id_department
and c.dt_start <= current_timestamp
and c.dt_stop > current_timestamp
left join trans_external t
on t.id_contract = c.id_contract_inst
and t.v_status = 'A'
and t.dt_event> (select max(t.dt_event)
from trans_external t) - interval '1' month
where b_deleted=0
group by d.id_department) X
join fw_departments d
on d.id_department=X.ID_D

--5.
select f.v_ext_ident, f.v_status, (select count(1)
from TRANS_EXTERNAL t
where t.id_contract = f.id_contract_inst
and t.DT_EVENT<to_date('01.01.2018', 'dd.mm.yyyy')
and t.DT_EVENT>=to_date('01.01.2017', 'dd.mm.yyyy')
and t.v_status = 'A') as Quant

from fw_contracts f
where f.dt_start <= current_timestamp
and f.dt_stop > current_timestamp
and 3 <= (select count(1)
from TRANS_EXTERNAL t
where t.id_contract = f.id_contract_inst
and t.DT_EVENT<to_date('01.01.2018', 'dd.mm.yyyy')
and t.DT_EVENT>=to_date('01.01.2017', 'dd.mm.yyyy')
and t.v_status = 'A') ;

--6.
select distinct c.V_EXT_IDENT, c.V_STATUS, d.V_NAME
from fw_contracts c
join trans_external t
on t.id_contract = c.id_contract_inst
and t.v_status>='A'
and exists (select * from trans_external
where t.dt_event<to_date('01.01.2018', 'dd.mm.yyyy')
and t.dt_event>=to_date('01.01.2017', 'dd.mm.yyyy'))
left join fw_departments d
on d.id_department = c.id_department
and d.b_deleted = 0

where c.dt_start <= current_timestamp
and c.dt_stop > current_timestamp;

--7.
select distinct d.V_NAME
from (select * from fw_contracts c
where c.dt_start <= current_timestamp
and c.dt_stop > current_timestamp) z
right join fw_departments d
on d.id_department=z.id_department

and b_deleted =0
where z.id_department is null;

--8.

select distinct Quant, Last_trans, c.v_ext_ident, u.v_username from
(select c.id_contract_inst as ID_contr, count(id_contract) as Quant, max(t.dt_event) as Last_trans, max(t.id_source) as SOURC
from fw_contracts c
left join TRANS_EXTERNAL t
on t.id_contract = c.id_contract_inst
and t.v_status >= 'A'

where c.dt_start <= current_timestamp
and c.dt_stop > current_timestamp
group by c.id_contract_inst) X
join fw_contracts c
on c.id_contract_inst=X.ID_contr
left join ci_users u
on u.id_user=X.SOURC
and u.v_status='a'
;



--9.
select f.V_Ext_ident
from fw_contracts f
join TRANS_EXTERNAL t
on t.id_contract = f.id_contract_inst
and t.id_trans=6397542
where f.dt_start <= to_date('01.01.2016','dd.mm.yyyy')
and f.dt_stop >= to_date('01.01.2016','dd.mm.yyyy');

--10.
select c.ID_CONTRACT_INST, c.V_EXT_IDENT, c.V_STATUS, cur.V_NAME from fw_contracts c
join FW_CURRENCY cur
on cur.id_currency=c.ID_CURRENCY
and cur.b_deleted=0

where c.ID_CONTRACT_INST in (select ID_CONTRACT_INST from (select ID_CONTRACT_INST,count(distinct ID_CURRENCY) as Qu from fw_contracts c
group by ID_CONTRACT_INST)
where Qu>1)
and c.dt_start <= current_timestamp
and c.dt_stop > current_timestamp;

--11.
select ID_CONTRACT_INST from (select ID_CONTRACT_INST, count(*) as Qu from (select * from fw_contracts c
where c.V_STATUS='C')

group by ID_CONTRACT_INST)
where Qu>1
160 changes: 160 additions & 0 deletions tasks/lec_3/dz3.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
--1.
CREATE OR REPLACE PROCEDURE saveSIGNERS(pV_FIO IN scd_signers.v_fio%TYPE,
pID_MANAGER IN scd_signers.id_manager%TYPE,
pACTION IN NUMBER) IS
pid_USER NUMBER;
BEGIN
SELECT ci.id_user
INTO pid_USER
FROM ci_users ci
WHERE ci.id_user = pID_MANAGER;

CASE
WHEN pACTION = 3 THEN
DELETE FROM scd_signers ss WHERE id_manager = pID_MANAGER;
WHEN pACTION = 1 THEN
INSERT INTO scd_signers
(v_fio, id_manager)
VALUES
(pV_FIO, pID_MANAGER);
WHEN pACTION = 2 THEN
UPDATE scd_signers
SET v_fio = pv_fio
WHERE id_manager= pID_MANAGER;
END CASE;
EXCEPTION
WHEN no_data_found THEN
raise_application_error (-20020,'Пользователь не найден');
WHEN OTHERS THEN
raise_application_error(-20020,
'Существующий пользователь');
END;
/
--2.
create or replace function getDecoder(id_eq in scd_equip_kits.id_equip_kits_inst%type)
return varchar2 IS

v_ext varchar2(255);
v_cas varchar2(255);
v_ret varchar2(255);
agency number;
BEGIN



SELECT c.b_agency INTO agency
FROM scd_equip_kits ek JOIN scd_contracts c ON c.id_contract_inst = ek.id_contract_inst
WHERE ek.id_equip_kits_inst=id_eq and ek.dt_start <= current_timestamp AND ek.dt_stop > current_timestamp;

CASE
WHEN agency = 1 THEN
SELECT ek.V_CAS_ID INTO v_ret
FROM SCD_EQUIP_KITS ek WHERE ek.id_equip_kits_inst=id_eq and ek.dt_start <= current_timestamp AND ek.dt_stop > current_timestamp;
WHEN agency <> 1 THEN
SELECT ek.V_EXT_IDENT INTO v_ret
FROM SCD_EQUIP_KITS ek WHERE ek.id_equip_kits_inst=id_eq and ek.dt_start <= current_timestamp AND ek.dt_stop > current_timestamp;

END CASE;
return v_ret;
EXCEPTION
WHEN no_data_found THEN
raise_application_error (-20020,'Оборудование не найдено');
WHEN OTHERS THEN
raise_application_error(-20020, 'Какая-то ошибка');

END;
/
--3.
create or replace PROCEDURE getEquip(dwr OUT sys_refcursor,
pID_EQUIP_KITS_INST in number default null) IS
BEGIN

case
when pID_EQUIP_KITS_INST is null
then

OPEN dwr FOR
select cl.V_LONG_TITLE, u.V_USERNAME, fc.V_EXT_IDENT, ekt.v_name, getDecoder(ek.id_equip_kits_inst) from scd_equip_kits ek
join fw_contracts fc
on fc.id_contract_inst=ek.id_contract_inst
and fc.dt_start <= current_timestamp AND fc.dt_stop > current_timestamp
and fc.v_status='A'
join fw_clients cl
on cl.ID_CLIENT_INST=fc.ID_CLIENT_INST
and cl.dt_start <= current_timestamp AND cl.dt_stop > current_timestamp
join ci_users u
on u.ID_CLIENT_INST=fc.ID_CLIENT_INST
and u.v_status='A'
join scd_equipment_kits_type ekt
on ekt.id_equip_kits_type=ek.id_equip_kits_type
and ekt.dt_start <= current_timestamp AND ekt.dt_stop > current_timestamp
where ek.dt_start <= current_timestamp AND ek.dt_stop > current_timestamp
;
when pID_EQUIP_KITS_INST is not null
then
OPEN dwr FOR
select cl.V_LONG_TITLE, u.V_USERNAME, fc.V_EXT_IDENT, ekt.v_name, getDecoder(ek.id_equip_kits_inst) from scd_equip_kits ek
join fw_contracts fc
on fc.id_contract_inst=ek.id_contract_inst
and fc.dt_start <= current_timestamp AND fc.dt_stop > current_timestamp
and fc.v_status='A'
join fw_clients cl
on cl.ID_CLIENT_INST=fc.ID_CLIENT_INST
and cl.dt_start <= current_timestamp AND cl.dt_stop > current_timestamp
join ci_users u
on u.ID_CLIENT_INST=fc.ID_CLIENT_INST
and u.v_status='A'
join scd_equipment_kits_type ekt
on ekt.id_equip_kits_type=ek.id_equip_kits_type
and ekt.dt_start <= current_timestamp AND ekt.dt_stop > current_timestamp
where ek.dt_start <= current_timestamp AND ek.dt_stop > current_timestamp and ek.ID_EQUIP_KITS_INST=pID_EQUIP_KITS_INST
;

end case;
EXCEPTION
WHEN no_data_found THEN
raise_application_error (-20020,'Нету');
WHEN OTHERS THEN
raise_application_error(-20020,
'Другая ошибка');


END;
/
--4.
CREATE OR REPLACE PROCEDURE checkstatus IS

BEGIN
FOR i IN (select distinct ek.id_equip_kits_inst, cl.V_LONG_TITLE, c.b_agency, fc.v_ext_ident from scd_equip_kits ek
JOIN scd_equipment_status ses
ON ses.id_equipment_status = ek.id_status
AND ses.b_deleted = 0
and ses.v_name <>'Продано'
join fw_contracts fc
on fc.id_contract_inst=ek.id_contract_inst
and fc.dt_start <= current_timestamp AND fc.dt_stop > current_timestamp
and fc.v_status='A'
join fw_clients cl
on cl.ID_CLIENT_INST=fc.ID_CLIENT_INST
and cl.dt_start <= current_timestamp AND cl.dt_stop > current_timestamp
JOIN scd_contracts c ON c.id_contract_inst = ek.id_contract_inst
join scd_equipment_kits_type ekt
on ekt.id_equip_kits_type=ek.id_equip_kits_type
and ekt.dt_start <= current_timestamp AND ekt.dt_stop > current_timestamp
where ek.dt_start <= current_timestamp AND ek.dt_stop > current_timestamp) LOOP


update scd_equipment_status
set v_name='Продано';

if i.b_agency=1

then
dbms_output.put_line ('Для оборудования '||i.id_equip_kits_inst||' дилера '||i.V_LONG_TITLE||' с контрактом '||i.v_ext_ident||',являющегося агентской сетью был проставлен статус Продано.');
else
dbms_output.put_line ('Для оборудования '||i.id_equip_kits_inst||' дилера '||i.V_LONG_TITLE||' с контрактом '||i.v_ext_ident||',не являющегося агентской сетью был проставлен статус Продано.');
end if;
END LOOP;
end;


Loading