powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вызвать функцию в PostreSQL ?
9 сообщений из 9, страница 1 из 1
Как вызвать функцию в PostreSQL ?
    #39450097
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE OR REPLACE FUNCTION fns_rosim_mart.object_xml(fns_rosim_mart.object, fns_rosim_mart.site)

В качестве входных данных используются таблицы.

Вызываю силектом fns_rosim_mart.object_xml(fns_rosim_mart.object, fns_rosim_mart.site)
Функция должна возвратить xml. Функция рабочая, так как через внешний адаптер отрабатывает.
...
Рейтинг: 0 / 0
Как вызвать функцию в PostreSQL ?
    #39450098
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Select * from fns_rosim_mart.object_xml(fns_rosim_mart.object, fns_rosim_mart.site)
или
Select fns_rosim_mart.object_xml(fns_rosim_mart.object, fns_rosim_mart.site)
Не помогло.
...
Рейтинг: 0 / 0
Как вызвать функцию в PostreSQL ?
    #39450100
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE OR REPLACE FUNCTION fns_rosim_mart.fns_v05_object_xml(fns_rosim_mart.object, fns_rosim_mart.site)
RETURNS xml
LANGUAGE plpgsql
AS $function$DECLARE
v_result_xml xml;
v_old_number fns_rosim_mart.old_number%rowtype;
v_wall_material_code text;
v_wall_material text;
BEGIN
...
Рейтинг: 0 / 0
Как вызвать функцию в PostreSQL ?
    #39450101
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

Угу. И база молча ничего не делает, без всяких сообщений об ошибках, да?
...
Рейтинг: 0 / 0
Как вызвать функцию в PostreSQL ?
    #39450104
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

При вызове select * from fns_rosim_mart.fns_object_xml (fns_rosim_mart.object, fns_rosim_mart.site)
Пишет error missing FROM-clause entry for table "fns_rosim_mart"
...
Рейтинг: 0 / 0
Как вызвать функцию в PostreSQL ?
    #39450129
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

люблю таких стеснительных
ни тебе полного текста ф-ии,
ни полного текста вызова с полным текстом ошибок


в запотевшие шары ничего не разобрать
предположу -- какой-то дяти деятель также стесняется в текстах явно писать схемные префиксы имен таблиц и ф-й. могу ошибаццо
...
Рейтинг: 0 / 0
Как вызвать функцию в PostreSQL ?
    #39450137
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
,

CREATE OR REPLACE FUNCTION fns_rosim_mart.fns_v05_object_xml(fns_rosim_mart.object, fns_rosim_mart.site)
 RETURNS xml
 LANGUAGE plpgsql
AS $function$DECLARE 
v_result_xml xml;
v_old_number fns_rosim_mart.old_number%rowtype;
v_wall_material_code text;
v_wall_material text;
BEGIN 
select * into v_old_number from fns_rosim_mart.old_number where object_id=$1.id limit 1;

if $1.object_code = 1 then
--выгрузка ЗУ
	v_result_xml:= xmlelement(name СведЗУ,xmlattributes($1.cad_num as КадастНомЗУ,
						     to_char($1.date_registered,'DD.MM.YYYY') as ДатаКадНомГКН,
						     to_char($1.date_canceled,'DD.MM.YYYY') as ДатаПрекрКадУч,
						     v_old_number.cond_num as РанУслНомЗУ,
						     v_old_number.cad_num as РанКадстНомЗУ,						     						   
						     COALESCE($1.category_code,'003008000000') as КодКатЗемли,
						     $2.OKATO as ОКАТО,
						     COALESCE($1.utilization_doc,'Значение отсутствует') as РазрИспЗУ,
						     $1.utilization_code as КодРазрИспЗУ,
						     COALESCE($2.KLADR, $1.subject_rf || '00000000000') as КодКЛАДР,
						     COALESCE($2.ADDRESS,$2.REF_POINT_NAME,$2.POSITION_DESC,$2.NOTE,'Текстовое описание адреса отсутствует') as АдрРФТ,
						     CASE WHEN $1.AREA<>0 THEN to_char($1.AREA,'FM9999999999999999999D90') ELSE NULL end as ПлощЗУ,
						     '055' as КодОКЕИПл,
--						     $1.AREA_UNIT as КодОКЕИПл,
						     CASE WHEN $1.price<>0 THEN to_char($1.price,'FM9999999999999999999D90') ELSE NULL end as НормСтЗУ,
						     CASE WHEN $1.cad_cost<>0 THEN to_char($1.cad_cost,'FM9999999999999999999D9990') ELSE NULL end as КадСтОб,
						     to_char($1.cost_approvement_date,'DD.MM.YYYY') as ДатаКадСт,
						     to_char($1.cost_registration_date,'DD.MM.YYYY') as ДатаВнГКНКадСт,
						     to_char($1.cost_act_approvement_date,'DD.MM.YYYY') as ДатаАктаУтвКС,
						     $1.cost_act_approvement_num as НомерАктаУтвКС,
						     to_char($1.cost_application_date,'DD.MM.YYYY') as ДатаПримКС), 
						     case when $2.object_id is not null then fns_rosim_mart.fns_v05_address_rf_xml('АдрЗУ',$2)
						     else xmlelement(name АдрЗУ, xmlattributes($1.subject_rf as КодРегион)) end,
						     (select xmlagg(xmlelement(name СведПредКадНомЗУ, xmlattributes(po.cad_num as ПредКадНомЗУ))) from fns_rosim_mart.prev_obj po where po.object_id=$1.id and po.cad_num is not null)						     
						     );						     
