PostgreSQL의 저장 프로 시저가 일정에 완벽하게 작동합니다. 그러나 'x'일 후에 제대로 작동하지 않습니다. 'x'는 우리가 알아챈 한 3에서 90 사이의 불확실한 변수입니다. 일단 테이블을 '나누어서'테이블을 잘못 채우면 다음에 수동으로 실행될 때까지 향후 예약 된 실행에서이 방식으로 계속 작동합니다.PostgreSQL 저장 프로 시저가 갑자기 작동을 멈 춥니 다
저는 PostgreSQL 9.3.4를 실행하고 있습니다. 나는 SP에 대한 코드를 게시 할 수 있지만 뭔가 잘못 될 때까지 확실히 작동합니다.
어떤 아이디어 일 수 있으며 어떻게 해결할 수 있습니까?
코드는 :
CREATE OR REPLACE FUNCTION public.sp_oppscreated()
RETURNS integer
LANGUAGE plpgsql
AS $function$
BEGIN
DROP TABLE IF EXISTS bec_oppscreated CASCADE;
CREATE TABLE bec_oppscreated WITH (OIDS=TRUE)
AS
SELECT opportunity.id AS oppid,
SPLIT_PART(user2.username, '@', 1) AS username,
recordtype.name AS opptype,
opportunity.stagename AS stage,
opportunity.createddate AS createddate,
opportunity.ve__c AS ve,
opportunity.amount AS oppamount,
opportunity.lab AS lab,
CASE
WHEN (recordtype.name = 'Proposal' AND opportunity.ve__c <> 'V') THEN opportunity.amount
WHEN (recordtype.name = 'Proposal' AND opportunity.ve__c = 'V' AND opportunity.lab <> 0 AND opportunity.lab IS NOT NULL) THEN opportunity.lab
ELSE 0
END AS amount_prp_created,
CASE
WHEN (recordtype.name = 'Amendment' AND opportunity.ve__c <> 'V') THEN opportunity.amount
WHEN (recordtype.name = 'Amendment' AND opportunity.ve__c = 'V' AND opportunity.lab <> 0 AND opportunity.lab IS NOT NULL) THEN opportunity.lab
ELSE 0
END AS amount_amd_created,
CASE
WHEN (opportunity.ve__c <> 'V') THEN opportunity.amount
WHEN (opportunity.ve__c = 'V' AND opportunity.lab <> 0 AND opportunity.lab IS NOT NULL) THEN opportunity.lab
ELSE 0
END AS amount_cons_created,
CASE WHEN (opportunity.ve__c = 'A') THEN opportunity.amount ELSE 0 END AS amount_A_created,
CASE WHEN (opportunity.ve__c = 'C') THEN opportunity.amount ELSE 0 END AS amount_C_created,
CASE WHEN (opportunity.ve__c = 'D') THEN opportunity.amount ELSE 0 END AS amount_D_created,
CASE WHEN (opportunity.ve__c = 'I') THEN opportunity.amount ELSE 0 END AS amount_I_created,
CASE WHEN (opportunity.ve__c = 'L') THEN opportunity.amount ELSE 0 END AS amount_L_created,
CASE WHEN (opportunity.ve__c = 'M') THEN opportunity.amount ELSE 0 END AS amount_M_created,
CASE WHEN (opportunity.ve__c = 'P') THEN opportunity.amount ELSE 0 END AS amount_P_created,
CASE WHEN (opportunity.ve__c = 'V') THEN opportunity.amount ELSE 0 END AS amount_V_created,
opportunity.amount AS amount_created,
CASE
WHEN (recordtype.name = 'Proposal' AND opportunity.ve__c <> 'V') THEN 1
WHEN (recordtype.name = 'Proposal' AND opportunity.ve__c = 'V' AND opportunity.lab <> 0 AND opportunity.lab IS NOT NULL) THEN 1
ELSE 0
END AS count_prp_created,
CASE
WHEN (recordtype.name = 'Amendment' AND opportunity.ve__c <> 'V') THEN 1
WHEN (recordtype.name = 'Amendment' AND opportunity.ve__c = 'V' AND opportunity.lab <> 0 AND opportunity.lab IS NOT NULL) THEN 1
ELSE 0
END AS count_amd_created,
CASE
WHEN (opportunity.ve__c <> 'V') THEN 1
WHEN (opportunity.ve__c = 'V' AND opportunity.lab <> 0 AND opportunity.lab IS NOT NULL) THEN 1
ELSE 0
END AS count_cons_created,
CASE WHEN (opportunity.ve__c = 'A') THEN 1 ELSE 0 END AS count_A_created,
CASE WHEN (opportunity.ve__c = 'C') THEN 1 ELSE 0 END AS count_C_created,
CASE WHEN (opportunity.ve__c = 'D') THEN 1 ELSE 0 END AS count_D_created,
CASE WHEN (opportunity.ve__c = 'I') THEN 1 ELSE 0 END AS count_I_created,
CASE WHEN (opportunity.ve__c = 'L') THEN 1 ELSE 0 END AS count_L_created,
CASE WHEN (opportunity.ve__c = 'M') THEN 1 ELSE 0 END AS count_M_created,
CASE WHEN (opportunity.ve__c = 'P') THEN 1 ELSE 0 END AS count_P_created,
CASE WHEN (opportunity.ve__c = 'V') THEN 1 ELSE 0 END AS count_V_created,
1 AS count_created
FROM opportunity
LEFT JOIN user2 ON opportunity.ownerid = user2.id
LEFT JOIN recordtype ON opportunity.recordtypeid = recordtype.id
WHERE opportunity.isdeleted = FALSE
AND opportunity.createddate > '2007-11-02 03:59:59'
AND opportunity.lastmodifieddate > '2010-01-11 04:59:59'
ORDER BY username ASC;
GRANT SELECT
ON bec_oppscreated
TO public;
RETURN 0;
EXCEPTION WHEN OTHERS THEN
BEGIN
RAISE notice 'The transaction is in an uncommittable state. '
'Transaction was rolled back';
RAISE notice '% %', SQLERRM, SQLSTATE;
RETURN -1;
END;
END;
$function$
몇 가지 코드를 공유 할 수 있습니까? – Mureinik
코드 블록이 추가되었습니다. – Dezzie
"일정에 완벽하게 적용됩니다"를 정의하십시오. "일정"은 무엇입니까? –