CREATE OR REPLACE FUNCTION clin.insert_full_episode( _pk_identity integer, _date timestamp with time zone, _health_issue integer, _episode_d text, _encounter_RFE text, _encounter_AOE text, _encounter_type integer, _s text, _o text, _a text, _p text ) RETURNS boolean AS $BODY$ begin -- encounter: ------------------------------------------------ insert into clin.encounter ( fk_patient, fk_type, started, reason_for_encounter, assessment_of_encounter ) values ( _pk_identity, _encounter_type, _date, _encounter_RFE, _encounter_AOE ); -- episode: ------------------------------------------------ insert into clin.episode ( description, fk_health_issue, fk_encounter ) values ( _episode_d, _health_issue, currval('clin.encounter_pk_seq') ); IF _s IS NULL AND _o IS NULL AND _a IS NULL AND _p IS NULL THEN RAISE EXCEPTION 'All s, o, a, p entries are null, cannot insert encounter.' USING HINT = 'At least one of them must be not null'; END IF; -- subjective IF _s IS NOT NULL THEN insert into clin.clin_narrative ( clin_when, fk_encounter, fk_episode, narrative, soap_cat ) values ( _date, currval('clin.encounter_pk_seq'), currval('clin.episode_pk_seq'), _s, 's' ); END IF; IF _o IS NOT NULL THEN -- objective insert into clin.clin_narrative ( clin_when, fk_encounter, fk_episode, narrative, soap_cat ) values ( _date, currval('clin.encounter_pk_seq'), currval('clin.episode_pk_seq'), _o, 'o' ); END IF; IF _a IS NOT NULL THEN -- assessment insert into clin.clin_narrative ( clin_when, fk_encounter, fk_episode, narrative, soap_cat ) values ( _date, currval('clin.encounter_pk_seq'), currval('clin.episode_pk_seq'), _a, 'a' ); END IF; IF _p IS NOT NULL THEN -- plan insert into clin.clin_narrative ( clin_when, fk_encounter, fk_episode, narrative, soap_cat ) values ( _date, currval('clin.encounter_pk_seq'), currval('clin.episode_pk_seq'), _p, 'p' ); END IF; RETURN True; -- successfully inserted all data end; $BODY$ LANGUAGE plpgsql VOLATILE ; GRANT EXECUTE ON FUNCTION clin.insert_full_episode(integer, timestamp with time zone, integer, text, text, text, integer, text, text, text, text) TO GROUP "gm-staff";