else if $1.object_code = 5 then
--Выгрузка помещения
	v_result_xml:= xmlelement(name СведПомещ,xmlattributes(
						     $1.building_cad_num as КадастрНомЗд,
						     $1.cad_num as КадастНомПом,
						     to_char($1.date_registered,'DD.MM.YYYY') as ДатаКадНомГКН,
						     to_char($1.date_canceled,'DD.MM.YYYY') as ДатаПрекрКадУч,
--						     $1.old_cond_num_egrp as УсловнНомПомЕГРП,
						     $2.OKATO as ОКАТО,
						     $2.KLADR as КодКЛАДР,
						     COALESCE($2.ADDRESS,$2.POSITION_DESC,$2.NOTE,'Текстовое описание адреса отсутствует') as АдрРФТ,
						     $2.STRUCTURE as Строен,
						     $1.ROOM_NUM as Комн,
						     $1.IS_LIVING as ПрЖилПом,
						     case WHEN $1.LIVING_TYPE = '205002000000' THEN '1' 
							  WHEN $1.LIVING_TYPE = '205001000000' THEN '2'
							  ELSE $1.LIVING_TYPE end as ВидЖилПом,						       
						     '002002002000' as КодВидОН,
						     $1.LETTER as ЛитерПом,
						     CASE WHEN $1.AREA<>0 THEN to_char($1.AREA,'FM9999999999999999999D90') ELSE NULL end as ПлощОб,
						     '055' as КодОКЕИПлощ,
						     --$1.AREA_UNIT as КодОКЕИПлощ,
						     CASE WHEN $1.cad_cost<>0 THEN to_char($1.cad_cost,'FM9999999999999999999D9990') ELSE NULL end as КадСтОб,
						     to_char($1.cost_approvement_date,'DD.MM.YYYY') as ДатаКадСт,
						     to_char($1.cost_registration_date,'DD.MM.YYYY') as ДатаВнГКНКадСт,
						     to_char($1.cost_act_approvement_date,'DD.MM.YYYY') as ДатаАктаУтвКС,
						     $1.cost_act_approvement_num as НомерАктаУтвКС,
						     to_char($1.cost_application_date,'DD.MM.YYYY') as ДатаПримКС), 
						     case when $2.object_id is not null then fns_rosim_mart.fns_v05_address_rf_xml('АдрПомещ',$2)
						     else xmlelement(name АдрПомещ, xmlattributes($1.subject_rf as КодРегион)) end,

--анПрКадНомЕГРП 				     (select xmlagg(xmlelement(name РанПрКадНомЕГРП, oln.cad_num_egrp)) from fns_rosim_mart.old_number oln where oln.object_id=$1.id and oln.cad_num_egrp is not null),						     
						     (select xmlagg(xmlelement(name ПредКадНомОбГКН, po.cad_num)) from fns_rosim_mart.prev_obj po where po.object_id=$1.id and po.cad_num is not null),
						     (select xmlagg(xmlelement(name СвРанПрНомОбГКН, 
							xmlattributes(o_n.cad_num as КадНомОб,o_n.cond_num as УслНомОб,o_n.inv_num as ИнвНомОб)))
							from fns_rosim_mart.old_number o_n where object_id=$1.id)
						     );

