Почему возникает ошибка: "PLS-00302: компонента 'SHORT_SVOD_MOVEMENT_VIP' должна быть объявлена", хотя указанное там имя существует?
Добавляю в тело уже существующего пакета свой код
function short_svod_movement_vip(params json) return json is
data json := json();
p_rows json_list := json_list();
p_obj json;
p_payment_type varchar2(200);
p_s_dep_way_status number(1);
p_bdate date;
p_edate date;
p_str_org_id varchar2(200);
p_str_main_org_id varchar2(200);
p_report_type varchar2(200);
p_title varchar2(2000);
p_report_mode varchar2(200);
colontitul varchar2(200);
author varchar2(200);
p_author_id varchar2(200);
p_hosp_type varchar2(200);
p_hosp_type_name varchar2(200);
p_incl_newborn number;
p_patient_care number;
p_food varchar2(200);
cursor c is
select decode(grouping(org_name),0,to_char(org_name),'ВСЕГО') org_name,
nullif(sum(sost_bd),0) as sost_bd,
nullif(sum(sost_bd_adlt),0) as sost_bd_adlt,
nullif(sum(sost_bd_chld),0) as sost_bd_chld,
nullif(sum(sost_ed),0) as sost_ed,
nullif(sum(sost_ed_adlt),0) as sost_ed_adlt,
nullif(sum(sost_ed_chld),0) as sost_ed_chld,
nullif(sum(postup),0) as postup,
nullif(sum(in_of),0) as in_of,
nullif(sum(out_of),0) as out_of,
nullif(sum(discharge),0) as discharge,
nullif(sum(dead),0) as dead,
nullif(sum(sost_po_uhodu),0) as sost_po_uhodu,
nullif(sum((beds - ssd)),0) as svobod,
nullif(sum(beds),0) as beds,
nullif(sum(ssd),0) as ssd
from (
select (select s.shortname
from s_str_orgs s
where s.s_str_org_id = w.s_str_org_s_str_org_id) org_name,
w.s_str_org_s_str_org_id org_id,
(select count(*)
from s_beds b,
s_funcstrs sf
where b.status != 99
and b.s_funcstr_s_funcstr_id = sf.s_funcstr_id
and sf.s_str_org_s_str_org_id = w.s_str_org_s_str_org_id
and sf.room in ('303', '304',
'327', '328',
'527', '528',
'503', '504',
'427', '428',
'403', '404',
'627', '628',
'603', '604',
'4020', '4026', '4033',
'4034', '4036', '4038',
'3016', '3020', '3021',
'3022', '3030', '3037')
and b.s_bed_id not in(select bw.s_bed_id from S_BEDOUTS bw where bw.s_bed_id=b.s_bed_id and bw.out_date is null) ) beds,
count(case when w.in_date < p_bdate and (w.out_date is null or w.out_date >= p_bdate) then w.t_med_chrt_id end) sost_bd,
count(case when w.in_date < p_bdate and (w.out_date is null or w.out_date >= p_bdate) and floor(months_between(trunc(p_bdate),b.birthday)/12) > 17 then w.t_med_chrt_id end) sost_bd_adlt,
count(case when w.in_date < p_bdate and (w.out_date is null or w.out_date >= p_bdate) and floor(months_between(trunc(p_bdate),b.birthday)/12) <= 17 then w.t_med_chrt_id end) sost_bd_chld,
count(case when w.in_date < p_edate and (w.out_date is null or w.out_date>= p_edate) then w.t_med_chrt_id end) sost_ed,
count(case when w.in_date < p_edate and (w.out_date is null or w.out_date >= p_edate) and floor(months_between(trunc(p_edate),b.birthday)/12) > 17 then w.t_med_chrt_id end) sost_ed_adlt,
count(case when w.in_date < p_edate and (w.out_date is null or w.out_date >= p_edate) and floor(months_between(trunc(p_edate),b.birthday)/12) <= 17 then w.t_med_chrt_id end) sost_ed_chld,
count(case when w.kind = 'ПОЛОЖЕН' and (w.in_date between p_bdate and p_edate) then w.t_med_chrt_id end) postup,
count(case when w.kind = 'ПЕРЕВЕДЕН' and w.in_date >= p_bdate and w.in_date < p_edate then w.t_med_chrt_id end) in_of,
count(case when w.result is null and w.out_date >= p_bdate and w.out_date < p_edate then w.t_med_chrt_id end) out_of,
count(case when w.result is not null and w.out_date >= p_bdate and w.out_date < p_edate then w.t_med_chrt_id end) discharge,
count(case when w.result = 'У' and w.out_date >= p_bdate and w.out_date < p_edate then w.t_med_chrt_id end) dead,
count(case when m.mk_type = 'ПУ' and w.in_date < p_bdate and (w.out_date is null or w.out_date >= p_bdate) then w.t_med_chrt_id end) sost_po_uhodu,
count(case when m.mk_type = 'КС' and (w.out_date is null or w.out_date >= trunc(sysdate,'MI') )then w.t_med_chrt_id end) ssd
from s_dep_ways w,
t_med_chrts m,
t_tlists t,
t_births b,
(select r.room room,
b.numb bed,
w.s_bed_way_id,
s.s_str_org_id org_id,
w.t_med_chrt_id,
m.id
from s_bed_ways w,
s_beds b,
s_funcstrs r,
s_str_orgs s
, t_med_chrts m
where w.status = 0 and
w.s_bed_s_bed_id = b.s_bed_id and
b.s_funcstr_s_funcstr_id = r.s_funcstr_id and
r.s_str_org_s_str_org_id = s.s_str_org_id and
-- r.status = 0 and
-- r.kind = 'ПАЛАТА' and
w.t_med_chrt_id = m.id and
w.in_date = (select max(w1.in_date) from s_bed_ways w1 where w1.t_med_chrt_id = m.id ) ) gg
where w.t_med_chrt_id = m.id
and m.id = t.med_chrt_id
and t.birth_id = b.id(+)
and m.status = 0 -- было != 99
and t.status = 0
and w.kind != 'ПО'
and m.kind = 'ИБ'
and nvl(m.note,'?') != 'ПИБ'
and gg.id (+) = m.id
and gg.room in ('303', '304',
'327', '328',
'527', '528',
'503', '504',
'427', '428',
'403', '404',
'627', '628',
'603', '604',
'4020', '4026', '4033',
'4034', '4036', '4038',
'3016', '3020', '3021',
'3022', '3030', '3037')
and w.status = p_s_dep_way_status
and (p_hosp_type = '-1' or (instr(','||p_hosp_type||',',','||m.mk_type||',') > 0 ))
and (p_str_org_id = '-1' or (instr(','||p_str_org_id||',',','||to_char(w.s_str_org_s_str_org_id)||',') > 0 and w.status = p_s_dep_way_status))
and (p_payment_type = '-1' or (instr(','||p_payment_type||',',','||to_char(w.payment_type)||',') > 0 ))
and (p_str_main_org_id = '-1' or (w.s_str_org_s_str_org_id in (select o1.s_str_org_id
from s_str_orgs o1
connect by o1.s_str_org_s_str_org_id = prior o1.s_str_org_id
start with o1.s_str_org_id = p_str_main_org_id)
and w.status = p_s_dep_way_status))
and (p_incl_newborn = 1 or (select get_tlist_conts(m.id,'NEWBORN') from dual) = p_incl_newborn)
--
and (p_food in ('all','no') or exists (select 1 from wi.xs$fd X where X.status<99 and X.parent_id=m.id and X.doc_type='FD.PROTOCOL_EXTRA_DIET' and to_date(X.code,'dd.mm.yyyy') <= p_bdate) )
and (p_food in ('all','yes') or not exists (select 1 from wi.xs$fd X where X.status<99 and X.parent_id=m.id and X.doc_type='FD.PROTOCOL_EXTRA_DIET' and to_date(X.code,'dd.mm.yyyy') <= p_bdate) )
-- ДБ: Такой расчет не пошел, слишком долго
-- and (p_food = 'yes' or z.has_extra_diet(m.id, p_bdate, 'NUMBER') = '1')
-- and (p_food = 'no' or z.has_extra_diet(m.id, p_bdate, 'NUMBER') = '0')
group by w.s_str_org_s_str_org_id)
where sost_ed > 0
group by rollup(org_name);
begin
-- Подготовка данных
p_bdate := nvl(to_date(params.as_string('BDATE'),'dd.mm.yyyy hh24:mi:ss'),sysdate-1);
p_edate := nvl(to_date(params.as_string('EDATE'),'dd.mm.yyyy hh24:mi:ss'),sysdate);
p_str_org_id := nvl(params.as_string('S_STR_ORG_ID'),'-1');
p_str_main_org_id := nvl(params.as_string('MAIN_ORG_ID'),'-1');
p_payment_type := nvl(params.as_string('PAYMENT_TYPE'),'-1');
p_report_type := params.as_string('REPORT_TYPE');
p_hosp_type := nvl(params.as_string('HOSP_TYPE'),'-1');
p_hosp_type_name := params.as_string('HOSP_TYPE_NAME');
p_incl_newborn := nvl(params.as_number('INCL_NEWBORN'),0);
p_patient_care := nvl(params.as_number('PATIENT_CARE'),0);
p_author_id := params.as_number('AUTHOR_ID');
p_report_mode := nvl(params.as_string('REPORT_MODE'),'EXEC');
p_food := nvl(params.as_string('FOOD'),'all');
if params.as_bool('S_DEP_WAY_STATUS') then
p_s_dep_way_status := 1;
else p_s_dep_way_status:= 0;
end if;
for rec in c loop
p_obj := json();
p_obj.put('ORG_NAME', rec.org_name); -- отделение
p_obj.put('SOST_BD', rec.sost_bd); -- состояло на начало периода
p_obj.put('SOST_BD_ADLT', rec.sost_bd_adlt); -- состояло на начало периода, взрослые
p_obj.put('SOST_BD_CHLD', rec.sost_bd_chld); -- состояло на начало периода, дети
p_obj.put('SOST_ED', rec.sost_ed); -- состоялo на конец периода
p_obj.put('SOST_ED_ADLT', rec.sost_ed_adlt); -- состоялj на начало периода, взрослые
p_obj.put('SOST_ED_CHLD', rec.sost_ed_chld); -- состоялo на начало периода, дети
p_obj.put('POSTUP', rec.postup); -- поступило за период
p_obj.put('IN_OF', rec.in_of); -- переведено в отделение
p_obj.put('OUT_OF', rec.out_of); -- переведено из отделения
p_obj.put('DISCHARGE', rec.discharge); -- выписано из отделения
p_obj.put('DEAD', rec.dead); -- умерло
p_obj.put('OUT_OF', rec.out_of); -- переведено из отделения
p_obj.put('SOST_PO_UHODU', rec.sost_po_uhodu); -- состоит по уходу
p_obj.put('SVOBOD', rec.svobod); -- свободно коек на время отчета
p_rows.append(p_obj.to_json_value);
end loop;
--Данные о ЛПУ
get_info_org;
data.put('ORG_NAME', org_name);
data.put('ORG_ADDRESS', org_address);
--Параметры отбора
p_title := p_title||'Дата с: '||to_char(p_bdate,'dd.mm.yyyy hh24:mi')||chr(10)||'Дата по: '||to_char(p_edate,'dd.mm.yyyy hh24:mi')||chr(10);
--Отделение (выбор из списка всех отделений стационара)
if p_str_org_id != '-1' then
p_title := p_title||'Отделение: '||get_org_list_by_id(p_str_org_id)||chr(10);
end if;
--Отбор по отделению нахождения
if p_s_dep_way_status = 1 then
p_title := p_title||'Отбор по отделению нахождения: Да'||chr(10);
end if;
--Корпус
if p_str_main_org_id != '-1' then
p_title := p_title||'Корпус: '||get_org_list_by_id(p_str_main_org_id)||chr(10);
end if;
--Источник финансирования (Наличный расчет; Договоры; ДМС; Бюджет; ОМС; ВМП; ОМСло)
if p_payment_type != '-1' then
p_title := p_title||'Источник финансирования: '||get_payment_list_by_id(p_payment_type)||chr(10);
end if;
--Тип госпитализации
if p_hosp_type != '-1' then
p_title := p_title||'Тип госпитализации: '||p_hosp_type_name||chr(10);
end if;
--Включать новорожденных? (С новорожденными; Исключить новорожденных)
if p_incl_newborn = 0 then
p_title := p_title||'Включать новорожденных?: Исключить новорожденных'||chr(10);
else
p_title := p_title||'Включать новорожденных?: С новорожденными'||chr(10);
end if;
--Улучшенное питание
if p_food = 'yes' then
p_title := p_title||'Расширенный рацион: да'||chr(10);
elsif p_food = 'no' then
p_title := p_title||'Расширенный рацион: нет'||chr(10);
end if;
if p_report_mode = 'PREVIEW' then
data.put('$_CROSS_LABELS', json_list('[
{"TITLE": "Отделение", "SOURCE": "ORG_NAME", "ALIGN": "left"},
{"TITLE": "Состоит пациентов на начало суток<br>всего", "SOURCE":"SOST_BD", "ALIGN": "center"},
{"TITLE": "взрослые", "SOURCE":"SOST_BD_ADLT", "ALIGN": "center"},
{"TITLE": "дети", "SOURCE":"SOST_BD_CHLD", "ALIGN": "center"},
{"TITLE": "Поступило пациентов", "SOURCE":"POSTUP", "ALIGN": "center"},
{"TITLE": "Переведено внутри больницы<br>из других отделений", "SOURCE":"IN_OF", "ALIGN": "center"},
{"TITLE": "в другие отделения", "SOURCE":"OUT_OF", "ALIGN": "center"},
{"TITLE": "Выбыло из больницы<br>выписано", "SOURCE":"DISCHARGE", "ALIGN": "center"},
{"TITLE": "умерло", "SOURCE":"DEAD", "ALIGN": "center"},
{"TITLE": "Состоит пациентов на текущее время<br>всего", "SOURCE":"SOST_ED", "ALIGN": "center"},
{"TITLE": "взрослые", "SOURCE":"SOST_ED_ADLT", "ALIGN": "center"},
{"TITLE": "дети", "SOURCE":"SOST_ED_CHLD", "ALIGN": "center"},
{"TITLE": "Свободные места", "SOURCE":"SVOBOD", "ALIGN": "center"}
]'));
data.put('$_CSS', '.BOLD {font-weight:bold;}');
data.put('$_HIDDEN_KEYS', 'CSS');
end if;
colontitul:= 'Сформировано в МИС Интерин'||' '||to_char(sysdate,'dd.mm.yyyy hh24:mi');
author:=s_fgetfio(s_currcode);
data.put('COLONTITUL', colontitul);
data.put('AUTHOR', author);
data.put('TITLE', p_title);
data.put('ROWS', p_rows.to_json_value);
return data;
end short_svod_movement_vip;
В спецификацию пакета добавил описание
function short_svod_movement_vip(params json) return json;
но вылазит ошибка
ORA-06550: Строка 7, столбец 31:
PLS-00302: компонента 'SHORT_SVOD_MOVEMENT_VIP' должна быть объявлена
ORA-06550: Строка 7, столбец 3:
В чем может быть проблема?