Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Структура запроса не соответствует типу результата функции / 4 сообщений из 4, страница 1 из 1
27.02.2021, 22:55
    #40049279
Cola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура запроса не соответствует типу результата функции
Ниже функция, вызываю так: select * from TEMP_PL_unit2_4();
получаю: Ошибка ядра: ОШИБКА: structure of query does not match function result type
подскажите - где туплю? Плииз!

Код: 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.
CREATE OR REPLACE FUNCTION public.temp_pl_unit2_4()
 RETURNS SETOF public.operation
 LANGUAGE plpgsql
AS $function$
  DECLARE viruchka_fact numeric :=0;
  DECLARE sebestoimost_fact numeric :=0;
  DECLARE summ numeric :=0;
begin

SELECT
 (Select SUM(public.operation.sum_acount_cur))+ 
   (SELECT case when SUM(public.operation.sum_acount_cur*-1) is null then 0 end
    FROM "public"."operation" 
    WHERE (public.operation.shot_debit_id = 138) 
     AND ( "public"."operation"."user_master_id"='8')
     AND ("public"."operation"."approved"='1')
     AND ("public"."operation"."plan_fakt"='1')
     AND ("operation"."oper_data" >= '01.01.2001' ::date OR "operation"."oper_data" = NULL)
     AND ("operation"."oper_data"< '01.03.2021' ::date+1 OR "operation"."oper_data"= NULL)
   ) INTO viruchka_fact
 FROM "public"."operation"
  WHERE ((public.operation.shot_credit_id = 135) OR (public.operation.shot_credit_id = 136)
   OR (public.operation.shot_credit_id = 137)) 
   AND ( "public"."operation"."user_master_id"='8')
   AND ("public"."operation"."approved"='1')
   AND ("public"."operation"."plan_fakt"='1')
   AND ("operation"."oper_data" >= '01.01.2001' ::date OR "operation"."oper_data" = NULL)
   AND ("operation"."oper_data"< '01.03.2021' ::date+1 OR "operation"."oper_data"= NULL); 
 
 SELECT  SUM(public.operation.sum_acount_cur) INTO sebestoimost_fact
  FROM "public"."operation"
  WHERE ((public.operation.shot_debit_id = 173) OR (public.operation.shot_debit_id = 174)
   OR (public.operation.shot_debit_id = 175)) 
   AND ( "public"."operation"."user_master_id"='8')
   AND ("public"."operation"."approved"='1')
   AND ("public"."operation"."plan_fakt"='1')
   AND ("operation"."oper_data" >= '01.01.2001' ::date OR "operation"."oper_data" = NULL)
   AND ("operation"."oper_data"< '01.03.2021' ::date+1 OR "operation"."oper_data"= NULL); 

--Вывод результата-----------------------------------------------------------
 summ=viruchka_fact-sebestoimost_fact;
 return query
 
 SELECT  '5. ' AS "Lavel-1", public."Directory_Language"."Name" AS "Type", '' AS "name_stat", '' AS "Firm", summ, '' AS "Partner", '' AS "Name_project"
 FROM public.operation 
   INNER JOIN public."Directory" ON (public."Directory".id=public.operation.plan_fakt)
   INNER JOIN public."Directory_Language" ON (public."Directory_Language".master_id=public."Directory".id)
 WHERE "public"."operation"."user_master_id"='8' 
   AND ("public"."operation"."approved"='1')
   AND ("public"."operation"."plan_fakt"='1')
   AND ("operation"."oper_data" >= '01.01.2001' ::date OR "operation"."oper_data" = NULL)
   AND ("operation"."oper_data"< '01.03.2021' ::date+1 OR "operation"."oper_data"= NULL)
   AND (public."Directory_Language".id_language='2');
  
end;
$function$
...
Рейтинг: 0 / 0
27.02.2021, 23:05
    #40049282
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура запроса не соответствует типу результата функции
Cola,

замените
SELECT '5. ' AS "Lavel-1", public."Directory_Language"."Name" AS "Type", '' AS "name_stat", '' AS "Firm", summ, '' AS "Partner", '' AS "Name_project"
FROM public.operation

на

SELECT operation.*
FROM public.operation

и будет вам счастье....

вам же вполне написали что
return query не совпадает по структуре с SETOF public.operation
что учитывая ваш код ну совершенно не удивительно.

если setof чего то там возвращаете - возвращайте его как надо через select * а не пытайтесь сами record корректный сконструировать.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
27.02.2021, 23:33
    #40049284
Cola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура запроса не соответствует типу результата функции
Maxim Boguk
Cola,

замените
SELECT '5. ' AS "Lavel-1", public."Directory_Language"."Name" AS "Type", '' AS "name_stat", '' AS "Firm", summ, '' AS "Partner", '' AS "Name_project"
FROM public.operation
на
SELECT operation.*
FROM public.operation

и будет вам счастье....

вам же вполне написали что
return query не совпадает по структуре с SETOF public.operation
что учитывая ваш код ну совершенно не удивительно.

если setof чего то там возвращаете - возвращайте его как надо через select * а не пытайтесь сами record корректный сконструировать.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru


А если мне надо вернуть:

Код: plsql
1.
RETURNS TABLE("Lavel1" text, "Type" character varying, name_stat character varying, "Firm" character varying, summ numeric, "Partner" character varying, "Name_project" character varying)
...
Рейтинг: 0 / 0
27.02.2021, 23:55
    #40049287
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура запроса не соответствует типу результата функции
Cola


А если мне надо вернуть:

Код: plsql
1.
RETURNS TABLE("Lavel1" text, "Type" character varying, name_stat character varying, "Firm" character varying, summ numeric, "Partner" character varying, "Name_project" character varying)



Возвращайте...ктож вам мешает?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Структура запроса не соответствует типу результата функции / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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