#postgresql
#postgresql
Вопрос:
CREATE OR REPLACE function spInsertReleaseSheet (
p_RedlineNo int,
p_RedlineDesc varchar(500),
p_ParentRedlineId int,
p_CategoryId int,
p_ChangeTypeId int,
p_ObjectName varchar(500),
p_DeployInfo int,
p_Notes varchar(500),
p_CodeReview int,
p_Env int,
p_TechId varchar(500),
p_CreatedBy varchar(50),
p_DeployStatus varchar(50),
p_ReleaseCodeStatus int)
RETURNS VOID as $$
DECLARE v_redlineid int;
DECLARE v_objectid int;
Begin
if(COALESCE(p_CreatedBy,'')='')
then
p_CreatedBy:='Suresh';
end if;
if(COALESCE(p_DeployStatus,'')='')
then
p_DeployStatus:='TBD';
end if;
BEGIN
--LOOP
START TRANSACTION;
IF EXISTS (SELECT "RedlineNumber" from public."Redline" where RedlineNumber=p_RedlineNo LIMIT 1)
Then
select "RedlineId" into v_redlineid from public."Redline" where RedlineNumber=p_RedlineNo LIMIT 1;
else
insert into Redline(RedlineNumber,ParentRedlineId,RedlineDesc,CreatedDate,CreatedBy)
Select p_RedlineNo,p_ParentRedlineId,p_RedlineDesc,now(),p_CreatedBy
RETURNING Redline into v_redlineid;
end if;
insert into Objects(CategoryId,Name)
Select p_CategoryId,p_ObjectName
RETURNING Redline into v_objectid;
insert into ObjectImplementation(RedlineId,CodeReviewStatusId,ChangeTypeId,Instructions,ObjectId,Notes,DeploymentStatus,EnvironmentId,TechReqId)
Select v_redlineid,p_CodeReview,p_ChangeTypeId,p_DeployInfo,v_objectid,p_Notes,p_DeployStatus,p_Env,p_TechId;
insert into ObjectImplementationHistory(ReleaseCodeStatusTypeId,CreateDatetime,EnvironmentId,ObjectId,RedlineId)
Select p_ReleaseCodeStatus,now(),p_Env,v_objectid,v_redlineid;
COMMIT;
--END LOOP
EXCEPTION
WHEN OTHERS THEN
-- if error, roll back any chanegs done by any of the sql statements
ROLLBACK;
END;
$$ LANGUAGE plpgsql;
================================================
Я получаю сообщение об ошибке
ERROR: syntax error at end of input
LINE 64: $$ LANGUAGE plpgsql;
^
SQL state: 42601
Character: 1750
Может ли какая-нибудь функция решить эту проблему
Когда я запускаю функцию, я получаю сообщение об ошибке ниже
=================================================
ERROR: function public.spinsertreleasesheet(integer, unknown, unknown, integer, integer, unknown, integer, unknown, integer, integer, unknown, unknown, integer, integer) does not exist
LINE 1: SELECT public.spinsertreleasesheet(
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 8
=======================================
SELECT public.spinsertreleasesheet(
177771,
'177771 : Tests',
NULL,
1,
1,
'Test',
1,
NULL,
1,
1,
NULL,
'Test',
1,
1
)
Несмотря на то, что функция есть в базе данных, она выдает ошибку
Комментарии:
1. похоже, что после отката в исключении отсутствует еще один «END;»
2. у вас есть две
begin
и только однаend
исправьте это с помощью вашей логики.
Ответ №1:
У вас есть 2 BEGIN
секунды и только одна END
. У вас также есть два DECLARE
раздела без причины. Измените на: one DECLARE
и либо установите второй END
, либо используйте только один BEGIN
.
Комментарии:
1. Кроме того,
START TRANSACTION
не будет работать.