У меня есть хранимая процедура, такие как следующие:PL/PGSQL итерация через возвращенный тип
CREATE OR REPLACE FUNCTION public.sp_shared_asset_delete_by_id(
"in_shared_asset_id" bigint,
"in_client_uuid" uuid)
RETURNS boolean AS
$BODY$
declare
"participant" cursor
begin
"participant" is select * from get_all_participants("in_shared_asset_id");
FOR row in "participant"
LOOP
--DELETE EACH PARTICIPANT
sp_participant_delete_by_id(row.participant_id, row.created_by_client);
END LOOP;
return true;
end
$BODY$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER
COST 100;
get_all_participants ("in_shared_asset_id") возвращает setof "участник" запись.
Каков правильный способ перебора всех записей, возвращаемых вызовом get_all_participants? В настоящее время я получаю ошибку plsql «близко».
CREATE OR REPLACE FUNCTION public.get_all_partipants(in_shared_id bigint)
RETURNS SETOF participant AS
$BODY$
begin
return query select participant.participant_id,
participant.shared_asset_id,
participant.participant_role_type,
participant.user_external_ref_uuid,
participant.user_first_name ,
participant.user_last_name ,
participant.user_email_address,
shared_asset.asset_external_ref_uuid uuid,
shared_asset.owner_external_ref_uuid uuid,
participant.deleted_timestamp
from participant
join shared_asset
on shared_asset.shared_asset_id = participant.shared_asset_id
where shared_asset.shared_asset_id = "in_shared_id"
and participant.deleted_timestamp is null;
end
$BODY$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER
COST 100
ROWS 1000;
Это не похоже на pl/sql. – OldProgrammer
Что такое ** точное сообщение об ошибке, которое вы получаете? –