else
--Выгрузка остальных объектов, как зданий
	select max(m.code), max(m."value") into v_wall_material_code,v_wall_material from fns_rosim_mart.material_wall  m where m.object_id = $1.id limit 1;
	v_result_xml:= xmlelement(name СведЗдание,xmlattributes(
						     $1.cad_num as КадастНомЗд,
						     to_char($1.date_registered,'DD.MM.YYYY') as ДатаКадНомЗдГКН,
						     to_char($1.date_canceled,'DD.MM.YYYY') as ДатаПрекрКадУч,
						     v_old_number.cond_num as УсловнНомЗдЕГРП,
						     $2.OKATO as ОКАТО,
						     $2.KLADR as КодКЛАДР,
						     COALESCE($2.ADDRESS,$2.POSITION_DESC,$2.NOTE,'Текстовое описание адреса отсутствует') as АдрРФТ,
						     $2.STRUCTURE as Строен,
						     $1.NAME as НаимОН,
						     CASE 
						     WHEN $1.object_code = 2 THEN '002002001000' 
						     WHEN $1.object_code = 3 THEN '002002004000'
						     WHEN $1.object_code = 4 THEN '002002005000'
						     ELSE $1.TYPE END as КодВидОН,
						     case when $1.IS_LIVING = '1' or $1.IS_MKD = '1' then '1' else 2 end as НазнЗд,
						     $1.IS_MKD as ПрМнДома,
						     $1.PURPOSE as НазнСоор,
						     $1.LETTER as ЛитерЗд,
						     case when $1.AREA <> 0  then to_char($1.AREA,'FM9999999999999999999D90')
							  when $1.EXTENSION <> 0 then to_char($1.EXTENSION,'FM9999999999999999999D90')
							  when $1.VOLUME <> 0 then to_char($1.VOLUME,'FM9999999999999999999D90') end  as ППООб,
						     case when $1.AREA <> 0 then '055' --m2
							  when $1.EXTENSION <> 0 then '006' --m 
							  when $1.VOLUME <> 0 then '113' end as КодОКЕИППО, --m3
						     $1.year_commisioning as ГодВводаЭкспл,
						     v_wall_material as МатСтен,
						     v_wall_material_code as КодМатСтен,
						     $1.FLOORS as ЭтажнОб,
						     $1.UNDERGROUND_FLOORS as ЭтажнПодз,
						     CASE WHEN $1.cad_cost<>0 THEN to_char($1.cad_cost,'FM9999999999999999999D9990') ELSE NULL end as КадСтОб,
						     to_char($1.cost_approvement_date,'DD.MM.YYYY') as ДатаКадСт,
						     to_char($1.cost_registration_date,'DD.MM.YYYY') as ДатаВнГКНКадСт,
						     to_char($1.cost_act_approvement_date,'DD.MM.YYYY') as ДатаАктаУтвКС,
						     $1.cost_act_approvement_num as НомерАктаУтвКС,
						     to_char($1.cost_application_date,'DD.MM.YYYY') as ДатаПримКС), 
						     case when $2.object_id is not null then fns_rosim_mart.fns_v05_address_rf_xml('АдрЗд',$2)
						     else xmlelement(name АдрПомещ, xmlattributes($1.subject_rf as АдрЗд)) end,
						     (select xmlagg(xmlelement(name КадастНомЗУ, pz.cad_num)) from fns_rosim_mart.parent_zu pz where pz.object_id=$1.id and pz.cad_num is not null),						     
--РанПрКадНомЕГРП				     (select xmlagg(xmlelement(name РанПрКадНомЕГРП, oln.cad_num_egrp)) from fns_rosim_mart.old_number oln where oln.object_id=$1.id and oln.cad_num_egrp is not null),						     
						     (select xmlagg(xmlelement(name ПредКадНомОбГКН, po.cad_num)) from fns_rosim_mart.prev_obj po where po.object_id=$1.id and po.cad_num is not null),
						     (select xmlagg(xmlelement(name СвРанПрНомОбГКН, 
							xmlattributes(o_n.cad_num as КадНомОб,o_n.cond_num as УслНомОб,o_n.inv_num as ИнвНомОб))) 
							from fns_rosim_mart.old_number o_n where object_id=$1.id)
						     );




end if;
end if;
return v_result_xml;
END;
$function$
...
Рейтинг: 0 / 0
Как вызвать функцию в PostreSQL ?
    #39450166
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

диагноз -- вы копаетесь в чужом коде, в котором ни уха ни рыла.
пичаль.

Код: sql
1.
CREATE OR REPLACE FUNCTION fns_rosim_mart.fns_v05_object_xml(fns_rosim_mart.object, fns_rosim_mart.site)


означает, что вы должны передать в ф---ю в качестве параметров по 1 строке из таблиц fns_rosim_mart.object и fns_rosim_mart.site , где fns_rosim_mart --схема

т.е. можете например вызвать примерно так

Код: sql
1.
2.
3.
4.
Select fns_rosim_mart.object_xml((o.*), (s.*))
FROM fns_rosim_mart.object AS o
           , fns_rosim_mart.site AS s
LIMIT 1
...
Рейтинг: 0 / 0
Как вызвать функцию в PostreSQL ?
    #39450672
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Спасибо!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вызвать функцию в PostreSQL ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]