查询在自定义函数中没有结果数据的目的地
Query has no destination for result data in custom function
我是 postgres 的新手,我正在尝试用 select 语句的结果填充一些 table。但是我得到这个错误:
[42601] ERROR: query has no destination for result data
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Where: PL/pgSQL function get_child_folder_mask(integer) line 12 at SQL statement
这是我使用的查询:
insert into public."security_report_data" ("ReportID", "SDID", "PermissionType", "Mask")
select val_ReportID, tMain."SDID", t1."PermissionType", public."get_child_folder_mask"(t1."Mask") <----
from public."table_{00000000-eeea-4e2e-a04c-d4351282fb55}" tMain
inner join public."table_{00000000-eeea-4e2e-a04c-d4351282fb55}" tParent
on tMain."ParentTreeRowID" = tParent."RowID"
inner join public."report_aces" t1
on tParent."SDID" = t1."SDID"
inner join public."report_accounts" t2
on t1."Account" = t2."Account"
and (t2."Member" = val_Account or public."fn_is_everyone"(t2."Member") = true);
get_child_folder_mask的代码:
create function get_child_folder_mask(val_parentfoldermask integer DEFAULT NULL::integer) returns integer
language plpgsql
as
$$
declare val_Mask integer = 0;
begin
if ((val_ParentFolderMask & x'00000004'::integer) = x'00000004'::integer) then
select val_Mask = val_Mask | x'00000002'::integer;
end if;
if ((val_ParentFolderMask & x'00000008'::integer) = x'00000008'::integer) then
select val_Mask = val_Mask | x'00010000'::integer;
end if;
return val_Mask;
end;
$$;
我发现如果将 get_child_folder_mask 的参数从 t1."Mask" 更改为某个常量整数值,错误就会消失。我很乐意提供任何帮助。谢谢!
您不需要 SELECT 到 assign PL/pgSQL 中的变量值:
if ((val_ParentFolderMask & x'00000004'::integer) = x'00000004'::integer) then
val_Mask := val_Mask | x'00000002'::integer;
end if;
if ((val_ParentFolderMask & x'00000008'::integer) = x'00000008'::integer) then
val_Mask := val_Mask | x'00010000'::integer;
end if;
我是 postgres 的新手,我正在尝试用 select 语句的结果填充一些 table。但是我得到这个错误:
[42601] ERROR: query has no destination for result data
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Where: PL/pgSQL function get_child_folder_mask(integer) line 12 at SQL statement
这是我使用的查询:
insert into public."security_report_data" ("ReportID", "SDID", "PermissionType", "Mask")
select val_ReportID, tMain."SDID", t1."PermissionType", public."get_child_folder_mask"(t1."Mask") <----
from public."table_{00000000-eeea-4e2e-a04c-d4351282fb55}" tMain
inner join public."table_{00000000-eeea-4e2e-a04c-d4351282fb55}" tParent
on tMain."ParentTreeRowID" = tParent."RowID"
inner join public."report_aces" t1
on tParent."SDID" = t1."SDID"
inner join public."report_accounts" t2
on t1."Account" = t2."Account"
and (t2."Member" = val_Account or public."fn_is_everyone"(t2."Member") = true);
get_child_folder_mask的代码:
create function get_child_folder_mask(val_parentfoldermask integer DEFAULT NULL::integer) returns integer
language plpgsql
as
$$
declare val_Mask integer = 0;
begin
if ((val_ParentFolderMask & x'00000004'::integer) = x'00000004'::integer) then
select val_Mask = val_Mask | x'00000002'::integer;
end if;
if ((val_ParentFolderMask & x'00000008'::integer) = x'00000008'::integer) then
select val_Mask = val_Mask | x'00010000'::integer;
end if;
return val_Mask;
end;
$$;
我发现如果将 get_child_folder_mask 的参数从 t1."Mask" 更改为某个常量整数值,错误就会消失。我很乐意提供任何帮助。谢谢!
您不需要 SELECT 到 assign PL/pgSQL 中的变量值:
if ((val_ParentFolderMask & x'00000004'::integer) = x'00000004'::integer) then
val_Mask := val_Mask | x'00000002'::integer;
end if;
if ((val_ParentFolderMask & x'00000008'::integer) = x'00000008'::integer) then
val_Mask := val_Mask | x'00010000'::integer;
end if;